Page MenuHomeHEPForge

No OneTemporary

This file is larger than 256 KB, so syntax highlighting was skipped.
diff --git a/Config/HepMCHelper.h b/Config/HepMCHelper.h
deleted file mode 100644
--- a/Config/HepMCHelper.h
+++ /dev/null
@@ -1,27 +0,0 @@
-// -*- C++ -*-
-//
-// HepMCHelper_HepMC.h is a part of Herwig++ - A multi-purpose Monte Carlo event generator
-// Copyright (C) 2002-2007 The Herwig Collaboration
-//
-// Herwig++ is licenced under version 2 of the GPL, see COPYING for details.
-// Please respect the MCnet academic guidelines, see GUIDELINES for details.
-//
-//
-// This is a helper header to implement HepMC conversions
-//
-#include "ThePEG/Vectors/HepMCConverter.h"
-#include "HepMC/GenEvent.h"
-
-namespace ThePEG {
-/**
- * Struct for HepMC conversion
- */
-template<>
-struct HepMCTraits<HepMC::GenEvent>
- : public HepMCTraitsBase<HepMC::GenEvent,
- HepMC::GenParticle,
- HepMC::GenVertex,
- HepMC::Polarization,
- HepMC::PdfInfo>
-{};
-}
diff --git a/Contrib/make_makefiles.sh.in b/Contrib/make_makefiles.sh.in
--- a/Contrib/make_makefiles.sh.in
+++ b/Contrib/make_makefiles.sh.in
@@ -1,29 +1,26 @@
#!/bin/bash
# script to put the HERWIG and THEPEG paths into the simple makefiles,
# for everything else the user is on their own!
# loop over all the files
THEPEGINCLUDE="@THEPEGINCLUDE@"
GSLINCLUDE="@GSLINCLUDE@"
FASTJETINCLUDE="@FASTJETINCLUDE@"
HERWIGINCLUDE=-I@prefix@/include/
-HEPMCINCLUDE="@HEPMCINCLUDE@"
-HEPMCLIBS="@HEPMCLIBS@"
+
for i in *
do
# if a directory
if [ -d $i ]; then
# check input files exists
file=$i/Makefile.in
if [ -e $file ]; then
file2=`echo $file | sed s!\.in!!`
echo 'Making ' $file2
sed "s!THEPEGINCLUDE.*\=!THEPEGINCLUDE=$THEPEGINCLUDE!" < $file | \
sed "s!HERWIGINCLUDE.*\=!HERWIGINCLUDE=$HERWIGINCLUDE!" | \
sed "s!GSLINCLUDE.*\=!GSLINCLUDE=$GSLINCLUDE!" | \
- sed "s!FASTJETINCLUDE.*\=!FASTJETINCLUDE=$FASTJETINCLUDE!" | \
- sed "s!HEPMCINCLUDE.*\=!HEPMCINCLUDE=$HEPMCINCLUDE!" | \
- sed "s!HEPMCLIBS.*\=!HEPMCLIBS=$HEPMCLIBS!" > $file2
+ sed "s!FASTJETINCLUDE.*\=!FASTJETINCLUDE=$FASTJETINCLUDE!" > $file2
fi
fi
done
diff --git a/Decay/Radiation/FFDipole.cc b/Decay/Radiation/FFDipole.cc
--- a/Decay/Radiation/FFDipole.cc
+++ b/Decay/Radiation/FFDipole.cc
@@ -1,764 +1,764 @@
// -*- C++ -*-
//
// FFDipole.cc is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2007 The Herwig Collaboration
//
// Herwig++ is licenced under version 2 of the GPL, see COPYING for details.
// Please respect the MCnet academic guidelines, see GUIDELINES for details.
//
//
// This is the implementation of the non-inlined, non-templated member
// functions of the FFDipole class.
//
#include "FFDipole.h"
#include "ThePEG/PDT/EnumParticles.h"
#include "ThePEG/EventRecord/Particle.h"
#include "ThePEG/Interface/Parameter.h"
#include "ThePEG/Interface/Switch.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
#include "YFSFormFactors.h"
using namespace Herwig;
void FFDipole::persistentOutput(PersistentOStream & os) const {
os << ounit(_emin,GeV) << ounit(_eminrest,GeV) << ounit(_eminlab,GeV)
<< _nphotonmax << _maxwgt
<< _mode << _maxtry << _energyopt << _betaopt << _dipoleopt;
}
void FFDipole::persistentInput(PersistentIStream & is, int) {
is >> iunit(_emin,GeV) >> iunit(_eminrest,GeV) >> iunit(_eminlab,GeV)
>> _nphotonmax >> _maxwgt
>> _mode >> _maxtry >> _energyopt >> _betaopt >> _dipoleopt;
}
ClassDescription<FFDipole> FFDipole::initFFDipole;
// Definition of the static class description member.
void FFDipole::Init() {
static ClassDocumentation<FFDipole> documentation
- ("The FFDipole class implements the final-final dipole for the YODA algorithm");
+ ("The FFDipole class implements the final-final dipole for the SOPTHY algorithm");
static Switch<FFDipole,unsigned int> interfaceUnWeight
("UnWeight",
"Control the type of unweighting to perform, only one should be used the"
" other options are for debugging purposes.",
&FFDipole::_mode, 1, false, false);
static SwitchOption interfaceUnWeightNoUnweighting
(interfaceUnWeight,
"NoUnweighting",
"Perform no unweighting",
0);
static SwitchOption interfaceUnWeightAllWeights
(interfaceUnWeight,
"AllWeights",
"Include all the weights",
1);
static SwitchOption interfaceUnWeightNoJacobian
(interfaceUnWeight,
"NoJacobian",
"Only include the dipole and YFS weights",
2);
static SwitchOption interfaceUnWeightDipole
(interfaceUnWeight,
"Dipole",
"Only include the dipole weight",
3);
static SwitchOption interfaceUnWeightYFS
(interfaceUnWeight,
"YFS",
"Only include the YFS weight",
4);
static Parameter<FFDipole,unsigned int> interfaceMaximumTries
("MaximumTries",
"Maximum number of attempts to unweight",
&FFDipole::_maxtry, 500, 10, 100000,
false, false, Interface::limited);
static Parameter<FFDipole,Energy> interfaceMinimumEnergyBoosted
("MinimumEnergyBoosted",
"The minimum energy of the photons in the boosted frame in which"
" they are generated.",
&FFDipole::_emin, MeV, 1.e-6*MeV, ZERO, 100.0*MeV,
false, false, Interface::limited);
static Parameter<FFDipole,Energy> interfaceMinimumEnergyRest
("MinimumEnergyRest",
"The minimum energy of the photons in the rest frame of the decaying particle",
&FFDipole::_eminrest, MeV, 100.0*MeV, 1.0*MeV, 10000.0*MeV,
false, false, Interface::limited);
static Parameter<FFDipole,Energy> interfaceMinimumEnergyLab
("MinimumEnergyLab",
"The minimum energy of the photons in the lab frame",
&FFDipole::_eminlab, MeV, 100.0*MeV, 1.0*MeV, 10000.0*MeV,
false, false, Interface::limited);
static Parameter<FFDipole,unsigned int> interfaceMaximumNumberOfPhotons
("MaximumNumberOfPhotons",
"The maximum number of photons to produce",
&FFDipole::_nphotonmax, 20, 1, 1000,
false, false, Interface::limited);
static Parameter<FFDipole,double> interfaceMaximumWeight
("MaximumWeight",
"The maximum weight for unweighting",
&FFDipole::_maxwgt, 2.0, 0.0, 100.0,
false, false, Interface::limited);
static Switch<FFDipole,unsigned int> interfaceEnergyCutOff
("EnergyCutOff",
"The type of cut-off on the photon energy to apply",
&FFDipole::_energyopt, 1, false, false);
static SwitchOption interfaceEnergyCutOffBoostedFrame
(interfaceEnergyCutOff,
"BoostedFrame",
"Only apply cut-off in boosted frame",
0);
static SwitchOption interfaceEnergyCutOffRestFrame
(interfaceEnergyCutOff,
"RestFrame",
"Apply cut-off in rest frame",
1);
static SwitchOption interfaceEnergyCutOff2
(interfaceEnergyCutOff,
"LabFrame",
"Apply cut-off in lab frame",
2);
static Switch<FFDipole,unsigned int> interfaceBetaOption
("BetaOption",
"Option for the inclusive of the higher beta coefficients",
&FFDipole::_betaopt, 1, false, false);
static SwitchOption interfaceBetaOptionNone
(interfaceBetaOption,
"None",
"No higher betas included",
0);
static SwitchOption interfaceBetaOptionCollinear
(interfaceBetaOption,
"Collinear",
"Include the collinear approx",
1);
static SwitchOption interfaceBetaOptionCollinearVirtA
(interfaceBetaOption,
"CollinearVirtualA",
"Include the collinear approx with virtual corrections",
2);
static SwitchOption interfaceBetaOptionCollinearVirtB
(interfaceBetaOption,
"CollinearVirtualB",
"Include the collinear approx with virtual corrections",
3);
static SwitchOption interfaceBetaOptionExact
(interfaceBetaOption,
"Exact",
"Include the exact higher order terms if available",
4);
static Switch<FFDipole,unsigned int> interfaceDipoleOption
("DipoleOption",
"Option for generating the primary dipole distribution",
&FFDipole::_dipoleopt, 0, false, false);
static SwitchOption interfaceDipoleOptionNoMass
(interfaceDipoleOption,
"NoMass",
"Don't include the mass terms in the primary distribution",
0);
static SwitchOption interfaceDipoleOptionMass
(interfaceDipoleOption,
"Mass",
"Include the mass terms in the primary distribution",
1);
}
ParticleVector FFDipole::generatePhotons(const Particle & p,
ParticleVector children)
{
// set parameters which won't change in the event loop
// masses of the particles
_m[0]=p.mass();
_m[1]=children[0]->mass();
_m[2]=children[1]->mass();
// set the maximum photon energy (exact - no approximations here).
_emax=(0.5*(_m[0]-sqr(_m[1]+_m[2])/_m[0]))*_m[0]/(_m[1]+_m[2]);
// momenta before radiation in lab
for(unsigned int ix=0;ix<2;++ix){_qlab[ix]=children[ix]->momentum();}
// get the charges of the particles in units of the positron charge
_charge=children[0]->dataPtr()->iCharge()*children[1]->dataPtr()->iCharge()/9.;
// boost the momenta to the rest frame
Boost boostv(-p.momentum().boostVector());
// boost the particles to the parent rest frame
// and set the initial momenta of the charged particles
// in the dipole rest frame: currently this is the same
// as the boson rest frame...
for(unsigned int ix=0;ix<2;++ix)
{
children[ix]->deepBoost(boostv);
_qdrf[ix]=children[ix]->momentum();
_qprf[ix]=children[ix]->momentum();
}
// perform the unweighting
double wgt;
unsigned int ntry(0);
do
{
wgt =makePhotons(-boostv,children);
++ntry;
if(wgt>_maxwgt||wgt<0.0||isnan(wgt)==1)
{
if(wgt<=10.0) {
generator()->log() << "Weight exceeds maximum for decay "
<< p.PDGName() << " "
<< children[0]->PDGName()
<< " " << children[1]->PDGName()
<< "in FFDipole: resetting maximum weight." << endl
<< " Old Maximum = " << _maxwgt
<< " New Maximum = " << wgt << endl;
}
if(wgt>10.0) {
generator()->log() << "Weight exceeds maximum for decay "
<< p.PDGName() << " "
<< children[0]->PDGName()
<< " " << children[1]->PDGName()
<< "in FFDipole: maximum weight set to 10.0" << endl
<< " Old Maximum = " << _maxwgt
<< " New Maximum = " << 10.0 << endl;
}
generator()->log() << "testing input mass "
<< p.mass()/GeV << " "
<< children[0]->mass()/GeV << " "
<< children[1]->mass()/GeV << endl;
generator()->log() << "testing momenta " << endl;
generator()->log() << ounit(p.momentum(),GeV) << endl;
for(unsigned int ix=0;ix<2;++ix)
{generator()->log() << "charged "
<< ix << " "
<< ounit(_qnewlab[ix],GeV) << endl;}
for(unsigned int ix=0;ix<_multiplicity;++ix)
{generator()->log() << "photons "
<< ix << " "
<< ounit(_llab[ix],GeV) << endl;}
generator()->log() << "wgt : " << wgt << endl;
generator()->log() << "_mewgt : " << _mewgt << endl;
generator()->log() << "_jacobianwgt: " << _jacobianwgt << endl;
generator()->log() << "_yfswgt : " << _yfswgt << endl;
generator()->log() << "_dipolewgt : " << _dipolewgt << endl;
generator()->log() << "dipoleopt : " << _dipoleopt << endl;
if(wgt <= 10.0) { _maxwgt = wgt; }
}
}
while(wgt<(_maxwgt*UseRandom::rnd())&&ntry<_maxtry);
if(ntry>=_maxtry)
{
generator()->log() << "FFDipole failed to generate QED radiation for the decay "
<< p.PDGName() << " -> "
<< children[0]->PDGName() << " "
<< children[1]->PDGName() << endl;
return children;
}
// produce products after radiation if needed
if(_multiplicity>0)
{
// change the momenta of the children, they are currently
// in original rest frame
for(unsigned int ix=0;ix<2;++ix)
{
// unit vector along direction
Boost br = children[ix]->momentum().vect().unit();
// calculate the boost vector using expression accurate for beta->1
double beta(sqrt((_qdrf[ix].e()+_m[ix+1])*(_qdrf[ix].e()-_m[ix+1]))/
_qdrf[ix].e());
double ombeta(sqr(_m[ix+1]/_qdrf[ix].e())/(1.+beta));
double betap(sqrt((_qnewdrf[ix].e()+_m[ix+1])*(_qnewdrf[ix].e()-_m[ix+1]))
/_qnewdrf[ix].e());
double ombetap(sqr(_m[ix+1]/_qnewdrf[ix].e())/(1.+betap));
// boost to get correct momentum in dipole rest frame
double bv(-(ombetap-ombeta)/((1.+beta)*(1.-betap)+ombeta-ombetap));
br *=bv;
children[ix]->deepBoost(br);
// boost to the parent rest frame
Lorentz5Momentum pnew(_bigLdrf.x(),_bigLdrf.y(),_bigLdrf.z(),
_bigLdrf.e(),_m[0]);
pnew.rescaleEnergy();
br = pnew.findBoostToCM();
children[ix]->deepBoost(br);
// boost back to the lab
children[ix]->deepBoost(-boostv);
}
// add the photons to the event record
tcPDPtr photon=getParticleData(ParticleID::gamma);
for(unsigned int ix=0;ix<_multiplicity;++ix)
{
// add if not removed because energy too low
if(!_photcut[ix])
{
PPtr newphoton=new_ptr(Particle(photon));
newphoton->set5Momentum(_llab[ix]);
children.push_back(newphoton);
}
}
return children;
}
// otherwise just return the orginial particles
else
{
for(unsigned int ix=0;ix<2;++ix){children[ix]->deepBoost(-boostv);}
return children;
}
}
// member which generates the photons
double FFDipole::makePhotons(Boost boostv,ParticleVector children)
{
// set the initial parameters
// number of photons (zero)
_multiplicity=0;
// zero size of photon vectors
_ldrf.clear();
_lprf.clear();
_llab.clear();
// zero size of angle storage
_sinphot.clear();
_cosphot.clear();
_photcut.clear();
_photonwgt.clear();
// zero total momenta of the photons
_bigLdrf=Lorentz5Momentum();
_bigLprf=Lorentz5Momentum();
// set the initial values of the reweighting factors to one
_dipolewgt = 1.0;
_yfswgt = 1.0;
_jacobianwgt = 1.0;
_mewgt = 1.0;
// calculate the velocities of the charged particles (crude/overvalued)
double beta1(sqrt((_qdrf[0].e()+_m[1])*(_qdrf[0].e()-_m[1]))/_qdrf[0].e());
double beta2(sqrt((_qdrf[1].e()+_m[2])*(_qdrf[1].e()-_m[2]))/_qdrf[1].e());
// calculate 1-beta to avoid numerical problems
double ombeta1(sqr(_m[1]/_qdrf[0].e())/(1.+beta1));
double ombeta2(sqr(_m[2]/_qdrf[1].e())/(1.+beta2));
// calculate the average photon multiplicity
double aver(YFSFormFactors::nbarFF(beta1,ombeta1,beta2,ombeta2,_charge,
_emax,_emin,_dipoleopt==1));
// calculate the number of photons using the poisson
_multiplicity = UseRandom::rndPoisson(aver);
// calculate the first part of the YFS factor
// (N.B. crude form factor is just exp(-aver) to get a poisson)
_yfswgt*=exp(aver);
// if photons produced
if(_multiplicity>0)
{
_photonwgt.resize(_multiplicity);
// generate the photon momenta with respect to q1
// keeping track of the weight
for(unsigned int ix=0;ix<_multiplicity;++ix)
{_photonwgt[ix]=photon(beta1,ombeta1,beta2,ombeta2);}
// rotate the photons so in dipole rest frame rather
// than angle measured w.r.t q1 first work out the rotation
SpinOneLorentzRotation rotation;
rotation.setRotateZ(-_qdrf[0].phi());
rotation.rotateY(_qdrf[0].theta());
rotation.rotateZ(_qdrf[0].phi());
// rotate the total
_bigLdrf*=rotation;
// rotate the photons
for(unsigned int ix=0;ix<_multiplicity;++ix){_ldrf[ix]*=rotation;}
// boost the momenta without any removal of low energy photons
// resize arrays
_photcut.resize(_multiplicity,false);
_lprf.resize(_multiplicity);
_llab.resize(_multiplicity);
// perform the boost
if(!boostMomenta(boostv)){return 0.;}
// apply the cut on the photon energy if needed
unsigned int nremoved(removePhotons());
// redo the boost if we have removed photons
if(nremoved!=0){if(!boostMomenta(boostv)){return 0.;}}
// form factor part of the removal term to remove existing cut
if(_energyopt!=0)
{_dipolewgt*=YFSFormFactors::exponentialYFSFF(beta1,ombeta1,beta2,ombeta2,
_qdrf[0].e(),_qdrf[1].e(),
_m[1],_m[2],_m[0]*_m[0],
_charge,_emin);}
// calculate the new dipole weight
// calculate velocities and 1-velocites
beta1=sqrt((_qnewdrf[0].e()+_m[1])*(_qnewdrf[0].e()-_m[1]))/_qnewdrf[0].e();
beta2=sqrt((_qnewdrf[1].e()+_m[2])*(_qnewdrf[1].e()-_m[2]))/_qnewdrf[1].e();
ombeta1=sqr(_m[1]/_qnewdrf[0].e())/(1.+beta1);
ombeta2=sqr(_m[2]/_qnewdrf[1].e())/(1.+beta2);
for(unsigned int ix=0;ix<_multiplicity;++ix)
{if(!_photcut[ix])
{_dipolewgt*=exactDipoleWeight(beta1,ombeta1,beta2,ombeta2,ix)/
_photonwgt[ix];}}
// calculate the weight for the photon removal
Energy2 s((_qnewdrf[0]+_qnewdrf[1]).m2());
// calculate the second part of the yfs form factor
// this is different for the different photon removal options
// option with no removal
if(_energyopt==0)
{_yfswgt*=YFSFormFactors::exponentialYFSFF(beta1,ombeta1,beta2,ombeta2,
_qnewdrf[0].e(),_qnewdrf[1].e(),
_m[1],_m[2],s,_charge,_emin);}
// weight for option with cut in the rest frame
else if(_energyopt==1)
{
// yfs piece
double nbeta1(sqrt( (_qnewprf[0].e()+_m[1])*(_qnewprf[0].e()-_m[1]))
/_qnewprf[0].e());
double nbeta2(sqrt( (_qnewprf[1].e()+_m[2])*(_qnewprf[1].e()-_m[2]))
/_qnewprf[1].e());
double nomb1 (sqr(_m[1]/_qnewprf[0].e())/(1.+nbeta1));
double nomb2 (sqr(_m[2]/_qnewprf[1].e())/(1.+nbeta2));
_yfswgt*=YFSFormFactors::exponentialYFSFF(nbeta1,nomb1,nbeta2,nomb2,
_qnewprf[0].e(),_qnewprf[1].e(),
_m[1],_m[2],s,_charge,_eminrest);
// dipole piece
// Find the momenta of the particles of original particles in new rest frame
Lorentz5Momentum pnew(_bigLdrf.x(),_bigLdrf.y(),
_bigLdrf.z(),_bigLdrf.e(),_m[0]);
pnew.rescaleEnergy();
SpinOneLorentzRotation boost(pnew.findBoostToCM());
Lorentz5Momentum q1=boost*_qdrf[0];
Lorentz5Momentum q2=boost*_qdrf[1];
// use this to calculate the form factor
nbeta1=sqrt( (q1.e()+_m[1])*(q1.e()-_m[1]))
/q1.e();
nbeta2=sqrt( (q2.e()+_m[2])*(q2.e()-_m[2]))
/q2.e();
nomb1 =sqr(_m[1]/q1.e())/(1.+nbeta1);
nomb2 =sqr(_m[2]/q2.e())/(1.+nbeta2);
_dipolewgt /=YFSFormFactors::exponentialYFSFF(nbeta1,nomb1,nbeta2,nomb2,
q1.e(),q2.e(),
_m[1],_m[2],_m[0]*_m[0],
_charge,_eminrest);
}
// weight for option with cut in the rest frame
else if(_energyopt==2)
{
// yfs piece
double nbeta1(sqrt( (_qnewlab[0].e()+_m[1])*(_qnewlab[0].e()-_m[1]))
/_qnewlab[0].e());
double nbeta2(sqrt( (_qnewlab[1].e()+_m[2])*(_qnewlab[1].e()-_m[2]))
/_qnewlab[1].e());
double nomb1 (sqr(_m[1]/_qnewlab[0].e())/(1.+nbeta1));
double nomb2 (sqr(_m[2]/_qnewlab[1].e())/(1.+nbeta2));
_yfswgt*=YFSFormFactors::exponentialYFSFF(nbeta1,nomb1,nbeta2,nomb2,
_qnewlab[0].e(),_qnewlab[1].e(),
_m[1],_m[2],s,
_charge,_eminlab);
// dipole piece
// Find the momenta of the particles of original particles in new rest frame
Lorentz5Momentum pnew(_bigLdrf.x(),_bigLdrf.y(),
_bigLdrf.z(),_bigLdrf.e(),_m[0]);
pnew.rescaleEnergy();
SpinOneLorentzRotation boost(pnew.findBoostToCM());
Lorentz5Momentum q1=boost*_qdrf[0];
Lorentz5Momentum q2=boost*_qdrf[1];
// then boost to the lab
boost.setBoost(boostv);
q1 *=boost;
q2 *=boost;
// use this to calculate the form factor
nbeta1=sqrt( (q1.e()+_m[1])*(q1.e()-_m[1]))
/q1.e();
nbeta2=sqrt( (q2.e()+_m[2])*(q2.e()-_m[2]))
/q2.e();
nomb1 =sqr(_m[1]/q1.e())/(1.+nbeta1);
nomb2 =sqr(_m[2]/q2.e())/(1.+nbeta2);
_dipolewgt /=YFSFormFactors::exponentialYFSFF(nbeta1,nomb1,nbeta2,nomb2,
q1.e(),q2.e(),_m[1],_m[2],
_m[0]*_m[0],_charge,_eminlab);
}
// Calculating jacobian weight
_jacobianwgt = jacobianWeight();
// Calculate the weight for the corrections
_mewgt = meWeight(children);
}
// otherwise copy momenta
else
{
for(unsigned int ix=0;ix<2;++ix)
{
_qnewdrf[ix]=_qdrf[ix];
_qnewprf[ix]=_qprf[ix];
_qnewlab[ix]=_qlab[ix];
}
_jacobianwgt = 1.0;
_yfswgt*=YFSFormFactors::exponentialYFSFF(beta1,ombeta1,beta2,ombeta2,
_qdrf[0].e(),_qdrf[1].e(),
_m[1],_m[2],_m[0]*_m[0],
_charge,_emin);
_dipolewgt = 1.0;
}
// Virtual corrections for beta_0:
// These should be zero for the scalar case as there is no
// collinear singularity going by the dipoles above...
// Use mass of decaying particle...
if(_betaopt==2) {
if((children[0]->dataPtr()->iSpin())==2&&
(children[1]->dataPtr()->iSpin())==2
) {
_mewgt += (1.0*YFSFormFactors::_alpha/pi)
* log(sqr(_m[0]/_m[1]));
}
}
// OR Use invariant mass of final state children...
if(_betaopt==3) {
if((children[0]->dataPtr()->iSpin())==2&&
(children[1]->dataPtr()->iSpin())==2
) {
_mewgt += (1.0*YFSFormFactors::_alpha/pi)
* log((_qnewprf[0]+_qnewprf[1]).m2()/sqr(_m[1]));
}
}
// calculate the weight depending on the option
double wgt;
int nreal(0);
for(unsigned int ix=0;ix<_multiplicity;++ix){if(!_photcut[ix]){++nreal;}}
if(_mode==0){wgt=_maxwgt;}
else if(_mode==1)
{wgt=_mewgt*_yfswgt*_jacobianwgt*_dipolewgt;}
else if(_mode==2){wgt=_jacobianwgt*_yfswgt*_dipolewgt;}
else if(_mode==3){wgt=_yfswgt*_dipolewgt;}
else {wgt=_yfswgt;}
return wgt;
}
double FFDipole::photon(double beta1,double ombeta1,
double beta2,double ombeta2)
{
// generate the polar angle
double r1,r2,costh,sinth,opbc,ombc;
// relative weights for the two terms
double Pp(log((1+beta2)/ombeta2));
double Pm(log((1+beta1)/ombeta1));
Pp/=(Pp+Pm);
// generate the angle
double wgt=1.;
do
{
r1=UseRandom::rnd();
r2=UseRandom::rnd();
// 1/(1+bc) branch
if(r1<=Pp)
{
opbc = pow(1.+beta2,r2)*pow(ombeta2,1.-r2);
costh = -1./beta2*(1.-opbc);
ombc = 1.-beta1*costh;
sinth = sqrt(opbc*(2.-opbc)-(1.+beta2)*ombeta2*sqr(costh));
}
// 1/(1-bc) branch
else
{
ombc = pow(1.+beta1,1.-r2)*pow(ombeta1,r2);
costh = 1./beta1*(1.-ombc);
opbc = 1.+beta2*costh;
sinth = sqrt(ombc*(2.-ombc)-(1.+beta1)*ombeta1*sqr(costh));
}
// wgt for rejection
if(_dipoleopt==1)
{wgt=1.-0.5/(1.+beta1*beta2)*(+ombeta1*(1.+beta1)*opbc/ombc
+ombeta2*(1.+beta2)*ombc/opbc);}
}
while(UseRandom::rnd()>wgt);
// generate the polar angle randomly in -pi->+pi
double phi(-pi+UseRandom::rnd()*2.*pi);
// generate the ln(energy) uniformly in ln(_emin)->ln(_emax)
Energy en(pow(_emax/_emin,UseRandom::rnd())*_emin);
// calculate the weight (omit the pre and energy factors
// which would cancel later anyway)
if(_dipoleopt==0)
{wgt = 0.5*(1.+beta1*beta2)/opbc/ombc;}
else
{wgt = 0.25*(2.*(1.+beta1*beta2)/opbc/ombc
-ombeta1*(1.+beta1)/sqr(ombc)
-ombeta2*(1.+beta2)/sqr(opbc));}
// store the angles
_cosphot.push_back(costh);
_sinphot.push_back(sinth);
// store the four vector for the photon
_ldrf.push_back(Lorentz5Momentum(en*sinth*cos(phi),
en*sinth*sin(phi),
en*costh,
en,
ZERO));
// add the photon momentum to the total
_bigLdrf+=_ldrf.back();
// return the weight
return wgt;
}
double FFDipole::meWeight(ParticleVector children)
{
double outwgt=1.;
// option which does nothing
if(_betaopt==0){outwgt=1.;}
// collinear approx
else if(_betaopt==1||_betaopt==2||_betaopt==3)
{
// spins of the decay products
unsigned int spin1(children[0]->dataPtr()->iSpin());
unsigned int spin2(children[1]->dataPtr()->iSpin());
// values of beta etc to evaluate the dipole
double beta1(sqrt( (_qnewdrf[0].e()+_m[1])*(_qnewdrf[0].e()-_m[1]))/
_qnewdrf[0].e());
double beta2(sqrt( (_qnewdrf[1].e()+_m[2])*(_qnewdrf[1].e()-_m[2]))/
_qnewdrf[1].e());
double ombeta1(sqr(_m[1]/_qnewdrf[0].e())/(1.+beta1));
double ombeta2(sqr(_m[2]/_qnewdrf[1].e())/(1.+beta2));
// storage of the weights
double twgt,dipole;
double opbc,ombc;
// compute the collinear approx
for(unsigned int i=0;i<_multiplicity;++i)
{
if(!_photcut[i])
{
// compute the angle terms
// if cos is greater than zero use result accurate as cos->1
if(_cosphot[i]>0)
{
opbc=1.+beta2*_cosphot[i];
ombc=ombeta1+beta1*sqr(_sinphot[i])/(1.+_cosphot[i]);
}
// if cos is less than zero use result accurate as cos->-1
else
{
opbc=ombeta2+beta2*sqr(_sinphot[i])/(1.-_cosphot[i]);
ombc=1.-beta1*_cosphot[i];
}
// dipole factor for denominator
dipole = 2.*(1.+beta1*beta2
-0.5*ombeta1*(1.+beta1)*opbc/ombc
-0.5*ombeta2*(1.+beta2)*ombc/opbc);
twgt=0.;
// correction for the first particle
double ratio(_ldrf[i].e()/_qnewdrf[0].e());
if(spin1==1)
{twgt+=0.;}
else if(spin1==2)
{twgt+=opbc*ratio/(1.+(1.+beta1*beta2)/ratio/opbc);}
else
{twgt+= 2.*sqr(opbc*ratio)*
(+1./(1+beta1*beta2+_ldrf[i].e()/_qnewdrf[1].e()*ombc)
+(1.+beta1*beta2)/sqr(1.+beta1*beta2
+_ldrf[i].e()/_qnewdrf[0].e()*opbc));}
// correction for the second particle
ratio =_ldrf[i].e()/_qnewdrf[1].e();
if(spin2==1)
twgt+=0.;
else if(spin2==2)
twgt+=ombc*ratio/(1.+(1.+beta1*beta2)/ratio/ombc);
else {
twgt += 2.*sqr(ombc*ratio)
* (1./(1. + beta1*beta2 + _ldrf[i].e()/_qnewdrf[0].e()*opbc)
+ (1.+beta1*beta2) / sqr(1. + beta1*beta2
+ _ldrf[i].e()/_qnewdrf[1].e()*ombc));
}
twgt/=dipole;
outwgt+=twgt;
}
}
}
return outwgt;
}
bool FFDipole::boostMomenta(Boost boostv)
{
// total energy and momentum of photons
Energy L0(_bigLdrf.e()),modL(_bigLdrf.rho());
// 3-momenta of charged particles
Energy modq(_qdrf[0].rho());
// calculate the energy of the fermion pair
Energy newE12(-L0+sqrt(_m[0]*_m[0]+modL*modL));
// check this is allowed
if(newE12<_m[1]+_m[2]){return false;}
// 3-momentum rescaling factor (NOT energy rescaling).
double kappa(Kinematics::pstarTwoBodyDecay(newE12,_m[1],_m[2])/modq);
// calculate the rescaled momenta
for(unsigned int ix=0;ix<2;++ix)
{
_qnewdrf[ix]=kappa*_qdrf[ix];
_qnewdrf[ix].setMass(_m[ix+1]);
_qnewdrf[ix].rescaleEnergy();
}
// calculate the momentum of the decaying particle in dipole rest frame
Lorentz5Momentum pnew(_bigLdrf.x(),_bigLdrf.y(),
_bigLdrf.z(),_bigLdrf.e(),_m[0]);
pnew.rescaleEnergy();
// Find the momenta of the particles in the rest frame
// of the parent...
// First get the boost from the parent particle
SpinOneLorentzRotation boost(pnew.findBoostToCM());
// Boost the momenta of the charged particles
for(unsigned int ix=0;ix<2;++ix){_qnewprf[ix]=boost*_qnewdrf[ix];}
// Boost the total photon momentum
_bigLprf=boost*_bigLdrf;
// Boost the individual photon momenta
for(unsigned int ix=0;ix<_multiplicity;++ix){_lprf[ix]=boost*_ldrf[ix];}
// Now boost from the parent rest frame to the lab frame
boost.setBoost(boostv);
// Boosting charged particles
for(unsigned int ix=0;ix<2;++ix){_qnewlab[ix]=boost*_qnewprf[ix];}
// Boosting total photon momentum
_bigLlab=boost*_bigLprf;
// Boosting individual photon momenta
for(unsigned int ix=0;ix<_multiplicity;++ix){_llab[ix]=boost*_lprf[ix];}
return true;
}
unsigned int FFDipole::removePhotons()
{
unsigned int nremoved(0);
// apply the cut in the rest frame
if(_energyopt==1)
{
for(unsigned int ix=0;ix<_multiplicity;++ix)
{
if(_lprf[ix].e()<_eminrest)
{
++nremoved;
_photcut[ix]=true;
_bigLdrf-=_ldrf[ix];
_ldrf[ix]=Lorentz5Momentum();
}
}
}
// apply the cut in the lab frame
else if(_energyopt==2)
{
for(unsigned int ix=0;ix<_multiplicity;++ix)
{
if(_llab[ix].e()<_eminlab)
{
++nremoved;
_photcut[ix]=true;
_bigLdrf-=_ldrf[ix];
_ldrf[ix]=Lorentz5Momentum();
}
}
}
// correction factor for dipoles if needed
if(_dipoleopt==0&&nremoved!=0)
{
// calculate the velocities of the charged particles (crude/overvalued)
double beta1(sqrt((_qdrf[0].e()+_m[1])*(_qdrf[0].e()-_m[1]))/_qdrf[0].e());
double beta2(sqrt((_qdrf[1].e()+_m[2])*(_qdrf[1].e()-_m[2]))/_qdrf[1].e());
// calculate 1-beta to avoid numerical problems
double ombeta1(sqr(_m[1]/_qdrf[0].e())/(1.+beta1));
double ombeta2(sqr(_m[2]/_qdrf[1].e())/(1.+beta2));
// calculate the weights
for(unsigned int ix=0;ix<_multiplicity;++ix)
{if(_photcut[ix])
{_dipolewgt*=exactDipoleWeight(beta1,ombeta1,beta2,ombeta2,
ix)/_photonwgt[ix];}}
}
// return number of remove photons
return nremoved;
}
diff --git a/Decay/Radiation/FFDipole.h b/Decay/Radiation/FFDipole.h
--- a/Decay/Radiation/FFDipole.h
+++ b/Decay/Radiation/FFDipole.h
@@ -1,429 +1,432 @@
// -*- C++ -*-
//
// FFDipole.h is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2007 The Herwig Collaboration
//
// Herwig++ is licenced under version 2 of the GPL, see COPYING for details.
// Please respect the MCnet academic guidelines, see GUIDELINES for details.
//
#ifndef HERWIG_FFDipole_H
#define HERWIG_FFDipole_H
//
// This is the declaration of the FFDipole class.
//
#include "ThePEG/Repository/EventGenerator.h"
#include "Herwig++/Utilities/Kinematics.h"
#include "Herwig++/Utilities/Maths.h"
#include "ThePEG/StandardModel/StandardModelBase.h"
#include "ThePEG/Vectors/Lorentz5Vector.h"
#include "ThePEG/Interface/Interfaced.h"
#include "FFDipole.fh"
namespace Herwig {
using namespace ThePEG;
using ThePEG::Constants::pi;
/** \ingroup Decay
*
* The FFDipole class generates radiation from a final-final dipole for
- * the generation of photons in decay by the YODA algorithm.
+ * the generation of photons in decay by the SOPTHY algorithm.
*
- * @see YODA
+ * @see SOPTHY
+ * @see \ref FFDipoleInterfaces "The interfaces"
+ * defined for FFDipole.
+
*/
class FFDipole: public Interfaced {
public:
/** @name Standard constructors and destructors. */
//@{
/**
* The default constructor.
*/
FFDipole() :
_emin(1.e-6*MeV), _eminrest(100*MeV), _eminlab(100*MeV), _emax(),
_multiplicity(), _nphotonmax(20), _m(3), _charge(), _qdrf(2),
_qnewdrf(2), _qprf(2), _qnewprf(2), _qlab(2), _qnewlab(2), _dipolewgt(),
_yfswgt(), _jacobianwgt(), _mewgt(), _maxwgt(5.0), _mode(1), _maxtry(500),
_energyopt(1), _betaopt(1), _dipoleopt(){}
//@}
public:
/**
* Member to generate the photons from the dipole
* @param p The decaying particle
* @param children The decay products
* @return The decay products with additional radiation
*/
virtual ParticleVector generatePhotons(const Particle & p,
ParticleVector children);
public:
/** @name Functions used by the persistent I/O system. */
//@{
/**
* Function used to write out object persistently.
* @param os the persistent output stream written to.
*/
void persistentOutput(PersistentOStream & os) const;
/**
* Function used to read in object persistently.
* @param is the persistent input stream read from.
* @param version the version number of the object when written.
*/
void persistentInput(PersistentIStream & is, int version);
//@}
/**
* The standard Init function used to initialize the interfaces.
* Called exactly once for each class by the class description system
* before the main function starts or
* when this class is dynamically loaded.
*/
static void Init();
protected:
/** @name Clone Methods. */
//@{
/**
* Make a simple clone of this object.
* @return a pointer to the new object.
*/
virtual IBPtr clone() const {return new_ptr(*this);}
/** Make a clone of this object, possibly modifying the cloned object
* to make it sane.
* @return a pointer to the new object.
*/
virtual IBPtr fullclone() const {return new_ptr(*this);}
//@}
protected:
/**
* Generate the momentum of a photon
* @param beta1 The velocity, \f$\beta_1\f$, of the first charged particle
* @param ombeta1 One minus the velocity, \f$1-\beta_1\f$, of the first
* charged particle which is supplied for numerical stability
* @param beta2 The velocity, \f$\beta_2\f$, of the second charged particle
* @param ombeta2 One minus the velocity, \f$1-\beta_2\f$, of the
* second charged particle which is supplied for numerical stability
* @return The contribution to the dipole weight
*/
double photon(double beta1,double ombeta1, double beta2, double ombeta2);
/**
* Calculate the exact weight for the dipole.
* @param beta1 Velocity of the first charged particle, \f$\beta_1\f$
* @param beta2 Velocity of the second charged particle, \f$\beta_2\f$.
* @param ombeta1 One minus the velocity of the first particle, \f$1-\beta_1\f$
* @param ombeta2 One minus the velocity of the second particle, \f$1-\beta_2\f$
* @param iphot The number of the photon for which the weight is required
* @return The weight
*/
double exactDipoleWeight(double beta1,double ombeta1,
double beta2,double ombeta2,unsigned int iphot) {
double opbc,ombc;
// if cos is greater than zero use result accurate as cos->1
if(_cosphot[iphot]>0) {
opbc=1.+beta2*_cosphot[iphot];
ombc=ombeta1+beta1*sqr(_sinphot[iphot])/(1.+_cosphot[iphot]);
}
// if cos is less than zero use result accurate as cos->-1
else {
opbc=ombeta2+beta2*sqr(_sinphot[iphot])/(1.-_cosphot[iphot]);
ombc=1.-beta1*_cosphot[iphot];
}
return 0.5/(opbc*ombc)*(1.+beta1*beta2
-0.5*ombeta1*(1.+beta1)*opbc/ombc
-0.5*ombeta2*(1.+beta2)*ombc/opbc);
}
/**
* Jacobian factor for the weight
*/
double jacobianWeight() {
Energy pcm1=Kinematics::pstarTwoBodyDecay(_m[0],_m[1],_m[2]);
Energy m12 =sqrt((_qnewdrf[0]+_qnewdrf[1]).m2()) ;
Energy pcm2=Kinematics::pstarTwoBodyDecay(m12,_m[1],_m[2]) ;
double betaprobeta = pcm2*_m[0]/pcm1/m12 ;
double spros = sqr(m12/_m[0]) ;
double deltafn = m12/(m12+_bigLdrf.e());
return betaprobeta*spros*deltafn ;
}
/**
* Matrix element weight
*/
double meWeight(ParticleVector children);
/**
* Member which generates the photons
* @param boost Boost vector to take the particles produced back from
* the decaying particle's rest frame to the lab
* @param children The decay products
*/
double makePhotons(Boost boost,ParticleVector children);
/**
* Boost all the momenta from the dipole rest frame via the parent rest frame
* to the lab
* @param boost The boost vector from the rest frame to the lab
* @return Whether or not it suceeded
*/
bool boostMomenta(Boost boost);
/**
* Remove any photons which fail the energy cuts
* @return Number of photons removed
*/
unsigned int removePhotons();
private:
/**
* The static object used to initialize the description of this class.
* Indicates that this is a concrete class with persistent data.
*/
static ClassDescription<FFDipole> initFFDipole;
/**
* The assignment operator is private and must never be called.
* In fact, it should not even be implemented.
*/
FFDipole & operator=(const FFDipole &);
private:
/**
* The minimum photon energy in the boosted frame
*/
Energy _emin;
/**
* The minimum photon energy in the rest frame
*/
Energy _eminrest;
/**
* The minimum photon energy in the lab frame
*/
Energy _eminlab;
/**
* The maximum photon energy
*/
Energy _emax;
/**
* Photon multiplicity being generated
*/
unsigned int _multiplicity;
/**
* Maximum number of photons to generate
*/
unsigned int _nphotonmax;
/**
* Masses of the particles involved
*/
vector<Energy> _m;
/**
* Produce of the particles charges
*/
double _charge;
/**
* Momenta of the particles in the dipole rest frame
*/
//@{
/**
* Momenta of the charged particles in the dipole rest frame before radiation
*/
vector<Lorentz5Momentum> _qdrf;
/** * Momenta of the charged particles in the dipole rest frame after radiation
*/
vector<Lorentz5Momentum> _qnewdrf;
/**
* Momenta of the photons in the dipole rest frame
*/
vector<Lorentz5Momentum> _ldrf;
/**
* Total momentum of the photons in the dipole rest frame
*/
Lorentz5Momentum _bigLdrf;
//@}
/**
* Momentum of the particles in the parent's rest frame
*/
//@{
/**
* Momenta of the charged particles in the parent's rest frame before radiation
*/
vector<Lorentz5Momentum> _qprf;
/**
* Momenta of the charged particles in the parent's rest frame after radiation
*/
vector<Lorentz5Momentum> _qnewprf;
/**
* Momenta of the photons in the parent rest frame
*/
vector<Lorentz5Momentum> _lprf;
/**
* Total momentum of the photons in the parent rest frame
*/
Lorentz5Momentum _bigLprf;
//@}
/**
* Momentum of the particles in the lab frame
*/
//@{
/**
* Momenta of the charged particles in the lab frame before radiation
*/
vector<Lorentz5Momentum> _qlab;
/**
* Momenta of the charged particles in the lab frame after radiation
*/
vector<Lorentz5Momentum> _qnewlab;
/**
* Momenta of the photons in the lab frame
*/
vector<Lorentz5Momentum> _llab;
/**
* Total momentum of the photons in the lab frame
*/
Lorentz5Momentum _bigLlab;
//@}
/**
* Reweighting factors due to differences between the true and crude
* distributions
*/
//@{
/**
* Reweighting factor for the real emission
*/
double _dipolewgt;
/**
* Reweighting factor for the YFS form-factor
*/
double _yfswgt;
/**
* Reweighting factor due to phase space
*/
double _jacobianwgt;
/**
* Reweighting factor due to matrix element corrections
*/
double _mewgt;
/**
* Maximum weight
*/
double _maxwgt;
//@}
/**
* Angles of the photons with respect to the first charged particle
* which are stored for numerical accuracy
*/
//@{
/**
* Cosine of the photon angles
*/
vector<double> _cosphot;
/**
* Sine of the photon angles
*/
vector<double> _sinphot;
//@}
/**
* Weights for the individual photons
*/
vector<double> _photonwgt;
/**
* Whether a given photon passes the energy cut
*/
vector<bool> _photcut;
/**
* Type of unweighting to perform
*/
unsigned int _mode;
/**
* Maximum number of attempts to generate a result
*/
unsigned int _maxtry;
/**
* Option for the energy cut-off
*/
unsigned int _energyopt;
/**
* Option for the inclusion of higher order corrections
*/
unsigned int _betaopt;
/**
* Option for the form of the primary distribution
*/
unsigned int _dipoleopt;
};
}
#include "ThePEG/Utilities/ClassTraits.h"
namespace ThePEG {
/** @cond TRAITSPECIALIZATIONS */
/** This template specialization informs ThePEG about the
* base classes of FFDipole. */
template <>
struct BaseClassTrait<Herwig::FFDipole,1> {
/** Typedef of the first base class of FFDipole. */
typedef Interfaced NthBase;
};
/** This template specialization informs ThePEG about the name of
* the FFDipole class and the shared object where it is defined. */
template <>
struct ClassTraits<Herwig::FFDipole>
: public ClassTraitsBase<Herwig::FFDipole> {
/** Return a platform-independent class name */
static string className() { return "Herwig::FFDipole"; }
};
/** @endcond */
}
#endif /* HERWIG_FFDipole_H */
diff --git a/Decay/Radiation/IFDipole.cc b/Decay/Radiation/IFDipole.cc
--- a/Decay/Radiation/IFDipole.cc
+++ b/Decay/Radiation/IFDipole.cc
@@ -1,694 +1,694 @@
// -*- C++ -*-
//
// IFDipole.cc is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2007 The Herwig Collaboration
//
// Herwig++ is licenced under version 2 of the GPL, see COPYING for details.
// Please respect the MCnet academic guidelines, see GUIDELINES for details.
//
//
// This is the implementation of the non-inlined, non-templated member
// functions of the IFDipole class.
//
#include "IFDipole.h"
#include "ThePEG/PDT/EnumParticles.h"
#include "ThePEG/EventRecord/Particle.h"
#include "ThePEG/Interface/Parameter.h"
#include "ThePEG/Interface/Switch.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
#include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
using namespace ThePEG::Helicity;
using namespace Herwig;
void IFDipole::persistentOutput(PersistentOStream & os) const {
os << _alpha << ounit(_emin,GeV) << _nphotonmax << _maxwgt
<< _mode << _maxtry << _energyopt << _betaopt;
}
void IFDipole::persistentInput(PersistentIStream & is, int) {
is >> _alpha >> iunit(_emin,GeV) >> _nphotonmax >> _maxwgt
>> _mode >> _maxtry >> _energyopt >> _betaopt;
}
ClassDescription<IFDipole> IFDipole::initIFDipole;
// Definition of the static class description member.
void IFDipole::Init() {
static ClassDocumentation<IFDipole> documentation
- ("The IFDipole class implements the initial-final dipole for the YODA algorithm");
+ ("The IFDipole class implements the initial-final dipole for the SOPTHY algorithm");
static Switch<IFDipole,unsigned int> interfaceUnWeight
("UnWeight",
"Control the type of unweighting to perform, only one should be used the"
" other options are for debugging purposes.",
&IFDipole::_mode, 1, false, false);
static SwitchOption interfaceUnWeightNoUnweighting
(interfaceUnWeight,
"NoUnweighting",
"Perform no unweighting",
0);
static SwitchOption interfaceUnWeightAllWeights
(interfaceUnWeight,
"AllWeights",
"Include all the weights",
1);
static SwitchOption interfaceUnWeightNoJacobian
(interfaceUnWeight,
"NoJacobian",
"Only include the dipole and YFS weights",
2);
static SwitchOption interfaceUnWeightDipole
(interfaceUnWeight,
"Dipole",
"Only include the dipole weight",
3);
static SwitchOption interfaceUnWeightYFS
(interfaceUnWeight,
"YFS",
"Only include the YFS weight",
4);
static Parameter<IFDipole,unsigned int> interfaceMaximumTries
("MaximumTries",
"Maximum number of attempts to unweight",
&IFDipole::_maxtry, 500, 10, 100000,
false, false, Interface::limited);
static Parameter<IFDipole,Energy> interfaceMinimumEnergyRest
("MinimumEnergyRest",
"The minimum energy of the photons in the rest frame of the decaying particle",
&IFDipole::_emin, MeV, 1.*MeV, ZERO, 10000.0*MeV,
false, false, Interface::limited);
static Parameter<IFDipole,unsigned int> interfaceMaximumNumberOfPhotons
("MaximumNumberOfPhotons",
"The maximum number of photons to produce",
&IFDipole::_nphotonmax, 20, 1, 1000,
false, false, Interface::limited);
static Parameter<IFDipole,double> interfaceMaximumWeight
("MaximumWeight",
"The maximum weight for unweighting",
&IFDipole::_maxwgt, 2.0, 0.0, 100.0,
false, false, Interface::limited);
static Switch<IFDipole,unsigned int> interfaceEnergyCutOff
("EnergyCutOff",
"The type of cut-off on the photon energy to apply",
&IFDipole::_energyopt, 1, false, false);
static SwitchOption interfaceEnergyCutOffRestFrame
(interfaceEnergyCutOff,
"RestFrame",
"Apply cut-off in rest frame",
1);
static SwitchOption interfaceEnergyCutOff2
(interfaceEnergyCutOff,
"LabFrame",
"Apply cut-off in lab frame",
2);
static Switch<IFDipole,unsigned int> interfaceBetaOption
("BetaOption",
"Option for the inclusive of the higher beta coefficients",
&IFDipole::_betaopt, 1, false, false);
static SwitchOption interfaceBetaOptionNone
(interfaceBetaOption,
"None",
"No higher betas included",
0);
static SwitchOption interfaceBetaOptionCollinear
(interfaceBetaOption,
"Collinear",
"Include the collinear approx",
1);
static SwitchOption interfaceBetaOptionCollinearVirtA
(interfaceBetaOption,
"CollinearVirtualA",
"Include the collinear approx with virtual corrections",
2);
static SwitchOption interfaceBetaOptionCollinearVirtB
(interfaceBetaOption,
"CollinearVirtualB",
"Include the collinear approx with virtual corrections",
3);
static SwitchOption interfaceBetaOptionExact
(interfaceBetaOption,
"Exact",
"Include the exact higher order terms if available",
4);
}
ParticleVector IFDipole::generatePhotons(const Particle & p,ParticleVector children) {
// set parameters which won't change in the event loop
// masses of the particles
_m[0] = p.mass();
_m[1] = children[0]->mass();
_m[2] = children[1]->mass();
// momenta before radiation in lab
for(unsigned int ix=0;ix<2;++ix){_qlab[ix]=children[ix]->momentum();}
// get the charges of the particles in units of the positron charge
// chrg1 is the charge of the parent and chrg2 is the charge of the
// charged child. Also we create a map between the arguments of
// _q???[X] _m[X] etc so that
// _q???[_map[0]] and _m[_map[0]] are the momenta and masses of
// the charged child while
// _q???[_map[1]] and _m[_map[1]] are the momenta and masses of
// the neutral child.
_chrg1 = p.dataPtr()->iCharge()/3.0;
if(children[1]->dataPtr()->iCharge()/3.0==0.0)
{ _chrg2 = children[0]->dataPtr()->iCharge()/3.0;
_map[0] = 0; _map[1] = 1; }
else if(children[0]->dataPtr()->iCharge()/3.0==0.0)
{ _chrg2 = children[1]->dataPtr()->iCharge()/3.0;
_map[0] = 1; _map[1] = 0; }
// boost the momenta to the rest frame
Boost boostv(p.momentum().boostVector());
// boost the particles to the parent rest frame
// and set the initial momenta of the charged particles
// in the dipole rest frame: currently this is the same
// as the boson rest frame...
for(unsigned int ix=0;ix<2;++ix) {
// KMH - 08/11/05 - This used to be boostv instead of -boostv
// -boostv is the boost from the lab to the parent rest frame
// whereas boostv goes the other way!!!
children[ix]->deepBoost(-boostv);
_qprf[ix]=children[ix]->momentum();
}
// perform the unweighting
double wgt;
unsigned int ntry(0);
do {
wgt =makePhotons(boostv,children);
++ntry;
// Record warnings about large and weird weights in the .log file.
if(wgt>_maxwgt||wgt<0.0||isnan(wgt)==1) {
generator()->log() << "IFDipole.cc: " << endl;
if(wgt>_maxwgt) {
generator()->log() << "Weight exceeds maximum for decay!"
<< endl;
}
if(wgt<0.0) {
generator()->log() << "Weight is negative! "
<< endl;
}
if(isnan(wgt)==1) {
generator()->log() << "Weight is NAN! "
<< endl;
}
generator()->log() << p.PDGName() << " "
<< children[0]->PDGName() << " "
<< children[1]->PDGName()
<< endl
<< " Current Maximum = " << _maxwgt
<< endl
<< " Current Weight = " << wgt
<< endl;
generator()->log() << "Photon Multiplicity : "
<< _multiplicity << endl
<< "Original Parent rest frame momenta: " << endl
<< "charged child: " << ounit(_qprf[_map[0]],GeV) << endl
<< "neutral child: " << ounit(_qprf[_map[1]],GeV) << endl
<< "Parent rest frame momenta: " << endl
<< "charged child: " << ounit(_qnewprf[_map[0]],GeV)<< endl
<< "neutral child: " << ounit(_qnewprf[_map[1]],GeV)<< endl
<< "photons : " << ounit(_bigLprf,GeV) << endl
<< "Weights : " << endl
<< "_dipolewgt : " << _dipolewgt << endl
<< "_yfswgt : " << _yfswgt << endl
<< "_jacobianwgt : " << _jacobianwgt << endl
<< "_mewgt : " << _mewgt << endl;
for(unsigned int ct=0;ct<_multiplicity;ct++) {
generator()->log() << "_cosphot[" << ct << "]: " << _cosphot[ct] << endl;
generator()->log() << "_sinphot[" << ct << "]: " << _sinphot[ct] << endl;
}
if(wgt>_maxwgt) {
if(wgt<15.0) {
generator()->log() << "Resetting maximum weight"
<< endl << " New Maximum = " << wgt << endl;
_maxwgt=wgt;
} else {
generator()->log() << "Maximum weight set to limit (15)" << endl;
_maxwgt=15.0;
}
}
}
} while (wgt<(_maxwgt*UseRandom::rnd()) && ntry<_maxtry);
if(ntry>=_maxtry) {
generator()->log() << "IFDipole Failed to generate QED radiation for the decay "
<< p.PDGName() << " -> "
<< children[0]->PDGName() << " "
<< children[1]->PDGName() << endl;
return children;
}
// produce products after radiation if needed
if(_multiplicity>0) {
// change the momenta of the children, they are currently
// in parent rest frame
for(unsigned int ix=0;ix<2;++ix) {
LorentzRotation boost(solveBoost(_qnewprf[ix],children[ix]->momentum()));
children[ix]->deepTransform(boost);
// boost back to the lab
// KMH - 08/11/05 - This used to be -boostv instead of boostv
// -boostv is the boost from the lab to the parent rest frame
// whereas boostv goes the other way!!!
children[ix]->deepBoost(boostv);
}
// add the photons to the event record
tcPDPtr photon=getParticleData(ParticleID::gamma);
for(unsigned int ix=0;ix<_multiplicity;++ix) {
PPtr newphoton=new_ptr(Particle(photon));
newphoton->set5Momentum(_llab[ix]);
children.push_back(newphoton);
}
return children;
}
// otherwise just return the orginial particles
// boosted back to lab
else {
for(unsigned int ix=0;ix<children.size();++ix)
children[ix]->deepBoost(boostv);
return children;
}
}
// member which generates the photons
double IFDipole::makePhotons(Boost boostv,ParticleVector children) {
// set the initial parameters
// number of photons (zero)
_multiplicity=0;
// zero size of photon vectors
_lprf.clear();
_llab.clear();
// zero size of angle storage
_sinphot.clear();
_cosphot.clear();
// zero total momenta of the photons
_bigLprf=Lorentz5Momentum();
// set the initial values of the reweighting factors to one
_dipolewgt = 1.0;
_yfswgt = 1.0;
_jacobianwgt = 1.0;
_mewgt = 1.0;
// set the maximum photon energy (exact - no approximations here).
double boost_factor = 1.0;
_emax=(0.5*(_m[0]-sqr(_m[1]+_m[2])/_m[0]))*boost_factor;
// calculate the velocities of the children (crude/overvalued)
double beta1(sqrt( (_qprf[_map[0]].e()+_m[_map[0]+1])
*(_qprf[_map[0]].e()-_m[_map[0]+1])
)
/_qprf[_map[0]].e());
double beta2(sqrt( (_qprf[_map[1]].e()+_m[_map[1]+1])
*(_qprf[_map[1]].e()-_m[_map[1]+1])
)
/_qprf[_map[1]].e());
// calculate 1-beta to avoid numerical problems
double ombeta1(sqr(_m[_map[0]+1]/_qprf[_map[0]].e())/(1.+beta1));
double ombeta2(sqr(_m[_map[1]+1]/_qprf[_map[1]].e())/(1.+beta2));
// calculate the average photon multiplicity
double aver(nbar(beta1,ombeta1));
// calculate the number of photons using the poisson
_multiplicity = UseRandom::rndPoisson(aver);
// calculate the first part of the YFS factor
_yfswgt/=crudeYFSFormFactor(beta1,ombeta1);
// generate the photon momenta with respect to q1
// keeping track of the weight
double dipoles(1.);
for(unsigned int ix=0;ix<_multiplicity;++ix)
{ dipoles *= photon(beta1,ombeta1); }
// calculate contributions to the dipole weights so far
_dipolewgt /=dipoles;
// now do the momentum reshuffling
Lorentz5Momentum pmom(ZERO,ZERO,ZERO,_m[0],_m[0]);
if(_multiplicity>0)
{
// total energy and momentum of photons
Energy L0(_bigLprf.e()),modL(_bigLprf.rho());
// squared invariant mass of final state fermions...
Energy2 m122 = sqr(_m[0]-L0)-sqr(modL);
// 3-momenta of charged particles
Energy modq(_qprf[_map[0]].rho());
// total photon momentum perpendicular to charged child...
Energy LT(sqrt((modL-_bigLprf.z())*(modL+_bigLprf.z())));
// kallen function...
Energy4 kallen = ( m122 - (_m[1]+_m[2])*(_m[1]+_m[2]) )
* ( m122 - (_m[1]-_m[2])*(_m[1]-_m[2]) );
// discriminant of rho...
double disc = (_m[0]-L0)
* sqrt(kallen-4.*sqr(_m[_map[0]+1]*LT))
/ (2.*modq*(m122+LT*LT));
// calculate the energy rescaling factor
double rho = disc-_bigLprf.z()
* (m122+sqr(_m[_map[0]+1])-sqr(_m[_map[1]+1]))
/ (2.*modq*(m122+LT*LT));
// calculate the rescaled charged child momentum
_qnewprf[_map[0]]=rho*_qprf[_map[0]];
_qnewprf[_map[0]].setMass(_m[_map[0]+1]);
_qnewprf[_map[0]].rescaleEnergy();
// rotate the photons so in parent rest frame rather
// than angle measured w.r.t q1 first work out the rotation
SpinOneLorentzRotation rotation;
rotation.setRotateZ(-_qprf[_map[0]].phi());
rotation.rotateY(_qprf[_map[0]].theta());
rotation.rotateZ(_qprf[_map[0]].phi());
// rotate the total
_bigLprf*=rotation;
// rotate the photons
for(unsigned int ix=0;ix<_multiplicity;++ix){_lprf[ix]*=rotation;}
// calculate the rescaled neutral child momentum
_qnewprf[_map[1]]=pmom-_qnewprf[_map[0]]-_bigLprf;
_qnewprf[_map[1]].setMass(_m[_map[1]+1]);
_qnewprf[_map[1]].rescaleEnergy();
// calculate the new dipole weight
// Note this (weight) is Lorentz invariant
// calculate velocities and 1-velocites
beta1=sqrt( (_qnewprf[_map[0]].e()+_m[_map[0]+1])
*(_qnewprf[_map[0]].e()-_m[_map[0]+1]))
/_qnewprf[_map[0]].e();
beta2=sqrt( (_qnewprf[_map[1]].e()+_m[_map[1]+1])
*(_qnewprf[_map[1]].e()-_m[_map[1]+1]))
/_qnewprf[_map[1]].e();
ombeta1=sqr(_m[_map[0]+1]/_qnewprf[_map[0]].e())/(1.+beta1);
ombeta2=sqr(_m[_map[1]+1]/_qnewprf[_map[1]].e())/(1.+beta2);
for(unsigned int ix=0;ix<_multiplicity;++ix)
{_dipolewgt*=exactDipoleWeight(beta1,ombeta1,ix);}
// calculate the second part of the yfs form factor
_yfswgt*=exactYFSFormFactor(beta1,ombeta1,beta2,ombeta2);
// Now boost from the parent rest frame to the lab frame
SpinOneLorentzRotation boost(boostv);
// Boosting charged particles
for(unsigned int ix=0;ix<2;++ix){_qnewlab[ix]=boost*_qnewprf[ix];}
// Boosting total photon momentum
_bigLlab=boost*_bigLprf;
// Boosting individual photon momenta
for(unsigned int ix=0;ix<_multiplicity;++ix)
{_llab.push_back(boost*_lprf[ix]);}
// Calculating jacobian weight
_jacobianwgt = jacobianWeight();
// Calculating beta^1 weight
_mewgt = meWeight(children);
// Apply phase space vetos...
if(kallen<(4.*sqr(_m[_map[0]+1]*LT))||m122<sqr(_m[1]+_m[2])||rho<0.0)
{
// generator()->log() << "Outside Phase Space" << endl;
// generator()->log() << "Photon Multiplicity: "
// << _multiplicity << endl
// << "Original Parent rest frame momenta: " << endl
// << "charged child: " << _qprf[_map[0]] << endl
// << "neutral child: " << _qprf[_map[1]] << endl
// << "rescaling : " << rho << endl
// << "Parent rest frame momenta: " << endl
// << "charged child: " << _qnewprf[_map[0]] << endl
// << "neutral child: " << _qnewprf[_map[1]] << endl
// << "photons : " << _bigLprf << endl
// << endl;
_dipolewgt = 0.0 ;
_yfswgt = 0.0 ;
_jacobianwgt = 0.0 ;
_mewgt = 0.0 ;
}
_qprf[_map[0]].rescaleEnergy();
_qprf[_map[1]].rescaleEnergy();
_qnewprf[_map[0]].rescaleEnergy();
_qnewprf[_map[1]].rescaleEnergy();
if( (((_m[0]-_bigLprf.e()-_qnewprf[0].e()-_qnewprf[1].e())>0.00001*MeV)||
(( _bigLprf.x()+_qnewprf[0].x()+_qnewprf[1].x())>0.00001*MeV)||
(( _bigLprf.y()+_qnewprf[0].y()+_qnewprf[1].y())>0.00001*MeV)||
(( _bigLprf.z()+_qnewprf[0].z()+_qnewprf[1].z())>0.00001*MeV))
&&(_dipolewgt*_jacobianwgt*_yfswgt*_mewgt>0.0)
)
{generator()->log() <<"Warning! Energy Not Conserved! tol = 0.00001 MeV" << endl;
generator()->log() <<"wgt = " << _dipolewgt*_yfswgt*_jacobianwgt*_mewgt << endl;
generator()->log() <<"rho = " << rho << endl;
generator()->log() <<"multiplicity = " << _multiplicity << endl;
generator()->log() <<"_qprf[_map[0]] = " << ounit(_qprf[_map[0]],GeV)<< endl;
generator()->log() <<"_qprf[_map[1]] = " << ounit(_qprf[_map[1]],GeV)<< endl;
generator()->log() <<"_qnewprf[_map[0]] = " << ounit(_qnewprf[_map[0]],GeV)<< endl;
generator()->log() <<"_qnewprf[_map[1]] = " << ounit(_qnewprf[_map[1]],GeV)<< endl;
generator()->log() <<"_bigLprf = " << ounit(_bigLprf,GeV) << endl;
generator()->log() <<"_bigLprf.m2() = " << _bigLprf.m2()/GeV2 << endl;
generator()->log() <<"_total outgoing = " << ounit(_bigLprf+_qnewprf[0]+_qnewprf[1],GeV) << endl;
generator()->log() <<"Rejecting Event. " << endl;
_dipolewgt = 0.0 ;
_yfswgt = 0.0 ;
_jacobianwgt = 0.0 ;
_mewgt = 0.0 ;
}
}
// otherwise copy momenta
else
{ for(unsigned int ix=0;ix<2;++ix) {
_qnewprf[ix]=_qprf[ix];
_qnewlab[ix]=_qlab[ix];
}
_jacobianwgt = 1.0;
// calculate the second part of the yfs form factor
_yfswgt*=exactYFSFormFactor(beta1,ombeta1,beta2,ombeta2);
_dipolewgt = 1.0;
}
// Virtual corrections for beta_0:
// These should be zero for the scalar case as there is no
// collinear singularity going by the dipoles above...
// Use mass of decaying particle...
if(_betaopt==2) {
if((children[_map[0]]->dataPtr()->iSpin())==2) {
_mewgt += (0.5*_alpha/pi)
* log(sqr(_m[0]
/_m[_map[0]+1])
);
}
}
// OR Use invariant mass of final state children...
if(_betaopt==3) {
if((children[_map[0]]->dataPtr()->iSpin())==2) {
_mewgt += (0.5*_alpha/pi)
* log((_qnewprf[0]+_qnewprf[1]).m2()
/sqr(_m[_map[0]+1])
);
}
}
// calculate the weight depending on the option
double wgt;
if(_mode==0){wgt=_maxwgt;}
else if(_mode==1){wgt=_mewgt*_jacobianwgt*_yfswgt*_dipolewgt;}
else if(_mode==2){wgt=_jacobianwgt*_yfswgt*_dipolewgt;}
else if(_mode==3){wgt=_yfswgt*_dipolewgt;}
else {wgt=_yfswgt;}
return wgt;
}
double IFDipole::photon(double beta1,double ombeta1)
{
// generate the azimuthal angle randomly in -pi->+pi
double phi(-pi+UseRandom::rnd()*2.*pi);
// generate the polar angle
double r(UseRandom::rnd());
double costh,sinth,ombc;
ombc = pow(1.+beta1,1.-r)*pow(ombeta1,r);
costh = 1./beta1*(1.-ombc);
sinth = sqrt(ombc*(2.-ombc)-(1.+beta1)*ombeta1*sqr(costh));
// generate the ln(energy) uniformly in ln(_emin)->ln(_emax)
Energy energy = pow(_emax/_emin,UseRandom::rnd())*_emin;
// calculate the weight (omit the pre and energy factors
// which would cancel later anyway)
double wgt = 2./ombc;
// store the angles
_cosphot.push_back(costh);
_sinphot.push_back(sinth);
// store the four vector for the photon
_lprf.push_back(Lorentz5Momentum(energy*sinth*cos(phi),energy*sinth*sin(phi),
energy*costh,energy,ZERO));
// add the photon momentum to the total
_bigLprf+=_lprf.back();
// return the weight
return wgt;
}
double IFDipole::meWeight(ParticleVector children)
{
unsigned int spin = children[_map[0]]->dataPtr()->iSpin();
Energy2 pik ;
Energy2 pjk ;
Energy2 pipj ;
Energy magpi ;
double mewgt = 1.0;
double beta1=sqrt( (_qnewprf[_map[0]].e()+_m[_map[0]+1])
*(_qnewprf[_map[0]].e()-_m[_map[0]+1]))
/_qnewprf[_map[0]].e();
double ombeta1=sqr(_m[_map[0]+1]/_qnewprf[_map[0]].e())/(1.+beta1);
double opbc ;
double ombc ;
InvEnergy2 dipole;
// option which does nothing
if(_betaopt==0){mewgt=1.;}
// collinear approx
else if(_betaopt==1||_betaopt==2||_betaopt==3)
{
for(unsigned int i=0;i<_multiplicity;++i) {
if(_cosphot[i]<0.0)
{ opbc=ombeta1+beta1*sqr(_sinphot[i])/(1.-_cosphot[i]); }
// if cos is greater than zero use result accurate as cos->-1
else
{ opbc=1.+beta1*_cosphot[i]; }
// if cos is greater than zero use result accurate as cos->1
if(_cosphot[i]>0.0)
{ ombc=ombeta1+beta1*sqr(_sinphot[i])/(1.+_cosphot[i]); }
// if cos is less than zero use result accurate as cos->-1
else
{ ombc=1.-beta1*_cosphot[i]; }
if(((_qnewprf[_map[0]].z()>ZERO)&&(_qprf[_map[0]].z()<ZERO))||
((_qnewprf[_map[0]].z()<ZERO)&&(_qprf[_map[0]].z()>ZERO))) {
pik = _qnewprf[_map[0]].e()*_lprf[i].e()*opbc;
dipole = sqr(beta1*_sinphot[i]/(opbc*_lprf[i].e()));
} else {
pik = _qnewprf[_map[0]].e()*_lprf[i].e()*ombc;
dipole = sqr(beta1*_sinphot[i]/(ombc*_lprf[i].e()));
}
// here "dipole" is the exact dipole function divided by alpha/4pi^2.
pjk = _m[0]*_lprf[i].e() ;
pipj = _m[0]*_qnewprf[_map[0]].e() ;
magpi= sqrt( sqr(_qnewprf[_map[0]].x())
+ sqr(_qnewprf[_map[0]].y())
+ sqr(_qnewprf[_map[0]].z())
);
pik = _qnewprf[_map[0]].e()*_lprf[i].e()
- _qnewprf[_map[0]].x()*_lprf[i].x()
- _qnewprf[_map[0]].y()*_lprf[i].y()
- _qnewprf[_map[0]].z()*_lprf[i].z();
if(spin==2) {
mewgt += sqr(_lprf[i].e())*_qnewprf[_map[0]].e()*ombc
/ (sqr(magpi*_sinphot[i])*(_qnewprf[_map[0]].e()+_lprf[i].e()));
}
else if(spin==3) {
mewgt += (2.*pjk*pipj/(pik*sqr(pipj+pjk))
+2.*pjk/(pik*(pipj+pik))
)/dipole;
}
else {
mewgt = 1.0;
}
}
}
return mewgt;
}
double IFDipole::exactYFSFormFactor(double beta1,double ombeta1,
double beta2,double ombeta2) {
double Y = 0.0 ;
double b = beta1 ;
double omb = ombeta1;
double c = beta2 ;
double omc = ombeta2;
double arg1 = -omc/(2.*c);
double arg2 = -omb*omc/(2.*(b+c));
double arg3 = 2.*b/(1.+b);
if(_m[_map[1]+1]!=ZERO) {
Y = _chrg1*_chrg2*(_alpha/(2.*pi))*(
log(_m[0]*_m[_map[1]+1]/sqr(2.*_emin))
+log(_m[_map[0]+1]*_m[_map[1]+1]/sqr(2.*_emin))
-(1./b )*log((1.+b)/omb)*log(sqr(_m[_map[1]+1]/(2.*_emin)))
-(1./b )*log(omb/(1.+b))
-(0.5/b )*sqr(log(omb/(1.+b)))
+((b+c )/(b*omc))*log((b+c )/(b*omc))
-((c+b*c)/(b*omc))*log((c+b*c)/(b*omc))
+((b+c )/(b+b*c))*log((b+c )/(b+b*c))
-((c*omb)/(b+b*c))*log((c*omb)/(b+b*c))
+(0.5/b)*( sqr(log( (b+c)/(b*omc)))-sqr(log((c+b*c)/(b*omc)))
+ sqr(log((c*omb)/(b+b*c)))-sqr(log((b+ c)/(b+b*c)))
)
+(2./b )*( real(Math::Li2(arg1))
- real(Math::Li2(arg2))
- real(Math::Li2(arg3))
)
+(1./b )*log((b+c)/(b+b*c))*log((1.+c)/(2.*c))
-(1./b )*log((c*omb)/(b*(1.+c)))*log((1.+b)*(1.+c)/(2.*(b+c)))
-(1./b )*log((2.*c/b)*((b+c)/(omc*(1.+c))))*log((b+c)/(c*omb))
);
}
else if(_m[_map[1]+1]==ZERO) {
Y = _chrg1*_chrg2*(_alpha/(2.*pi))*(
log(sqr(_m[0]/(2.*_emin)))
+log(sqr(_m[_map[0]+1]/(2.*_emin)))
-(1./b )*log((1.+b)/omb)
*log((sqr(_m[0])-sqr(_m[_map[0]+1]))/sqr(2.*_emin))
-0.5*log(omb*(1.+b)/sqr(2.*b))
+((1.+b)/(2.*b))*log((1.+b)/(2.*b))
-( omb/(2.*b))*log( omb/(2.*b))
-(1./b )*log((1.-b)/(1.+b))
+1.
+(0.5/b)*sqr(log( omb/(2.*b)))
-(0.5/b)*sqr(log((1.+b)/(2.*b)))
-(0.5/b)*sqr(log((1.-b)/(1.+b)))
-(2. /b)*real(Math::Li2(arg3))
);
}
return exp(Y);
}
double IFDipole::jacobianWeight() {
// calculate the velocities of the children (crude/overvalued)
Energy mag1old = sqrt( (_qprf[_map[0]].e() +_m[_map[0]+1])
*(_qprf[_map[0]].e() -_m[_map[0]+1])
);
Energy mag1new = sqrt( (_qnewprf[_map[0]].e()+_m[_map[0]+1])
*(_qnewprf[_map[0]].e()-_m[_map[0]+1])
);
Energy magL = sqrt( sqr(_bigLprf.x())
+ sqr(_bigLprf.y())
+ sqr(_bigLprf.z())
);
// 14/12/05 - KMH - This was another mistake. This is supposed to be
// the angel between _qnewprf[_map[0]] and _bigLprf instead of
// between _qnewprf[0] and _bigLprf. Stupid. Hopefully this weight
// is correct now.
// double cos1L = (_qnewprf[0].x()*_bigLprf.x()
// +_qnewprf[0].y()*_bigLprf.y()
// +_qnewprf[0].z()*_bigLprf.z()
// )
// /(mag1new*magL);
double cos1L = (_qnewprf[_map[0]].x()*_bigLprf.x()
+_qnewprf[_map[0]].y()*_bigLprf.y()
+_qnewprf[_map[0]].z()*_bigLprf.z()
)
/(mag1new*magL);
return abs( (_m[0]*sqr(mag1new)/mag1old)
/ ( mag1new*(_m[0]-_bigLprf.e())
+_qnewprf[_map[0]].e()*magL*cos1L
)
);
}
LorentzRotation IFDipole::solveBoost(const Lorentz5Momentum & q,
const Lorentz5Momentum & p ) const {
Energy modp = p.vect().mag();
Energy modq = q.vect().mag();
double betam = (p.e()*modp-q.e()*modq)/(sqr(modq)+sqr(modp)+p.mass2());
Boost beta = -betam*q.vect().unit();
Vector3<Energy2> ax = p.vect().cross( q.vect() );
double delta = p.vect().angle( q.vect() );
LorentzRotation R;
using Constants::pi;
if ( ax.mag2()/GeV2/MeV2 > 1e-16 ) {
R.rotate( delta, unitVector(ax) ).boost( beta );
}
else {
R.boost( beta );
}
return R;
}
void IFDipole::doinit() {
Interfaced::doinit();
// get the value fo alpha from the Standard Model object
_alpha=generator()->standardModel()->alphaEM();
}
diff --git a/Decay/Radiation/IFDipole.h b/Decay/Radiation/IFDipole.h
--- a/Decay/Radiation/IFDipole.h
+++ b/Decay/Radiation/IFDipole.h
@@ -1,421 +1,423 @@
// -*- C++ -*-
//
// IFDipole.h is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2007 The Herwig Collaboration
//
// Herwig++ is licenced under version 2 of the GPL, see COPYING for details.
// Please respect the MCnet academic guidelines, see GUIDELINES for details.
//
#ifndef HERWIG_IFDipole_H
#define HERWIG_IFDipole_H
//
// This is the declaration of the IFDipole class.
//
#include "ThePEG/Repository/EventGenerator.h"
#include "Herwig++/Utilities/Kinematics.h"
#include "Herwig++/Utilities/Maths.h"
#include "ThePEG/StandardModel/StandardModelBase.h"
#include "ThePEG/Vectors/Lorentz5Vector.h"
#include "ThePEG/Interface/Interfaced.h"
#include "IFDipole.fh"
namespace Herwig {
using namespace ThePEG;
using ThePEG::Constants::pi;
/** \ingroup Decay
*
* The IFDipole class generates radiation from a final-final dipole for
- * the generation of photons in decay by the YODA algorithm.
+ * the generation of photons in decay by the SOPTHY algorithm.
*
- * @see YODA
+ * @see SOPTHY
+ * @see \ref IFDipoleInterfaces "The interfaces"
+ * defined for IFDipole.
*/
class IFDipole: public Interfaced {
public:
/** @name Standard constructors and destructors. */
//@{
/**
* The default constructor.
*/
IFDipole() :
_alpha(), _emin(1.0*MeV), _emax(), _multiplicity(), _nphotonmax(20),
_map(2,0), _m(3), _chrg1(), _chrg2(), _qprf(2), _qnewprf(2),
_lprf(), _bigLprf(), _qlab(2), _qnewlab(2), _llab(), _bigLlab(),
_dipolewgt(), _yfswgt(), _jacobianwgt(), _mewgt(), _maxwgt(2.0),
_mode(1), _maxtry(500), _energyopt(1), _betaopt(1), _dipoleopt()
{}
//@}
public:
/**
* Member to generate the photons from the dipole
* @param p The decaying particle
* @param children The decay products
* @return The decay products with additional radiation
*/
virtual ParticleVector generatePhotons(const Particle & p,ParticleVector children);
public:
/** @name Functions used by the persistent I/O system. */
//@{
/**
* Function used to write out object persistently.
* @param os the persistent output stream written to.
*/
void persistentOutput(PersistentOStream & os) const;
/**
* Function used to read in object persistently.
* @param is the persistent input stream read from.
* @param version the version number of the object when written.
*/
void persistentInput(PersistentIStream & is, int version);
//@}
/**
* The standard Init function used to initialize the interfaces.
* Called exactly once for each class by the class description system
* before the main function starts or
* when this class is dynamically loaded.
*/
static void Init();
protected:
/** @name Clone Methods. */
//@{
/**
* Make a simple clone of this object.
* @return a pointer to the new object.
*/
virtual IBPtr clone() const {return new_ptr(*this);}
/** Make a clone of this object, possibly modifying the cloned object
* to make it sane.
* @return a pointer to the new object.
*/
virtual IBPtr fullclone() const {return new_ptr(*this);}
//@}
protected:
/** @name Standard Interfaced functions. */
//@{
/**
* Initialize this object after the setup phase before saving an
* EventGenerator to disk.
* @throws InitException if object could not be initialized properly.
*/
virtual void doinit();
//@}
protected:
/**
* Average crude photon multiplicity
* @param beta1 Velocity of the first charged particle, \f$\beta_1\f$.
* @param ombeta1 One minus the velocity of the first particle, \f$1-\beta_1\f$.
* @return The average photon multiplicity
*/
double nbar(double beta1,double ombeta1) {
return _alpha/pi*_chrg1*_chrg2/beta1*
log((1.+beta1)/ombeta1)*log(_emax/_emin);
}
/**
* Generate the momentum of a photon
* @param beta1 The velocity, \f$\beta_1\f$, of the first charged particle
* @param ombeta1 One minus the velocity, \f$1-\beta_1\f$, of the first
* charged particle which is supplied for numerical stability
* @return The contribution to the dipole weight
*/
double photon(double beta1,double ombeta1);
/**
* Calculate the exact weight for the dipole.
* @param beta1 Velocity of the first charged particle, \f$\beta_1\f$
* @param ombeta1 One minus the velocity of the first particle, \f$1-\beta_1\f$
* @param iphot The number of the photon for which the weight is required
* @return The weight
*/
double exactDipoleWeight(double beta1,double ombeta1,
unsigned int iphot) {
double ombc;
// if cos is greater than zero use result accurate as cos->1
if(_cosphot[iphot]>0.0)
ombc=ombeta1+beta1*sqr(_sinphot[iphot])/(1.+_cosphot[iphot]);
// if cos is less than zero use result accurate as cos->-1
else
ombc=1.-beta1*_cosphot[iphot];
return 1.0*sqr(beta1*_sinphot[iphot]/ombc);
}
/**
* The crude YFS form factor for calculating the weight
* @param b Velocity of the first charged particle, \f$\beta_1\f$
* @param omb One minus the velocity of the first particle, \f$1-\beta_1\f$
* @return The YFS form factor
*/
double crudeYFSFormFactor(double b,double omb) {
double Y =-_alpha/pi*_chrg1*_chrg2 / b * log((1.+b)/omb) * log(_m[0]/(2.*_emin));
return exp(Y);
}
/**
* The exact YFS form factor for calculating the weight
* @param beta1 Velocity of the first charged particle, \f$\beta_1\f$
* @param beta2 Velocity of the second charged particle, \f$\beta_2\f$.
* @param ombeta1 One minus the velocity of the first particle, \f$1-\beta_1\f$
* @param ombeta2 One minus the velocity of the second particle, \f$1-\beta_2\f$
* @return The YFS form factor
*/
double exactYFSFormFactor(double beta1,double ombeta1,
double beta2,double ombeta2);
/**
* Jacobian factor for the weight
*/
double jacobianWeight();
/**
* Matrix element weight
*/
double meWeight(ParticleVector children);
/**
* Member which generates the photons
* @param boost Boost vector to take the particles produced back from
* the decaying particle's rest frame to the lab
* @param children The decay products
*/
double makePhotons(Boost boost,ParticleVector children);
/**
* Compute a Lorentz transform from p to q
* @param p Original momentum
* @param q Final momentum
*/
LorentzRotation solveBoost(const Lorentz5Momentum & q,
const Lorentz5Momentum & p ) const;
private:
/**
* The static object used to initialize the description of this class.
* Indicates that this is a concrete class with persistent data.
*/
static ClassDescription<IFDipole> initIFDipole;
/**
* The assignment operator is private and must never be called.
* In fact, it should not even be implemented.
*/
IFDipole & operator=(const IFDipole &);
private:
/**
* the fine structure constant at $q^2=0$
*/
double _alpha;
/**
* The minimum photon energy
*/
Energy _emin;
/**
* The maximum photon energy
*/
Energy _emax;
/**
* Photon multiplicity being generated
*/
unsigned int _multiplicity;
/**
* Maximum number of photons to generate
*/
unsigned int _nphotonmax;
/**
* Map from arguments of lists such that
* _q???[_map[0]] is the charged child and
* _q???[_map[1]] is the neutral child.
*/
vector<int> _map;
/**
* Masses of the particles involved
*/
vector<Energy> _m;
/**
* charge of the parent particle
*/
double _chrg1;
/**
* charge of the (charged) child particle
*/
double _chrg2;
/**
* Momentum of the particles in the parent's rest frame
*/
//@{
/**
* Momenta of the charged particles in the parent's rest frame before radiation
*/
vector<Lorentz5Momentum> _qprf;
/**
* Momenta of the charged particles in the parent's rest frame after radiation
*/
vector<Lorentz5Momentum> _qnewprf;
/**
* Momenta of the photons in the parent rest frame
*/
vector<Lorentz5Momentum> _lprf;
/**
* Total momentum of the photons in the parent rest frame
*/
Lorentz5Momentum _bigLprf;
//@}
/**
* Momentum of the particles in the lab frame
*/
//@{
/**
* Momenta of the charged particles in the lab frame before radiation
*/
vector<Lorentz5Momentum> _qlab;
/**
* Momenta of the charged particles in the lab frame after radiation
*/
vector<Lorentz5Momentum> _qnewlab;
/**
* Momenta of the photons in the lab frame
*/
vector<Lorentz5Momentum> _llab;
/**
* Total momentum of the photons in the lab frame
*/
Lorentz5Momentum _bigLlab;
//@}
/**
* Reweighting factors due to differences between the true and crude
* distributions
*/
//@{
/**
* Reweighting factor for the real emission
*/
double _dipolewgt;
/**
* Reweighting factor for the YFS form-factor
*/
double _yfswgt;
/**
* Reweighting factor due to phase space
*/
double _jacobianwgt;
/**
* Reweighting factor due to matrix element corrections
*/
double _mewgt;
/**
* Maximum weight
*/
double _maxwgt;
//@}
/**
* Angles of the photons with respect to the first charged particle
* which are stored for numerical accuracy
*/
//@{
/**
* Cosine of the photon angles
*/
vector<double> _cosphot;
/**
* Sine of the photon angles
*/
vector<double> _sinphot;
//@}
/**
* Type of unweighting to perform
*/
unsigned int _mode;
/**
* Maximum number of attempts to generate a result
*/
unsigned int _maxtry;
/**
* Option for the energy cut-off
*/
unsigned int _energyopt;
/**
* Option for the inclusion of higher order corrections
*/
unsigned int _betaopt;
/**
* Option for the form of the primary distribution
*/
unsigned int _dipoleopt;
};
}
#include "ThePEG/Utilities/ClassTraits.h"
namespace ThePEG {
/** @cond TRAITSPECIALIZATIONS */
/** This template specialization informs ThePEG about the
* base classes of IFDipole. */
template <>
struct BaseClassTrait<Herwig::IFDipole,1> {
/** Typedef of the first base class of IFDipole. */
typedef Interfaced NthBase;
};
/** This template specialization informs ThePEG about the name of
* the IFDipole class and the shared object where it is defined. */
template <>
struct ClassTraits<Herwig::IFDipole>
: public ClassTraitsBase<Herwig::IFDipole> {
/** Return a platform-independent class name */
static string className() { return "Herwig::IFDipole"; }
};
/** @endcond */
}
#endif /* HERWIG_IFDipole_H */
diff --git a/Decay/Radiation/QEDRadiationHandler.cc b/Decay/Radiation/QEDRadiationHandler.cc
--- a/Decay/Radiation/QEDRadiationHandler.cc
+++ b/Decay/Radiation/QEDRadiationHandler.cc
@@ -1,112 +1,112 @@
// -*- C++ -*-
//
// QEDRadiationHandler.cc is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2007 The Herwig Collaboration
//
// Herwig++ is licenced under version 2 of the GPL, see COPYING for details.
// Please respect the MCnet academic guidelines, see GUIDELINES for details.
//
//
// This is the implementation of the non-inlined, non-templated member
// functions of the QEDRadiationHandler class.
//
#include "QEDRadiationHandler.h"
#include "ThePEG/Interface/Reference.h"
#include "ThePEG/Interface/ParVector.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "DecayRadiationGenerator.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
#include "ThePEG/Handlers/EventHandler.h"
using namespace Herwig;
QEDRadiationHandler::QEDRadiationHandler() {
// only include electroweak gauge bosons
_decayingParticles.push_back( 22);
_decayingParticles.push_back( 23);
- _decayingParticles.push_back(-23);
_decayingParticles.push_back( 24);
+ _decayingParticles.push_back(-24);
// only include the charged leptons
_decayProducts.push_back( 11);
_decayProducts.push_back( 13);
_decayProducts.push_back( 15);
_decayProducts.push_back(-11);
_decayProducts.push_back(-13);
_decayProducts.push_back(-15);
}
void QEDRadiationHandler::
handle(EventHandler & eh, const tPVector & tagged,
const Hint &) {
// find the potential decaying particles to be considered
set<tPPtr> parents;
for(unsigned int ix=0;ix<tagged.size();++ix) {
long id=tagged[ix]->id();
if(find(_decayProducts.begin(),_decayProducts.end(),id)!=_decayProducts.end()) {
PPtr par=tagged[ix]->parents()[0];
id=par->id();
if(tagged[ix]->parents()[0]->mass()>ZERO&&
find(_decayingParticles.begin(),_decayingParticles.end(),id)!=
_decayingParticles.end()) parents.insert(par);
}
}
set<tPPtr>::const_iterator sit;
StepPtr step=eh.currentStep();
// loop over parents
for(sit=parents.begin();sit!=parents.end();++sit) {
// extract children
ParticleVector children=(**sit).children();
// store number of children
unsigned int initsize =children.size();
// generate photons
ParticleVector newchildren=_generator->generatePhotons(**sit,children);
// if photons produced add as children and to step
for(unsigned int ix=initsize;ix<newchildren.size();++ix) {
(**sit).addChild(newchildren[ix]);
step->addDecayProduct(newchildren[ix]);
}
}
}
void QEDRadiationHandler::persistentOutput(PersistentOStream & os) const {
os << _generator << _decayingParticles << _decayProducts;
}
void QEDRadiationHandler::persistentInput(PersistentIStream & is, int) {
is >> _generator >> _decayingParticles >> _decayProducts;
}
ClassDescription<QEDRadiationHandler> QEDRadiationHandler::initQEDRadiationHandler;
// Definition of the static class description member.
void QEDRadiationHandler::Init() {
static ClassDocumentation<QEDRadiationHandler> documentation
("The QEDRadiationHandler class is designed to be used as a PostSubProcessHandler"
"so that the same approach as for radiation in decays can be used for resonances"
"produced as part of the hard process");
static Reference<QEDRadiationHandler,DecayRadiationGenerator>
interfaceRadiationGenerator
("RadiationGenerator",
"Reference to the DecayRadiationGenerator",
&QEDRadiationHandler::_generator, false, false, true, false, false);
static ParVector<QEDRadiationHandler,long> interfaceDecayingParticles
("DecayingParticles",
"List of PDF codes of the particles which should have radiation"
" generated for them.",
&QEDRadiationHandler::_decayingParticles, -1, long(24), 0, 0,
false, false, Interface::nolimits);
static ParVector<QEDRadiationHandler,long> interfaceDecayProducts
("DecayProducts",
"List of PDG codes of the particles which should be present"
" as decay products for the radiation to be generated.",
&QEDRadiationHandler::_decayProducts, -1, long(11), 0, 0,
false, false, Interface::nolimits);
}
diff --git a/Decay/Tau/TauDecayer.cc b/Decay/Tau/TauDecayer.cc
--- a/Decay/Tau/TauDecayer.cc
+++ b/Decay/Tau/TauDecayer.cc
@@ -1,314 +1,360 @@
// -*- C++ -*-
//
// TauDecayer.cc is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2007 The Herwig Collaboration
//
// Herwig++ is licenced under version 2 of the GPL, see COPYING for details.
// Please respect the MCnet academic guidelines, see GUIDELINES for details.
//
//
// This is the implementation of the non-inlined, non-templated member
// functions of the TauDecayer class.
//
// Author: Peter Richardson
//
#include "TauDecayer.h"
#include "ThePEG/PDT/DecayMode.h"
#include "ThePEG/Interface/ClassDocumentation.h"
+#include "ThePEG/Interface/Switch.h"
#include "ThePEG/Interface/ParVector.h"
#include "ThePEG/Interface/Reference.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
#include "ThePEG/Interface/Parameter.h"
#include "ThePEG/Helicity/VectorSpinInfo.h"
#include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
#include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
#include "Herwig++/Decay/DecayVertex.h"
#include "ThePEG/Helicity/FermionSpinInfo.h"
#include "ThePEG/StandardModel/StandardModelBase.h"
using namespace Herwig;
using namespace ThePEG::Helicity;
void TauDecayer::doinit() {
DecayIntegrator::doinit();
// make sure the current got initialised
_current->init();
// set up the phase-space channels
DecayPhaseSpaceModePtr mode;
DecayPhaseSpaceChannelPtr channel;
tPDVector extpart,ptemp;
extpart.push_back(getParticleData(ParticleID::tauminus));
extpart.push_back(getParticleData(ParticleID::nu_tau));
Energy mtau(extpart[0]->mass());
double maxweight;
vector<double> channelwgts;
int iq(0),ia(0);
_modemap.clear();
unsigned int ix,iy;
bool done;
vector<double>::iterator start,end;
for(ix=0;ix<_current->numberOfModes();++ix) {
// get the external particles for this mode
extpart.resize(2);
ptemp=_current->particles(-3,ix,iq,ia);
for(iy=0;iy<ptemp.size();++iy) extpart.push_back(ptemp[iy]);
// create the mode
mode=new_ptr(DecayPhaseSpaceMode(extpart,this));
// create the first piece of the channel
channel = new_ptr(DecayPhaseSpaceChannel(mode));
channel->addIntermediate(extpart[0],0,0.0,-1,1);
done=_current->createMode(-3,ix,mode,2,1,channel,mtau);
if(done) {
// the maximum weight and the channel weights
// the maximum
maxweight = _wgtmax.size()>numberModes() ? _wgtmax[numberModes()] : 0;
// the weights for the channel
if(_wgtloc.size()>numberModes()&&
_wgtloc[numberModes()]+mode->numberChannels()<=_weights.size()) {
start=_weights.begin()+_wgtloc[numberModes()];
end = start+mode->numberChannels();
channelwgts=vector<double>(start,end);
}
else {
channelwgts.resize(mode->numberChannels(),1./(mode->numberChannels()));
}
_modemap.push_back(ix);
// special for the two body modes
if(extpart.size()==3) {
channelwgts.clear();
mode=new_ptr(DecayPhaseSpaceMode(extpart,this));
}
addMode(mode,maxweight,channelwgts);
}
}
_current->reset();
_current->touch();
_current->update();
}
void TauDecayer::doinitrun() {
_current->initrun();
DecayIntegrator::doinitrun();
if(initialize()) {
_weights.clear();_wgtloc.clear();_wgtmax.clear();
unsigned int ix,iy;
for(ix=0;ix<numberModes();++ix) {
_wgtmax.push_back(mode(ix)->maxWeight());
_wgtloc.push_back(_weights.size());
for(iy=0;iy<mode(ix)->numberChannels();++iy) {
_weights.push_back(mode(ix)->channelWeight(iy));
}
}
}
}
bool TauDecayer::accept(tcPDPtr parent, const tPDVector & children) const {
bool allowed(false);
// find the neutrino
int idnu(0),idtemp,idin(parent->id());
vector<int> idother;
tPDVector::const_iterator pit = children.begin();
tPDVector::const_iterator pend = children.end();
for( ; pit!=pend;++pit) {
idtemp=(**pit).id();
if(abs(idtemp)==16) idnu=idtemp;
else idother.push_back(idtemp);
}
if((idnu==ParticleID::nu_tau && idin==ParticleID::tauminus)||
(idnu==ParticleID::nu_taubar && idin==ParticleID::tauplus )) {
allowed=_current->accept(idother);
}
return allowed;
}
int TauDecayer::modeNumber(bool & cc,tcPDPtr parent, const tPDVector & children) const {
int imode(-1);
tPDVector::const_iterator pit = children.begin();
tPDVector::const_iterator pend = children.end();
int idtemp;vector<int> idother;
for( ; pit!=pend;++pit) {
idtemp=(**pit).id();
if(abs(idtemp)!=16) idother.push_back(idtemp);
}
unsigned int itemp=_current->decayMode(idother);
for(unsigned int ix=0;ix<_modemap.size();++ix) {
if(_modemap[ix]==itemp) imode=ix;
}
// perform the decay
cc=parent->id()==ParticleID::tauplus;
return imode;
}
void TauDecayer::persistentOutput(PersistentOStream & os) const {
- os << ounit(_gf,1/GeV2) << _modemap << _current << _wgtloc << _wgtmax << _weights;
+ os << ounit(_gf,1/GeV2) << _modemap << _current << _wgtloc << _wgtmax << _weights
+ << _polOpt << _tauMpol << _tauPpol;
}
void TauDecayer::persistentInput(PersistentIStream & is, int) {
- is >> iunit(_gf,1/GeV2) >> _modemap >> _current >> _wgtloc >> _wgtmax >> _weights;
+ is >> iunit(_gf,1/GeV2) >> _modemap >> _current >> _wgtloc >> _wgtmax >> _weights
+ >> _polOpt >> _tauMpol >> _tauPpol;
}
ClassDescription<TauDecayer> TauDecayer::initTauDecayer;
// Definition of the static class description member.
void TauDecayer::Init() {
static ClassDocumentation<TauDecayer> documentation
("The TauDecayer class is designed to use a weak current"
" to perform the decay of the tau.");
static Parameter<TauDecayer,InvEnergy2> interfaceGFermi
("GFermi",
"The Fermi coupling constant",
&TauDecayer::_gf, 1./GeV2, 1.16637E-5/GeV2, ZERO, 1.e-3/GeV2,
false, false, false);
static Reference<TauDecayer,WeakDecayCurrent> interfaceWeakCurrent
("WeakCurrent",
"The reference for the decay current to be used.",
&TauDecayer::_current, false, false, true, false, false);
static ParVector<TauDecayer,int> interfaceWeightLocation
("WeightLocation",
"The locations of the weights for a given channel in the vector",
&TauDecayer::_wgtloc,
0, 0, 0, 0, 10000, false, false, true);
static ParVector<TauDecayer,double> interfaceWeightMax
("MaximumWeight",
"The maximum weight for a given channel.",
&TauDecayer::_wgtmax,
0, 0, 0, 0., 100., false, false, true);
static ParVector<TauDecayer,double> interfaceWeights
("Weights",
"The weights for the integration.",
&TauDecayer::_weights,
0, 0, 0, 0., 1., false, false, true);
+
+ static Switch<TauDecayer,bool> interfacePolarizationOption
+ ("PolarizationOption",
+ "Option of forcing the polarization of the tau leptons, N.B. you"
+ " should only use this option for making distributions for"
+ " comparision if you really know what you are doing.",
+ &TauDecayer::_polOpt, false, false, false);
+ static SwitchOption interfacePolarizationOptionDefault
+ (interfacePolarizationOption,
+ "Default",
+ "Don't force the polarization use the full spin density matrices"
+ " to get the right answer",
+ false);
+ static SwitchOption interfacePolarizationOptionForce
+ (interfacePolarizationOption,
+ "Force",
+ "Force the polarizations",
+ true);
+
+ static Parameter<TauDecayer,double> interfaceTauMinusPolarization
+ ("TauMinusPolarization",
+ "The polarization of the tau-, left=-1, right=+1 if this is forced.",
+ &TauDecayer::_tauMpol, 0.0, -1.0, 1.0,
+ false, false, Interface::limited);
+
+
+ static Parameter<TauDecayer,double> interfaceTauPlusPolarization
+ ("TauPlusPolarization",
+ "The polarization of the tau+, left=-1, right=+1 if this is forced.",
+ &TauDecayer::_tauPpol, 0.0, -1.0, 1.0,
+ false, false, Interface::limited);
+
}
// combine the currents to give the matrix element
double TauDecayer::me2(const int ichan,const Particle & inpart,
const ParticleVector & decay,
MEOption meopt) const {
// map the mode to those in the current
int mode(_modemap[imode()]);
// get the particles for the hadronic current
ParticleVector hadpart(decay.begin()+1,decay.end());
Energy q;
// extract info on the decaying particle
if(meopt==Initialize) {
// spin density matrix for the decaying particle
_rho = RhoDMatrix(PDT::Spin1Half);
if(inpart.id()==ParticleID::tauminus)
SpinorWaveFunction ::calculateWaveFunctions(_inspin,_rho,
const_ptr_cast<tPPtr>(&inpart),
incoming);
else
SpinorBarWaveFunction::calculateWaveFunctions(_inbar ,_rho,
const_ptr_cast<tPPtr>(&inpart),
incoming);
+ if(_polOpt) {
+ _rho(0,1) = _rho(1,0) = 0.;
+ if(inpart.id()==ParticleID::tauminus) {
+ _rho(0,0) = 0.5*(1.-_tauMpol);
+ _rho(1,1) = 0.5*(1.+_tauMpol);
+ }
+ else {
+ _rho(0,0) = 0.5*(1.+_tauPpol);
+ _rho(1,1) = 0.5*(1.-_tauPpol);
+ }
+ }
// work out the mapping for the hadron vector
_constants = vector<unsigned int>(decay.size()+1);
_ispin = vector<PDT::Spin >(decay.size());
int itemp(1);
unsigned int ix(decay.size());
do {
--ix;
_ispin[ix] = decay[ix]->data().iSpin();
itemp *= _ispin[ix];
_constants[ix] = itemp;
}
while(ix>0);
_constants[decay.size()] = 1;
_constants[0 ] = _constants[1];
ME(DecayMatrixElement(PDT::Spin1Half,_ispin));
}
// connect the spininfo up if needed
if(meopt==Terminate) {
if(inpart.id()==ParticleID::tauminus) {
SpinorWaveFunction ::
constructSpinInfo(_inspin,const_ptr_cast<tPPtr>(&inpart),incoming,true);
SpinorBarWaveFunction::
constructSpinInfo(_inbar,decay[0],outgoing,true);
}
else {
SpinorBarWaveFunction::
constructSpinInfo(_inbar ,const_ptr_cast<tPPtr>(&inpart),incoming,true);
SpinorWaveFunction::
constructSpinInfo(_inspin,decay[0],outgoing,true);
}
_current->current(mode,ichan,q,hadpart,meopt);
return 0.;
}
// calculate the spinors for the decay products
if(inpart.id()==ParticleID::tauminus)
SpinorBarWaveFunction::calculateWaveFunctions(_inbar ,decay[0],outgoing);
else
SpinorWaveFunction ::calculateWaveFunctions(_inspin,decay[0],outgoing);
// calculate the hadron current
vector<LorentzPolarizationVectorE>
hadron(_current->current(mode,ichan,q,hadpart,meopt));
// prefactor
double pre = sqr(pow(inpart.mass()/q,int(hadpart.size()-2)));
// calculate the lepton current
LorentzPolarizationVectorE lepton[2][2];
for(unsigned ix=0;ix<2;++ix) {
for(unsigned iy=0;iy<2;++iy) {
if(inpart.id()==15)
lepton[ix][iy]=2.*_inspin[ix].leftCurrent(_inbar[iy]);
else
lepton[iy][ix]=2.*_inspin[ix].leftCurrent(_inbar[iy]);
}
}
// compute the matrix element
vector<unsigned int> ihel(decay.size()+1);
for(unsigned int hhel=0;hhel<hadron.size();++hhel) {
// map the index for the hadrons to a helicity state
for(unsigned int ix=decay.size();ix>1;--ix) {
ihel[ix]=(hhel%_constants[ix-1])/_constants[ix];
}
// loop over the helicities of the tau and neutrino and set up the matrix
// element
for(ihel[1]=0;ihel[1]<2;++ihel[1]){
for(ihel[0]=0;ihel[0]<2;++ihel[0]) {
ME()(ihel)= lepton[ihel[0]][ihel[1]].dot(hadron[hhel])*_gf;
}
}
}
// multiply by the CKM element
int iq,ia;
_current->decayModeInfo(mode,iq,ia);
double ckm(1.);
if(iq<=6) {
if(iq%2==0) ckm = SM().CKM(iq/2-1,(abs(ia)-1)/2);
else ckm = SM().CKM(abs(ia)/2-1,(iq-1)/2);
}
return 0.5*pre*ckm*(ME().contract(_rho)).real();
}
// output the setup information for the particle database
void TauDecayer::dataBaseOutput(ofstream & output,bool header) const {
unsigned int ix;
if(header) output << "update decayers set parameters=\"";
DecayIntegrator::dataBaseOutput(output,false);
output << "set " << name() << ":GFermi " << _gf*GeV2 << "\n";
for(ix=0;ix<_wgtloc.size();++ix) {
output << "insert " << name() << ":WeightLocation " << ix << " "
<< _wgtloc[ix] << "\n";
}
for(ix=0;ix<_wgtmax.size();++ix) {
output << "insert " << name() << ":MaximumWeight " << ix << " "
<< _wgtmax[ix] << "\n";
}
for(ix=0;ix<_weights.size();++ix) {
output << "insert " << name() << ":Weights " << ix << " "
<< _weights[ix] << "\n";
}
_current->dataBaseOutput(output,false,true);
output << "set " << name() << ":WeakCurrent " << _current->name() << " \n";
output << "\n\" where BINARY ThePEGName=\"" << fullName() << "\";\n";
}
diff --git a/Decay/Tau/TauDecayer.h b/Decay/Tau/TauDecayer.h
--- a/Decay/Tau/TauDecayer.h
+++ b/Decay/Tau/TauDecayer.h
@@ -1,265 +1,280 @@
// -*- C++ -*-
//
// TauDecayer.h is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2007 The Herwig Collaboration
//
// Herwig++ is licenced under version 2 of the GPL, see COPYING for details.
// Please respect the MCnet academic guidelines, see GUIDELINES for details.
//
#ifndef HERWIG_TauDecayer_H
#define HERWIG_TauDecayer_H
// This is the declaration of the TauDecayer class.
#include "Herwig++/Decay/DecayIntegrator.h"
#include "Herwig++/Decay/DecayPhaseSpaceMode.h"
#include "ThePEG/Helicity/LorentzPolarizationVector.h"
#include "Herwig++/Decay/WeakCurrents/WeakDecayCurrent.h"
#include "ThePEG/Helicity/LorentzSpinor.h"
#include "ThePEG/Helicity/LorentzSpinorBar.h"
namespace Herwig {
using namespace ThePEG;
using ThePEG::Helicity::LorentzPolarizationVector;
/** \ingroup Decay
*
* The TauDecayer class performs the decay of the \f$\tau\f$. The matrix element
* for \f$\tau\f$ decay can be split into a leptonic current describing the
* weak decay of the decay to a neutrino and a highly virtual \f$W\f$ combined
* with a hadronic current for the virtual \f$W\f$ decay.
*
* The matrix element has the form
* \f[\mathcal{M} = \frac{G_F}{\sqrt{2}}\bar{u}(p_{\nu_\tau})
* \gamma^\mu\left(1-\gamma^5\right)u(p_{\tau}) J_\mu,\f]
* where
* - \f$G_F\f$ is the Fermi constant,
* - \f$p_{\nu_\tau}\f$ is the momentum of the \f$\tau\f$ neutrino,
* - \f$p_{\tau}\f$ is the momentum of the \f$\tau\f$,
* - \f$ J_\mu\f$ is the hadronic current.
*
* The leptonic part of this matrix element is implemented in this class
* together with a WeakDecayCurrent member which calculates the hadronic
* current \f$ J_\mu\f$. This allows a range of \f$\tau\f$ decays to be
* constructed via the repository using the interfaces.
*
* @see DecayIntegrator.
* @see WeakDecayCurrent
*
*/
class TauDecayer: public DecayIntegrator {
public:
/**
* Default constructor.
*/
- TauDecayer() :_gf(1.16637E-5/GeV2) {
+ TauDecayer() :_gf(1.16637E-5/GeV2), _polOpt(false), _tauMpol(0.),
+ _tauPpol(0.) {
generateIntermediates(true);
}
/**
* Check if this decayer can perfom the decay for a particular mode.
* @param parent The decaying particle
* @param children The decay products
*/
virtual bool accept(tcPDPtr parent, const tPDVector & children) const;
/**
* Which of the possible decays is required
* @param cc Is this mode the charge conjugate
* @param parent The decaying particle
* @param children The decay products
*/
virtual int modeNumber(bool & cc, tcPDPtr parent,
const tPDVector & children) const;
/**
* Return the matrix element squared for a given mode and phase-space channel.
* This method combines the leptonic current and the hadronic current to
* calculate the matrix element.
* @param ichan The channel we are calculating the matrix element for.
* @param part The decaying Particle.
* @param decay The particles produced in the decay.
* @param meopt Option for the calculation of the matrix element
* @return The matrix element squared for the phase-space configuration.
*/
virtual double me2(const int ichan, const Particle & part,
const ParticleVector & decay,MEOption meopt) const;
/**
* Output the setup information for the particle database.
*/
void dataBaseOutput(ofstream & os,bool header) const;
public:
/** @name Functions used by the persistent I/O system. */
//@{
/**
* Function used to write out object persistently.
* @param os the persistent output stream written to.
*/
void persistentOutput(PersistentOStream & os) const;
/**
* Function used to read in object persistently.
* @param is the persistent input stream read from.
* @param version the version number of the object when written.
*/
void persistentInput(PersistentIStream & is, int version);
//@}
/**
* Standard Init function used to initialize the interfaces.
*/
static void Init();
protected:
/** @name Clone Methods. */
//@{
/**
* Make a simple clone of this object.
* @return a pointer to the new object.
*/
virtual IBPtr clone() const {return new_ptr(*this);}
/** Make a clone of this object, possibly modifying the cloned object
* to make it sane.
* @return a pointer to the new object.
*/
virtual IBPtr fullclone() const {return new_ptr(*this);}
//@}
protected:
/** @name Standard Interfaced functions. */
//@{
/**
* Initialize this object after the setup phase before saving and
* EventGenerator to disk.
* @throws InitException if object could not be initialized properly.
*/
virtual void doinit();
/**
* Initialize this object to the begining of the run phase.
*/
virtual void doinitrun();
//@}
private:
/**
* Describe a concrete class with persistent data.
*/
static ClassDescription<TauDecayer> initTauDecayer;
/**
* Private and non-existent assignment operator.
*/
TauDecayer & operator=(const TauDecayer &);
private:
/**
* Fermi coupling constant, \f$G_F\f$.
*/
InvEnergy2 _gf;
/**
* mapping of the modes to the currents
*/
vector<unsigned int> _modemap;
/**
* the hadronic current
*/
WeakDecayCurrentPtr _current;
/**
* location of the weights
*/
vector<int> _wgtloc;
/**
* the maximum weight
*/
vector<double> _wgtmax;
/**
* The weights for the different channels
*/
vector<double> _weights;
/**
* The spinors for the decaying particle
*/
mutable vector<LorentzSpinor <SqrtEnergy> > _inspin;
/**
* Barred spinors for the deaying particle
*/
mutable vector<LorentzSpinorBar<SqrtEnergy> > _inbar ;
/**
* Rho matrix
*/
mutable RhoDMatrix _rho;
/**
* Maps for the vectors
*/
mutable vector<unsigned int> _constants;
/**
* Spins of the particles
*/
mutable vector<PDT::Spin> _ispin;
+ /**
+ * Option to force the polarizations of the tau leptons
+ */
+ bool _polOpt;
+
+ /**
+ * Polarization for \f$\tau^-\f$
+ */
+ double _tauMpol;
+
+ /**
+ * Polarization of \f$\tau^+\f$
+ */
+ double _tauPpol;
};
}
#include "ThePEG/Utilities/ClassTraits.h"
namespace ThePEG {
/** @cond TRAITSPECIALIZATIONS */
/**
* The following template specialization informs ThePEG about the
* base class of TauDecayer.
*/
template <>
struct BaseClassTrait<Herwig::TauDecayer,1> {
/** Typedef of the base class of TauDecayer. */
typedef Herwig::DecayIntegrator NthBase;
};
/**
* The following template specialization informs ThePEG about the
* name of this class and the shared object where it is defined.
*/
template <>
struct ClassTraits<Herwig::TauDecayer>
: public ClassTraitsBase<Herwig::TauDecayer> {
/** Return the class name.*/
static string className() { return "Herwig::TauDecayer"; }
/**
* Return the name of the shared library to be loaded to get
* access to this class and every other class it uses
* (except the base class).
*/
static string library() { return "HwTauDecay.so"; }
};
/** @endcond */
}
#endif /* THEPEG_TauDecayer_H */
diff --git a/Doc/HerwigDefaults.in.in b/Doc/HerwigDefaults.in.in
--- a/Doc/HerwigDefaults.in.in
+++ b/Doc/HerwigDefaults.in.in
@@ -1,42 +1,41 @@
# @configure_input@
#
# output interfaces for documentation
# the following need to come first
globallibrary Herwig.so
library HwWeakCurrents.so
library HwSusy.so
#
library Hw64Decay.so
library HwAnalysis.so
library HwBSMAnalysis.so
library HwFormFactors.so
library HwLEPAnalysis.so
library HwMamboDecay.so
library HwMEHadronFast.so
library HwMEHadron.so
library HwMEDIS.so
library HwPowhegME.so
library HwMELepton.so
library HwMEGammaGamma.so
library HwMEGammaHadron.so
library SimpleKTCut.so
library HwMPI.so
library HwMRST.so
library HwPartonicDecay.so
library HwPerturbativeDecay.so
library HwPerturbativeHiggsDecay.so
library HwRSModel.so
library HwShower.so
library HwPowhegShower.so
library HwSMDecay.so
library HwTauDecay.so
library HwTMDecay.so
library HwBaryonDecay.so
library HwUA5.so
library HwUED.so
library HwVMDecay.so
library HwSatPDF.so
library HwIncomingPhotonEvolver.so
@LOAD_FASTJET@
-@LOAD_HEPMC@
doxygendump Herwig:: AllInterfaces.h
diff --git a/Makefile.am b/Makefile.am
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,17 +1,17 @@
SUBDIRS = include \
Utilities PDT Decay PDF Models \
Shower Hadronization MatrixElement \
UnderlyingEvent Analysis Looptools \
lib src Doc Contrib
EXTRA_DIST = GUIDELINES
DISTCHECK_CONFIGURE_FLAGS = --enable-debug --with-thepeg=$(THEPEGPATH)
ACLOCAL_AMFLAGS = -I m4
DISTCLEANFILES = config.herwig
libclean:
find . -name '*.la' -print0 | xargs -0 rm -rf
- (cd lib && make clean)
+ (cd lib && $(MAKE) clean)
diff --git a/Models/General/ModelGenerator.h b/Models/General/ModelGenerator.h
--- a/Models/General/ModelGenerator.h
+++ b/Models/General/ModelGenerator.h
@@ -1,234 +1,233 @@
// -*- C++ -*-
//
// ModelGenerator.h is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2007 The Herwig Collaboration
//
// Herwig++ is licenced under version 2 of the GPL, see COPYING for details.
// Please respect the MCnet academic guidelines, see GUIDELINES for details.
//
#ifndef HERWIG_ModelGenerator_H
#define HERWIG_ModelGenerator_H
//
// This is the declaration of the ModelGenerator class.
//
#include "ThePEG/Interface/Interfaced.h"
#include "DecayConstructor.h"
#include "HardProcessConstructor.h"
#include "ResonantProcessConstructor.h"
#include "ModelGenerator.fh"
namespace Herwig {
using namespace ThePEG;
/**
* This class is designed to store the particles in some model and
* then call the appropriate function to setup the model
*
* @see \ref ModelGeneratorInterfaces "The interfaces"
* defined for ModelGenerator.
* @see Interfaced
*/
class ModelGenerator: public Interfaced {
public:
/**
* The default constructor.
*/
inline ModelGenerator() : _theParticles(0), _theOffshell(0),
_theOffsel(0), _theBRnorm(true),
_theNpoints(50), _theIorder(1),
_theBWshape(0), brMin_(1e-6) {}
public:
/** @name Functions used by the persistent I/O system. */
//@{
/**
* Function used to write out object persistently.
* @param os the persistent output stream written to.
*/
void persistentOutput(PersistentOStream & os) const;
/**
* Function used to read in object persistently.
* @param is the persistent input stream read from.
* @param version the version number of the object when written.
*/
void persistentInput(PersistentIStream & is, int version);
//@}
/**
* The standard Init function used to initialize the interfaces.
* Called exactly once for each class by the class description system
* before the main function starts or
* when this class is dynamically loaded.
*/
static void Init();
/**
* Overloaded function from Interfaced
*/
virtual bool preInitialize() const;
protected:
/** @name Standard Interfaced functions. */
//@{
/**
* Initialize this object after the setup phase before saving an
* EventGenerator to disk.
* @throws InitException if object could not be initialized properly.
*/
virtual void doinit();
//@}
protected:
/** @name Clone Methods. */
//@{
/**
* Make a simple clone of this object.
* @return a pointer to the new object.
*/
virtual IBPtr clone() const;
/** Make a clone of this object, possibly modifying the cloned object
* to make it sane.
* @return a pointer to the new object.
*/
virtual IBPtr fullclone() const;
//@}
private:
/**
* The static object used to initialize the description of this class.
* Indicates that this is a concrete class with persistent data.
*/
static ClassDescription<ModelGenerator> initModelGenerator;
/**
* The assignment operator is private and must never be called.
* In fact, it should not even be implemented.
*/
ModelGenerator & operator=(const ModelGenerator &);
private:
/**
* Check the decay modes a given particle type. This checks whether
* the decay has quarks in the final state and that they can be put on
* mass-shell during the shower.
* @param parent The parent particle
*/
void checkDecays(PDPtr parent);
/**
* Write out the spectrum of masses and decay modes
*/
void writeDecayModes(ofstream & ofs, tcPDPtr parent) const;
/**
* Create mass and width generators to simulate off-shell effects
* @param p A pointer to the ParticleData object to create
* the width and mass generators for.
*/
void createWidthGenerator(tPDPtr p);
-
private:
/**
* Pointer to the HardProcessConstructor
*/
HPConstructorPtr _theHPConstructor;
/**
* Pointer to DecayConstructor
*/
DecayConstructorPtr _theDecayConstructor;
/**
* Vector of ParticleData pointer
*/
PDVector _theParticles;
/**
* Pointer to the ResonantProcessConstructor
*/
RPConstructorPtr _theRPConstructor;
/** @name Width and Mass Generator variables. */
//@{
/**
* The particles to create MassGenerator and WidthGenerators
*/
PDVector _theOffshell;
/**
* Which particles to treat as off-shell. 1 treats all particles in
* _theParticles vector as off-shell, 0 allows selection via
* _theOffshell vector.
*/
int _theOffsel;
/**
* Whether to normalise the partial widths to BR*Total width for
* an on-shell particle
*/
bool _theBRnorm;
/**
* The number of points to include in the interpolation table
*/
int _theNpoints;
/**
* The order for the interpolation
*/
unsigned int _theIorder;
/**
* The shape of the Breit-Wigner used in the mass generation
*/
int _theBWshape;
/**
* The minimum branching ratio to use
*/
double brMin_;
//@}
};
}
#include "ThePEG/Utilities/ClassTraits.h"
namespace ThePEG {
/** @cond TRAITSPECIALIZATIONS */
/** This template specialization informs ThePEG about the
* base classes of ModelGenerator. */
template <>
struct BaseClassTrait<Herwig::ModelGenerator,1> {
/** Typedef of the first base class of ModelGenerator. */
typedef Interfaced NthBase;
};
/** This template specialization informs ThePEG about the name of
* the ModelGenerator class and the shared object where it is defined. */
template <>
struct ClassTraits<Herwig::ModelGenerator>
: public ClassTraitsBase<Herwig::ModelGenerator> {
/** Return a platform-independent class name */
static string className() { return "Herwig::ModelGenerator"; }
};
/** @endcond */
}
#endif /* HERWIG_ModelGenerator_H */
diff --git a/Models/General/ThreeBodyDecayConstructor.cc b/Models/General/ThreeBodyDecayConstructor.cc
--- a/Models/General/ThreeBodyDecayConstructor.cc
+++ b/Models/General/ThreeBodyDecayConstructor.cc
@@ -1,601 +1,626 @@
// -*- C++ -*-
//
// This is the implementation of the non-inlined, non-templated member
// functions of the ThreeBodyDecayConstructor class.
//
#include "ThreeBodyDecayConstructor.h"
#include "ThePEG/PDT/EnumParticles.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
#include "Herwig++/Models/StandardModel/StandardModel.h"
#include "Herwig++/Decay/General/GeneralThreeBodyDecayer.h"
#include "Herwig++/Decay/DecayPhaseSpaceMode.h"
#include "Herwig++/PDT/ThreeBodyAllOnCalculator.h"
#include "ThePEG/PDT/StandardMatchers.h"
#include "ThePEG/Interface/Switch.h"
#include "ThePEG/Utilities/Throw.h"
#include "DecayConstructor.h"
using namespace Herwig;
IBPtr ThreeBodyDecayConstructor::clone() const {
return new_ptr(*this);
}
IBPtr ThreeBodyDecayConstructor::fullclone() const {
return new_ptr(*this);
}
void ThreeBodyDecayConstructor::persistentOutput(PersistentOStream & os) const {
- os << _removeOnShell << _interopt << _widthopt << _minReleaseFraction;
+ os << _removeOnShell << _interopt << _widthopt << _minReleaseFraction
+ << _includeTopOnShell;
}
void ThreeBodyDecayConstructor::persistentInput(PersistentIStream & is, int) {
- is >> _removeOnShell >> _interopt >> _widthopt >> _minReleaseFraction;
+ is >> _removeOnShell >> _interopt >> _widthopt >> _minReleaseFraction
+ >> _includeTopOnShell;
}
ClassDescription<ThreeBodyDecayConstructor>
ThreeBodyDecayConstructor::initThreeBodyDecayConstructor;
// Definition of the static class description member.
void ThreeBodyDecayConstructor::Init() {
static ClassDocumentation<ThreeBodyDecayConstructor> documentation
("The ThreeBodyDecayConstructor class constructs the three body decay modes");
static Switch<ThreeBodyDecayConstructor,bool> interfaceRemoveOnShell
("RemoveOnShell",
"Remove on-shell diagrams as should be treated as a sequence of 1->2 decays",
&ThreeBodyDecayConstructor::_removeOnShell, true, false, false);
static SwitchOption interfaceRemoveOnShellRemove
(interfaceRemoveOnShell,
"Yes",
"Remove the diagrams",
true);
static SwitchOption interfaceRemoveOnShellKeep
(interfaceRemoveOnShell,
"No",
"Don't remove the diagrams",
false);
+ static Switch<ThreeBodyDecayConstructor,bool> interfaceIncludeOnShellTop
+ ("IncludeOnShellTop",
+ "Include the on-shell diagrams involving t -> bW",
+ &ThreeBodyDecayConstructor::_includeTopOnShell, false, false, false);
+ static SwitchOption interfaceIncludeOnShellTopYes
+ (interfaceIncludeOnShellTop,
+ "Yes",
+ "Inlude them",
+ true);
+ static SwitchOption interfaceIncludeOnShellTopNo
+ (interfaceIncludeOnShellTop,
+ "No",
+ "Don't include them",
+ true);
+
static Switch<ThreeBodyDecayConstructor,unsigned int> interfaceWidthOption
("WidthOption",
"Option for the treatment of the widths of the intermediates",
&ThreeBodyDecayConstructor::_widthopt, 1, false, false);
static SwitchOption interfaceWidthOptionFixed
(interfaceWidthOption,
"Fixed",
"Use fixed widths",
1);
static SwitchOption interfaceWidthOptionRunning
(interfaceWidthOption,
"Running",
"Use running widths",
2);
static SwitchOption interfaceWidthOptionZero
(interfaceWidthOption,
"Zero",
"Set the widths to zero",
3);
static Switch<ThreeBodyDecayConstructor,unsigned int> interfaceIntermediateOption
("IntermediateOption",
"Option for the inclusion of intermediates in the event",
&ThreeBodyDecayConstructor::_interopt, 0, false, false);
static SwitchOption interfaceIntermediateOptionAlways
(interfaceIntermediateOption,
"Always",
"Always include the intermediates",
1);
static SwitchOption interfaceIntermediateOptionNever
(interfaceIntermediateOption,
"Never",
"Never include the intermediates",
2);
static SwitchOption interfaceIntermediateOptionOnlyIfOnShell
(interfaceIntermediateOption,
"OnlyIfOnShell",
"Only if there are on-shell diagrams",
0);
static Parameter<ThreeBodyDecayConstructor,double> interfaceMinReleaseFraction
("MinReleaseFraction",
"The minimum energy release for a three-body decay, as a "
"fraction of the parent mass.",
&ThreeBodyDecayConstructor::_minReleaseFraction, 1e-3, 0.0, 1.0,
false, false, Interface::limited);
}
void ThreeBodyDecayConstructor::DecayList(const vector<PDPtr> & particles) {
unsigned int np = particles.size();
if( np == 0 ) return;
// cast the StandardModel to the Hw++ one to get the vertices
tHwSMPtr model = dynamic_ptr_cast<tHwSMPtr>(generator()->standardModel());
model->init();
unsigned int nv(model->numberOfVertices());
// make sure vertices are initialized
for(unsigned int i = 0; i < nv; ++i) model->vertex(i)->init();
// loop over the particles and create the decayers
for(unsigned int ip = 0; ip < np; ++ip) {
tPDPtr parent = particles[ip];
// create the prototype 1->2 decays which will be turned into
// 1 -> 3 decays
vector<TwoBodyPrototype> prototypes;
for(unsigned int iv = 0; iv < nv; ++iv) {
VertexBasePtr vertex = model->vertex(iv);
//skip an effective vertex
if( vertex->orderInGs() + vertex->orderInGem() == 3 )
continue;
for(unsigned int il = 0; il < 3; ++il) {
vector<TwoBodyPrototype> temp =
createPrototypes(parent, vertex, il);
if(!temp.empty()) prototypes.insert(prototypes.end(),
temp.begin(),temp.end());
}
}
// now expand the prototypes by decaying the outgoing particles
// in the prototypes
vector<TBDiagram> diagrams;
for(unsigned int ix=0;ix<prototypes.size();++ix) {
for(unsigned int iv = 0; iv < nv; ++iv) {
VertexBasePtr vertex = model->vertex(iv);
//skip an effective vertex
if( vertex->orderInGs() + vertex->orderInGem() == 3 )
continue;
for(unsigned int il = 0; il < 3; ++il) {
vector<TBDiagram> temp = expandPrototype(prototypes[ix],
vertex, il);
if(!temp.empty()) diagrams.insert(diagrams.end(),temp.begin(),
temp.end());
}
}
}
// now we have the potential diagrams we need to do some sorting
// into decay modes
vector< vector<TBDiagram> > modes;
Energy min = particles[ip]->mass();
bool possibleOnShell(false);
for(vector<TBDiagram>::const_iterator dit = diagrams.begin();
dit != diagrams.end(); ++dit) {
Energy mout[3] =
{getParticleData(dit->outgoing)->constituentMass(),
getParticleData(dit->outgoingPair.first)->constituentMass(),
getParticleData(dit->outgoingPair.second)->constituentMass()};
// remove processes which aren't kinematically allowed within
if( min - mout[0] - mout[1] - mout[2] < _minReleaseFraction * min )
continue;
// remove QED and QCD radiation diagrams
// radiation from intermediate
if((dit->outgoingPair.first ==dit->intermediate->id() &&
(dit->outgoingPair.second==ParticleID::g ||
dit->outgoingPair.second==ParticleID::gamma ))||
(dit->outgoingPair.second==dit->intermediate->id() &&
(dit->outgoingPair.first ==ParticleID::g ||
dit->outgoingPair.first ==ParticleID::gamma ))) continue;
// radiation from the parent
if((dit->outgoing ==dit->incoming&&
(dit->intermediate->id()==ParticleID::g ||
dit->intermediate->id()==ParticleID::gamma ))||
(dit->intermediate->id()==dit->incoming &&
(dit->outgoing ==ParticleID::g ||
dit->outgoing ==ParticleID::gamma ))) continue;
// remove weak decays of quarks other than top
if(StandardQCDPartonMatcher::Check(dit->intermediate->id()) &&
((StandardQCDPartonMatcher::Check(dit->outgoingPair.first)&&
abs(dit->outgoingPair.second)==ParticleID::Wplus)||
(StandardQCDPartonMatcher::Check(dit->outgoingPair.second)&&
abs(dit->outgoingPair.first)==ParticleID::Wplus))) continue;
// remove processes where one of the outgoing particles has the
//same id as the incoming particles
if(abs(particles[ip]->id()) == abs(dit->outgoing ) ||
abs(particles[ip]->id()) == abs(dit->outgoingPair.first ) ||
abs(particles[ip]->id()) == abs(dit->outgoingPair.second) ) continue;
// if needed remove intermediate diagrams where intermediate can be
// on shell
Energy mint = dit->intermediate->mass();
if( min> ( mout[0] + mint ) &&
mint > ( mout[1] + mout[2] )) {
- if(_removeOnShell) continue;
- else if(dit->intermediate->width()==0.*GeV) {
+ // special for top
+ if(abs(dit->incoming)==ParticleID::t&&
+ abs(dit->intermediate->id())==ParticleID::Wplus) {
+ if(!_includeTopOnShell) continue;
+ }
+ // general
+ else if(_removeOnShell) {
+ continue;
+ }
+ if(dit->intermediate->width()==0.*GeV) {
Throw<InitException>()
<< "Trying to include on-shell diagram for "
<< getParticleData(dit->incoming)->PDGName() << " -> "
<< getParticleData(dit->outgoing)->PDGName() << " "
<< getParticleData(dit->outgoingPair.first )->PDGName() << " "
<< getParticleData(dit->outgoingPair.second)->PDGName()
<< " with intermediate " << dit->intermediate->PDGName()
<< " with zero width.\n"
<< "You should make sure that the width for the intermediate is either"
<< " read from an SLHA file or the intermediate is included in the "
<< "DecayParticles list of the ModelGenerator.\n"
<< Exception::runerror;
}
possibleOnShell = true;
}
// check if should be added to an existing decaymode
bool added = false;
for(unsigned int iy = 0; iy < modes.size(); ++iy) {
if(modes[iy][0].sameDecay(*dit)) {
added = true;
bool already = false;
for(unsigned int iz = 0; iz < modes[iy].size(); ++iz) {
if( modes[iy][iz] == *dit) {
already = true;
break;
}
}
if(!already) modes[iy].push_back(*dit);
break;
}
}
// otherwise create a new decay mode
if(!added) modes.push_back(vector<TBDiagram>(1,*dit));
}
// print out info on the potential modes
// cerr << "testing there are " << modes.size() << " modes\n";
// for(unsigned int ix=0;ix<modes.size();++ix) {
// cerr << "testing mode " << ix << "\n";
// cerr << "incoming = " << getParticleData(modes[ix][0].incoming)->PDGName() << "\n";
// cerr << "outgoing = " << getParticleData(modes[ix][0].outgoing)->PDGName() << " "
// << getParticleData(modes[ix][0].outgoingPair.first )->PDGName() << " "
// << getParticleData(modes[ix][0].outgoingPair.second)->PDGName() << "\n";
// cerr << "testing there are " << modes[ix].size() << " diagrams\n";
// for(unsigned int iy=0;iy<modes[ix].size();++iy) {
// cerr << "testing diagram " << iy << "\n";
// cerr << "incoming = " << modes[ix][iy].incoming << "\n";
// cerr << "outgoing = " << modes[ix][iy].outgoing << " "
// << modes[ix][iy].outgoingPair.first << " "
// << modes[ix][iy].outgoingPair.second << "\n";
// cerr << "intermediate = " << modes[ix][iy].intermediate->PDGName()
// << "\t" << modes[ix][iy].intermediate->id() << "\n";
// cerr << "vertices = " << modes[ix][iy].vertices.first ->fullName() << "\n"
// << " " << modes[ix][iy].vertices.second->fullName() << "\n";
// }
// }
// now we need to create the decayers for the mode
bool inter(false);
if( _interopt == 1 || (_interopt == 0 && possibleOnShell) )
inter = true;
vector< vector<TBDiagram> >::const_iterator mend = modes.end();
for( vector< vector<TBDiagram> >::const_iterator mit = modes.begin();
mit != mend; ++mit ) {
createDecayMode(*mit, inter);
}
}// end of particle loop
}
vector<TwoBodyPrototype> ThreeBodyDecayConstructor::
createPrototypes(tPDPtr inpart, VertexBasePtr vertex, unsigned int list) {
int id = inpart->id();
if( id < 0 || !vertex->incoming(id) || vertex->getNpoint() != 3 )
return vector<TwoBodyPrototype>();
tPDVector decaylist = vertex->search(list, id);
vector<TwoBodyPrototype> decays;
tPDVector::size_type nd = decaylist.size();
for( tPDVector::size_type i = 0; i < nd; i += 3 ) {
tPDPtr pa(decaylist[i]), pb(decaylist[i + 1]), pc(decaylist[i + 2]);
if( pb->id() == id ) swap(pa, pb);
if( pc->id() == id ) swap(pa, pc);
//vertices are defined with all particles incoming
if( pb->CC() ) pb = pb->CC();
if( pc->CC() ) pc = pc->CC();
decays.push_back(TwoBodyPrototype(inpart,make_pair(pb,pc),vertex));
}
return decays;
}
vector<TBDiagram> ThreeBodyDecayConstructor::
expandPrototype(TwoBodyPrototype proto, VertexBasePtr vertex,unsigned int list) {
vector<TBDiagram> decays;
if( vertex->getNpoint() != 3 ) return decays;
// loop over the outgoing particles
for(unsigned int ix=0;ix<2;++ix) {
tPDPtr dec = proto.outgoing.first ;
tPDPtr other = proto.outgoing.second;
if(ix==1) swap(dec,other);
int id = dec->id();
if( !vertex->incoming(id) ) continue;
tPDVector decaylist = vertex->search(list, id);
tPDVector::size_type nd = decaylist.size();
for( tPDVector::size_type i = 0; i < nd; i += 3 ) {
tPDPtr pa(decaylist[i]), pb(decaylist[i + 1]), pc(decaylist[i + 2]);
if( pb->id() == id ) swap(pa, pb);
if( pc->id() == id ) swap(pa, pc);
//vertices are defined with all particles incoming
if( pb->CC() ) pb = pb->CC();
if( pc->CC() ) pc = pc->CC();
// create the three body diagram
TBDiagram diag(proto.incoming->id(), other->id(),
make_pair(pb->id(),pc->id()));
diag.intermediate = pa;
diag.vertices = make_pair(proto.vertex,vertex);
diag.colourFlow = vector<CFPair>(1,make_pair(1,1.));
diag.largeNcColourFlow = vector<CFPair>(1,make_pair(1,1.));
decays.push_back(diag);
}
}
return decays;
}
GeneralThreeBodyDecayerPtr ThreeBodyDecayConstructor::
createDecayer(const vector<TBDiagram> & diagrams, bool inter) const {
if(diagrams.empty()) return GeneralThreeBodyDecayerPtr();
// extract the external particles for the process
PDPtr incoming = getParticleData(diagrams[0].incoming);
// outgoing particles
OrderedParticles outgoing;
outgoing.insert(getParticleData(diagrams[0].outgoing ));
outgoing.insert(getParticleData(diagrams[0].outgoingPair.first ));
outgoing.insert(getParticleData(diagrams[0].outgoingPair.second));
// create the object
string objectname ("/Herwig/Decays/");
string classname = DecayerClassName(incoming, outgoing, objectname);
if(classname=="") return GeneralThreeBodyDecayerPtr();
GeneralThreeBodyDecayerPtr decayer =
dynamic_ptr_cast<GeneralThreeBodyDecayerPtr>
(generator()->preinitCreate(classname, objectname));
unsigned int ncf(0);
pair<vector<DVector>, vector<DVector> >
cfactors = getColourFactors(incoming,outgoing,diagrams,ncf);
decayer->setDecayInfo(incoming,vector<PDPtr>(outgoing.begin(),outgoing.end()),
diagrams,cfactors.first,cfactors.second,ncf);
// set decayer options from base class
setDecayerInterfaces(objectname);
// set the width option
ostringstream value;
value << _widthopt;
generator()->preinitInterface(objectname, "WidthOption", "set", value.str());
// set the intermediates option
ostringstream value2;
value2 << inter;
generator()->preinitInterface(objectname, "GenerateIntermediates", "set",
value2.str());
// initialize the decayer
decayer->init();
// return the decayer
return decayer;
}
string ThreeBodyDecayConstructor::
DecayerClassName(tcPDPtr incoming, const OrderedParticles & outgoing,
string & objname) const {
string classname("Herwig::");
// spins of the outgoing particles
unsigned int ns(0),nf(0),nv(0);
objname += incoming->PDGName() + "2";
for(OrderedParticles::const_iterator it=outgoing.begin();
it!=outgoing.end();++it) {
if ((**it).iSpin()==PDT::Spin0 ) ++ns;
else if((**it).iSpin()==PDT::Spin1Half) ++nf;
else if((**it).iSpin()==PDT::Spin1 ) ++nv;
objname += (**it).PDGName();
}
objname += "Decayer";
if(incoming->iSpin()==PDT::Spin0) {
if(ns==1&&nf==2) classname += "StoSFFDecayer";
else if(nf==2&&nv==1) classname += "StoFFVDecayer";
else classname = "";
}
else if(incoming->iSpin()==PDT::Spin1Half) {
if(nf==3) classname += "FtoFFFDecayer";
else if(nf==1&&nv==2) classname += "FtoFVVDecayer";
else classname = "";
}
else if(incoming->iSpin()==PDT::Spin1) {
if(nf==2&&nv==1) classname += "VtoFFVDecayer";
else classname = "";
}
else {
classname="";
}
return classname;
}
void ThreeBodyDecayConstructor::
createDecayMode(const vector<TBDiagram> & diagrams, bool inter) {
// incoming particle
tPDPtr inpart = getParticleData(diagrams[0].incoming);
// outgoing particles
OrderedParticles outgoing;
outgoing.insert(getParticleData(diagrams[0].outgoing));
outgoing.insert(getParticleData(diagrams[0].outgoingPair.first ));
outgoing.insert(getParticleData(diagrams[0].outgoingPair.second));
// incoming particle is now unstable
inpart->stable(false);
// construct the tag for the decay mode
string tag = inpart->name() + "->";
unsigned int iprod=0;
for(OrderedParticles::const_iterator it = outgoing.begin();
it != outgoing.end(); ++it) {
++iprod;
tag += (**it).name();
if(iprod != 3) tag += ",";
}
tag += ";";
tDMPtr dm = generator()->findDecayMode(tag);
if( decayConstructor()->disableDecayMode(tag) ) {
// If mode alread exists, ie has been read from file,
// disable it
if( dm ) {
generator()->preinitInterface(dm, "BranchingRatio", "set", "0.0");
generator()->preinitInterface(dm, "OnOff", "set", "Off");
}
return;
}
// create mode if needed
if( createDecayModes() && (!dm || inpart->id() == ParticleID::h0) ) {
// create the decayer
GeneralThreeBodyDecayerPtr decayer = createDecayer(diagrams,inter);
if(!decayer) {
//cerr << "Can't create the decayer for " << tag
//<< " so mode not created\n";
return;
}
tDMPtr ndm = generator()->preinitCreateDecayMode(tag);
if(ndm) {
generator()->preinitInterface(ndm, "Decayer", "set",
decayer->fullName());
generator()->preinitInterface(ndm, "OnOff", "set", "1");
OrderedParticles::const_iterator pit=outgoing.begin();
tPDPtr pa = *pit; ++pit;
tPDPtr pb = *pit; ++pit;
tPDPtr pc = *pit;
Energy width =
decayer->partialWidth(make_pair(inpart,inpart->mass()),
make_pair(pa,pa->mass()) ,
make_pair(pb,pb->mass()) ,
make_pair(pc,pc->mass()));
setBranchingRatio(ndm, width);
}
else
throw NBodyDecayConstructorError()
<< "ThreeBodyDecayConstructor::createDecayMode - Needed to create "
<< "new decaymode but one could not be created for the tag "
<< tag << Exception::warning;
}
else if( dm ) {
if((dm->decayer()->fullName()).find("Mambo") != string::npos) {
// create the decayer
GeneralThreeBodyDecayerPtr decayer = createDecayer(diagrams,inter);
if(!decayer) {
cerr << "Can't create the decayer for " << dm->tag()
<< " so decays by phase-space\n";
return;
}
generator()->preinitInterface(dm, "Decayer", "set",
decayer->fullName());
}
}
//update CC mode if it exists
if( inpart->CC() )
inpart->CC()->synchronize();
}
pair<vector<DVector>,vector<DVector> >
ThreeBodyDecayConstructor::
getColourFactors(tcPDPtr incoming, const OrderedParticles & outgoing,
const vector<TBDiagram> & diagrams,
unsigned int & ncf) const {
string name = incoming->PDGName() + "->";
vector<int> sng,trip,atrip,oct;
unsigned int iloc(0);
for(OrderedParticles::const_iterator it = outgoing.begin();
it != outgoing.end();++it) {
name += (**it).PDGName() + " ";
if ((**it).iColour() == PDT::Colour0 ) sng.push_back(iloc) ;
else if((**it).iColour() == PDT::Colour3 ) trip.push_back(iloc) ;
else if((**it).iColour() == PDT::Colour3bar ) atrip.push_back(iloc);
else if((**it).iColour() == PDT::Colour8 ) oct.push_back(iloc) ;
++iloc;
}
pair<vector<DVector>,vector<DVector> > output;
// colour neutral decaying particle
if ( incoming->iColour() == PDT::Colour0) {
// options are all neutral or triplet/antitriplet+ neutral
if(sng.size()==3) {
ncf = 1;
output.first = vector<DVector>(1,DVector(1,1.));
output.second = vector<DVector>(1,DVector(1,1.));
}
else if(sng.size()==1&&trip.size()==1&&atrip.size()==1) {
ncf = 1;
output.first = vector<DVector>(1,DVector(1,3.));
output.second = vector<DVector>(1,DVector(1,3.));
}
else if(trip.size()==1&&atrip.size()==1&&oct.size()==1) {
ncf = 1;
output.first = vector<DVector>(1,DVector(1,4.));
output.second = vector<DVector>(1,DVector(1,4.));
}
else throw Exception() << "Unknown colour flow structure for "
<< name << Exception::runerror;
}
// colour triplet decaying particle
else if( incoming->iColour() == PDT::Colour3) {
if(sng.size()==2&&trip.size()==1) {
ncf = 1;
output.first = vector<DVector>(1,DVector(1,1.));
output.second = vector<DVector>(1,DVector(1,1.));
}
else if(trip.size()==2&&atrip.size()==1) {
ncf = 2;
output.first.resize(2,DVector(2,0.));
output.first[0][0] = 3.; output.first[0][1] = 1.;
output.first[1][0] = 1.; output.first[1][1] = 3.;
output.second.resize(2,DVector(2,0.));
output.second[0][0] = 3.; output.second[1][1] = 3.;
// sort out the contribution of the different diagrams to the colour
// flows
for(unsigned int ix=0;ix<diagrams.size();++ix) {
// colour singlet intermediate
if(diagrams[ix].intermediate->iColour()==PDT::Colour0) {
if(diagrams[ix].channelType==trip[0]) {
diagrams[ix]. colourFlow = vector<CFPair>(1,make_pair(1,1.));
diagrams[ix].largeNcColourFlow = vector<CFPair>(1,make_pair(1,1.));
}
else {
diagrams[ix].colourFlow = vector<CFPair>(1,make_pair(2,1.));
diagrams[ix].largeNcColourFlow = vector<CFPair>(1,make_pair(2,1.));
}
}
// colour octet intermediate
else if(diagrams[ix].intermediate->iColour()==PDT::Colour8) {
if(diagrams[ix].channelType==trip[0]) {
vector<CFPair> flow(1,make_pair(2, 0.5 ));
diagrams[ix].largeNcColourFlow = flow;
flow.push_back( make_pair(1,-1./6.));
diagrams[ix].colourFlow=flow;
}
else {
vector<CFPair> flow(1,make_pair(1, 0.5 ));
diagrams[ix].largeNcColourFlow = flow;
flow.push_back( make_pair(2,-1./6.));
diagrams[ix].colourFlow=flow;
}
}
else throw Exception() << "Unknown colour for the intermediate in "
<< "triplet -> triplet triplet antitriplet in "
<< "ThreeBodyDecayConstructor::getColourFactors()"
<< Exception::runerror;
}
}
else throw Exception() << "Unknown colour flow structure for "
<< name << Exception::runerror;
}
// colour antitriplet decayign particle
else if( incoming->iColour() == PDT::Colour3bar) {
if(sng.size()==2&&atrip.size()==1) {
ncf = 1;
output.first = vector<DVector>(1,DVector(1,1.));
output.second = vector<DVector>(1,DVector(1,1.));
}
else throw Exception() << "Unknown colour flow structure for "
<< name << Exception::runerror;
}
else if( incoming->iColour() == PDT::Colour8) {
// triplet antitriplet
if(trip.size() == 1 && atrip.size() == 1 && sng.size() == 1) {
ncf = 1;
output.first = vector<DVector>(1,DVector(1,0.5));
output.second = vector<DVector>(1,DVector(1,0.5));
}
else throw Exception() << "Unknown colour flow structure for "
<< name << Exception::runerror;
}
return output;
}
void ThreeBodyDecayConstructor::doinit() {
NBodyDecayConstructorBase::doinit();
if(!_removeOnShell)
generator()->log() << "Warning: Including diagrams with on-shell "
<< "intermediates in three-body BSM decays, this"
<< " can lead to double counting and is not"
<< " recommended unless you really know what you are doing\n"
<< "This can be switched off using\n set "
<< fullName() << ":RemoveOnShell Yes\n";
}
diff --git a/Models/General/ThreeBodyDecayConstructor.h b/Models/General/ThreeBodyDecayConstructor.h
--- a/Models/General/ThreeBodyDecayConstructor.h
+++ b/Models/General/ThreeBodyDecayConstructor.h
@@ -1,260 +1,265 @@
// -*- C++ -*-
#ifndef HERWIG_ThreeBodyDecayConstructor_H
#define HERWIG_ThreeBodyDecayConstructor_H
//
// This is the declaration of the ThreeBodyDecayConstructor class.
//
#include "NBodyDecayConstructorBase.h"
#include "ThePEG/Helicity/Vertex/VertexBase.h"
#include "TBDiagram.h"
#include "Herwig++/Decay/General/GeneralThreeBodyDecayer.fh"
namespace Herwig {
using namespace ThePEG;
using Helicity::VertexType;
using Helicity::VertexBasePtr;
/**
* A two body decay mode which is a prototype for the
* three body mode
*/
struct TwoBodyPrototype {
/**
* Constructor
*/
TwoBodyPrototype(tPDPtr in, tPDPair out, VertexBasePtr v) :
incoming(in), outgoing(out), vertex(v) {}
/**
* Incoming particle
*/
tPDPtr incoming;
/**
* Outgoing particles
*/
tPDPair outgoing;
/**
* The vertex for the interaction
*/
VertexBasePtr vertex;
};
/**
* The ThreeBodyDecayConstructor class inherits from the dummy base class
* NBodyDecayConstructorBase and implements the necessary functions in
* order to create the 3 body decaymodes for a given set of vertices
* stored in a Model class.
*
* @see \ref ThreeBodyDecayConstructorInterfaces "The interfaces"
* defined for ThreeBodyDecayConstructor.
* @see NBodyDecayConstructor
*/
class ThreeBodyDecayConstructor: public NBodyDecayConstructorBase {
public:
/**
* The default constructor.
*/
inline ThreeBodyDecayConstructor() :
- _removeOnShell(true), _interopt(0), _widthopt(1),
+ _removeOnShell(true), _includeTopOnShell(false), _interopt(0), _widthopt(1),
_minReleaseFraction(1e-3) {}
/**
* Function used to determine allowed decaymodes, to be implemented
* in derived class.
*@param part vector of ParticleData pointers containing particles in model
*/
virtual void DecayList(const vector<PDPtr> & part);
/**
* Number of outgoing lines. Required for correct ordering.
*/
virtual unsigned int numBodies() const { return 3; }
protected:
/**
* Create the two body prototypes for the decays
* @param inpart Incoming particle
* @param vert The vertex to create decays for
* @param ilist Which list to search
* @return A vector a decay modes
*/
vector<TwoBodyPrototype> createPrototypes(tPDPtr inpart, VertexBasePtr vert,
unsigned int ilist);
/**
* Expand the two body prototype to get the possible
* threebody diagrams
* @param proto The two body prototype
* @param vert The vertex to create decays for
* @param ilist Which list to search
*/
vector<TBDiagram> expandPrototype(TwoBodyPrototype proto, VertexBasePtr vert,
unsigned int ilist);
/**
* Create the decayer
* @param diagrams The diagrams for the decay
* @param inter Option for intermediates
*/
GeneralThreeBodyDecayerPtr createDecayer(const vector<TBDiagram> & diagrams,
bool inter) const;
/**
* Contruct the classname and object name for the Decayer
* @param incoming The incoming particle
* @param outgoing The decay products
* @param objname a string containing the default path of the Decayer object
*/
string DecayerClassName(tcPDPtr incoming, const OrderedParticles & outgoing,
string & objname) const;
/**
* Create the DecayMode from the diagrams
* @param diagrams The diagrams
* @param inter Option for intermediates
*/
void createDecayMode(const vector<TBDiagram> & diagrams, bool inter);
/**
* Get the correct colour factor matrix.
* @param incoming The incoming particle
* @param outgoing The outgoing particles
* @param diagrams The diagrams
* @param ncf Set the number of colourflows.
*/
pair<vector<DVector>,vector<DVector> >
getColourFactors(tcPDPtr incoming, const OrderedParticles & outgoing,
const vector<TBDiagram> & diagrams,
unsigned int & ncf) const;
public:
/** @name Functions used by the persistent I/O system. */
//@{
/**
* Function used to write out object persistently.
* @param os the persistent output stream written to.
*/
void persistentOutput(PersistentOStream & os) const;
/**
* Function used to read in object persistently.
* @param is the persistent input stream read from.
* @param version the version number of the object when written.
*/
void persistentInput(PersistentIStream & is, int version);
//@}
/**
* The standard Init function used to initialize the interfaces.
* Called exactly once for each class by the class description system
* before the main function starts or
* when this class is dynamically loaded.
*/
static void Init();
protected:
/** @name Clone Methods. */
//@{
/**
* Make a simple clone of this object.
* @return a pointer to the new object.
*/
virtual IBPtr clone() const;
/** Make a clone of this object, possibly modifying the cloned object
* to make it sane.
* @return a pointer to the new object.
*/
virtual IBPtr fullclone() const;
//@}
protected:
/** @name Standard Interfaced functions. */
//@{
/**
* Initialize this object after the setup phase before saving an
* EventGenerator to disk.
* @throws InitException if object could not be initialized properly.
*/
virtual void doinit();
//@}
private:
/**
* The static object used to initialize the description of this class.
* Indicates that this is a concrete class with persistent data.
*/
static ClassDescription<ThreeBodyDecayConstructor> initThreeBodyDecayConstructor;
/**
* The assignment operator is private and must never be called.
* In fact, it should not even be implemented.
*/
ThreeBodyDecayConstructor & operator=(const ThreeBodyDecayConstructor &);
private:
/**
* Whether or not to remove on-shell diagrams
*/
bool _removeOnShell;
/**
+ * Include on-shell for \f$t\to b W\f$
+ */
+ bool _includeTopOnShell;
+
+ /**
* Option for the inclusion of intermediates
*/
unsigned int _interopt;
/**
* How to treat the widths of the intermediate particles
*/
unsigned int _widthopt;
/**
* The minimum energy release for a three-body decay as a
* fraction of the parent mass
*/
double _minReleaseFraction;
};
}
#include "ThePEG/Utilities/ClassTraits.h"
namespace ThePEG {
/** @cond TRAITSPECIALIZATIONS */
/** This template specialization informs ThePEG about the
* base classes of ThreeBodyDecayConstructor. */
template <>
struct BaseClassTrait<Herwig::ThreeBodyDecayConstructor,1> {
/** Typedef of the first base class of ThreeBodyDecayConstructor. */
typedef Herwig::NBodyDecayConstructorBase NthBase;
};
/** This template specialization informs ThePEG about the name of
* the ThreeBodyDecayConstructor class and the shared object where it is defined. */
template <>
struct ClassTraits<Herwig::ThreeBodyDecayConstructor>
: public ClassTraitsBase<Herwig::ThreeBodyDecayConstructor> {
/** Return a platform-independent class name */
static string className() { return "Herwig::ThreeBodyDecayConstructor"; }
};
/** @endcond */
}
#endif /* HERWIG_ThreeBodyDecayConstructor_H */
diff --git a/Models/Susy/SusyBase.cc b/Models/Susy/SusyBase.cc
--- a/Models/Susy/SusyBase.cc
+++ b/Models/Susy/SusyBase.cc
@@ -1,600 +1,645 @@
// -*- C++ -*-
//
// SusyBase.cc is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2007 The Herwig Collaboration
//
// Herwig++ is licenced under version 2 of the GPL, see COPYING for details.
// Please respect the MCnet academic guidelines, see GUIDELINES for details.
//
//
// This is the implementation of the non-inlined, non-templated member
// functions of the SusyBase class.
//
#include "SusyBase.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
+#include "ThePEG/Interface/Switch.h"
#include "ThePEG/Interface/Reference.h"
#include "ThePEG/Interface/Parameter.h"
#include "ThePEG/Repository/Repository.h"
#include "ThePEG/Utilities/StringUtils.h"
#include "ThePEG/Repository/CurrentGenerator.h"
#include "ThePEG/PDT/EnumParticles.h"
#include "ThePEG/PDT/MassGenerator.h"
#include "ThePEG/PDT/WidthGenerator.h"
#include "ThePEG/PDT/DecayMode.h"
using namespace Herwig;
-SusyBase::SusyBase() : _readFile(false),_tanbeta(0), _mu(ZERO),
+SusyBase::SusyBase() : _readFile(false), _topModesFromFile(false),
+ _tolerance(1e-6),
+ _tanbeta(0), _mu(ZERO),
theMone(ZERO), theMtwo(ZERO),
theMthree(ZERO) {}
IBPtr SusyBase::clone() const {
return new_ptr(*this);
}
IBPtr SusyBase::fullclone() const {
return new_ptr(*this);
}
void SusyBase::doinit() {
addVertex(theWSFSFVertex);
addVertex(theNFSFVertex);
addVertex(theGFSFVertex);
addVertex(vertexHSS());
addVertex(theCFSFVertex);
addVertex(theGSFSFVertex);
addVertex(theGGSQSQVertex);
addVertex(theGSGSGVertex);
addVertex(theNNZVertex);
addVertex(theCCZVertex);
addVertex(theCNWVertex);
addVertex(vertexGOGOH());
addVertex(vertexWHH());
addVertex(vertexHHH());
StandardModel::doinit();
//create fresh BSM info file so it can be appended to later
//when decaymodes have been created
string name = CurrentGenerator::current().filename() +
string("-BSMModelInfo.out");
ofstream dummy(name.c_str());
}
void SusyBase::persistentOutput(PersistentOStream & os) const {
- os << _readFile << theNMix << theUMix << theVMix << theWSFSFVertex
+ os << _readFile << _topModesFromFile
+ << theNMix << theUMix << theVMix << theWSFSFVertex
<< theNFSFVertex << theGFSFVertex << theHSFSFVertex << theCFSFVertex
<< theGSFSFVertex << theGGSQSQVertex
<< theGSGSGVertex << theNNZVertex
<< theCCZVertex << theCNWVertex << theSSFFHVertex << theGOGOHVertex
<< theSSWWHVertex << theWHHVertex << theHHHVertex << theSSHGGVertex
<< _tanbeta << ounit(_mu,GeV)
- << ounit(theMone,GeV) << ounit(theMtwo,GeV) << ounit(theMthree,GeV);
+ << ounit(theMone,GeV) << ounit(theMtwo,GeV) << ounit(theMthree,GeV)
+ << _tolerance;
}
void SusyBase::persistentInput(PersistentIStream & is, int) {
- is >> _readFile >> theNMix >> theUMix >> theVMix >> theWSFSFVertex
+ is >> _readFile >> _topModesFromFile
+ >> theNMix >> theUMix >> theVMix >> theWSFSFVertex
>> theNFSFVertex >> theGFSFVertex >> theHSFSFVertex >> theCFSFVertex
>> theGSFSFVertex >> theGGSQSQVertex >> theGSGSGVertex
>> theNNZVertex >> theCCZVertex >> theCNWVertex
>> theSSFFHVertex >> theGOGOHVertex >> theSSWWHVertex >> theWHHVertex
>> theHHHVertex >> theSSHGGVertex
>> _tanbeta >> iunit(_mu,GeV)
- >> iunit(theMone,GeV) >> iunit(theMtwo,GeV) >> iunit(theMthree,GeV);
+ >> iunit(theMone,GeV) >> iunit(theMtwo,GeV) >> iunit(theMthree,GeV)
+ >> _tolerance;
}
ClassDescription<SusyBase> SusyBase::initSusyBase;
// Definition of the static class description member.
void SusyBase::Init() {
static ClassDocumentation<SusyBase> documentation
("This is the base class for any SUSY model.");
+ static Switch<SusyBase,bool> interfaceTopModes
+ ("TopModes",
+ "Whether ro use the Herwig++ SM top decays or those from the SLHA file",
+ &SusyBase::_topModesFromFile, false, false, false);
+ static SwitchOption interfaceTopModesFile
+ (interfaceTopModes,
+ "File",
+ "Take the modes from the files",
+ true);
+ static SwitchOption interfaceTopModesHerwig
+ (interfaceTopModes,
+ "Herwig",
+ "Use the SM ones",
+ false);
+
static Reference<SusyBase,Helicity::AbstractVSSVertex> interfaceVertexWSS
("Vertex/WSFSF",
"Reference to Susy W SF SF vertex",
&SusyBase::theWSFSFVertex, false, false, true, false);
static Reference<SusyBase,Helicity::AbstractFFSVertex> interfaceVertexNFSF
("Vertex/NFSF",
"Reference to the neutralino-fermion-sfermion vertex",
&SusyBase::theNFSFVertex, false, false, true, false);
static Reference<SusyBase,Helicity::AbstractFFSVertex> interfaceVertexGFSF
("Vertex/GFSF",
"Reference to the gluino-fermion-sfermion vertex",
&SusyBase::theGFSFVertex, false, false, true, false);
static Reference<SusyBase,Helicity::AbstractSSSVertex> interfaceVertexHSFSF
("Vertex/HSFSF",
"Reference to the Higgs-fermion-sfermion vertex",
&SusyBase::theHSFSFVertex, false, false, true, false);
static Reference<SusyBase,Helicity::AbstractFFSVertex> interfaceVertexCFSF
("Vertex/CFSF",
"Reference to the chargino-fermion-sfermion vertex",
&SusyBase::theCFSFVertex, false, false, true, false);
static Reference<SusyBase,Helicity::AbstractVSSVertex> interfaceVertexGSFSF
("Vertex/GSFSF",
"Reference to the gluon-sfermion-sfermion vertex",
&SusyBase::theGSFSFVertex, false, false, true, false);
static Reference<SusyBase,Helicity::AbstractVVSSVertex> interfaceVertexGGSS
("Vertex/GGSQSQ",
"Reference to the gluon-gluon-squark-squark vertex",
&SusyBase::theGGSQSQVertex, false, false, true, false);
static Reference<SusyBase,Helicity::AbstractFFVVertex> interfaceVertexGSGSG
("Vertex/GSGSG",
"Reference to the gluon-gluino-gluino vertex",
&SusyBase::theGSGSGVertex, false, false, true, false);
static Reference<SusyBase,Helicity::AbstractFFVVertex> interfaceVertexNNZ
("Vertex/NNZ",
"Reference to Z-~chi_i0-~chi_i0 vertex",
&SusyBase::theNNZVertex, false, false, true, false);
static Reference<SusyBase,Helicity::AbstractFFVVertex> interfaceVertexCCZ
("Vertex/CCZ",
"Reference to ~chi_i+-~chi_i-Z vertex",
&SusyBase::theCCZVertex, false, false, true, false);
static Reference<SusyBase,Helicity::AbstractFFVVertex> interfaceVertexCNW
("Vertex/CNW",
"Reference to ~chi_i+-chi_i0-W vertex",
&SusyBase::theCNWVertex, false, false, true, false);
static Reference<SusyBase,Helicity::AbstractFFSVertex> interfaceVertexSSFFH
("Vertex/SSFFH",
"Reference to the fermion-antifermion-higgs vertex",
&SusyBase::theSSFFHVertex, false, false, true, false);
static Reference<SusyBase,Helicity::AbstractFFSVertex> interfaceVertexGOGOH
("Vertex/GOGOH",
"Reference to the gaugino-gaugino-higgs vertex",
&SusyBase::theGOGOHVertex, false, false, true, false);
static Reference<SusyBase,Helicity::AbstractVVSVertex> interfaceVertexWWH
("Vertex/SSWWH",
"Reference to the boson-boson-higgs vertex",
&SusyBase::theSSWWHVertex, false, false, true, false);
static Reference<SusyBase,Helicity::AbstractVSSVertex> interfaceVertexWHH
("Vertex/SSWHH",
"Reference to Susy WHHVertex",
&SusyBase::theWHHVertex, false, false, true, false);
static Reference<SusyBase,Helicity::AbstractSSSVertex> interfaceVertexHHH
("Vertex/HHH",
"Triple higgs coupling",
&SusyBase::theHHHVertex, false, false, true, false);
static Reference<SusyBase,Helicity::AbstractVVSVertex> interfaceVertexSSHGG
("Vertex/SSHGG",
"The coupling of a higgs to 2 gluons",
&SusyBase::theSSHGGVertex, false, false, true, false);
+ static Parameter<SusyBase,double> interfaceBRTolerance
+ ("BRTolerance",
+ "Tolerance for the sum of branching ratios to be difference from one.",
+ &SusyBase::_tolerance, 1e-6, 1e-8, 0.01,
+ false, false, Interface::limited);
+
}
void SusyBase::readSetup(istream & is) {
string filename = dynamic_ptr_cast<istringstream*>(&is)->str();
if(_readFile)
throw SetupException()
<< "A second SLHA file " << filename << " has been opened."
<< "This is probably unintended and as it can cause crashes"
<< " and other unpredictable behaviour it is not allowed."
<< Exception::runerror;
ifstream file(filename.c_str());
if( !file ) throw SetupException()
<< "SusyBase::readSetup - An error occurred in opening the "
<< "spectrum file \"" << filename << "\". A SUSY model cannot be "
<< "run without this."
<< Exception::runerror;
//Before reading the spectrum/decay files the SM higgs
//decay modes, mass and width generators need to be turned off.
PDPtr h0 = getParticleData(ParticleID::h0);
h0->widthGenerator(WidthGeneratorPtr());
h0->massGenerator(MassGenPtr());
DecaySet::const_iterator dit = h0->decayModes().begin();
DecaySet::const_iterator dend = h0->decayModes().end();
for( ; dit != dend; ++dit ) {
const InterfaceBase * ifb =
BaseRepository::FindInterface(*dit, "BranchingRatio");
ifb->exec(**dit, "set", "0.0");
ifb = BaseRepository::FindInterface(*dit, "OnOff");
ifb->exec(**dit, "set", "Off");
}
-
+ // if taking the top modes from the file
+ // delete the SM stuff
+ if(_topModesFromFile) {
+ PDPtr top = getParticleData(ParticleID::t);
+ top->widthGenerator(WidthGeneratorPtr());
+ top->massGenerator(MassGenPtr());
+ DecaySet::const_iterator dit = top->decayModes().begin();
+ DecaySet::const_iterator dend = top->decayModes().end();
+ for( ; dit != dend; ++dit ) {
+ const InterfaceBase * ifb =
+ BaseRepository::FindInterface(*dit, "BranchingRatio");
+ ifb->exec(**dit, "set", "0.0");
+ ifb = BaseRepository::FindInterface(*dit, "OnOff");
+ ifb->exec(**dit, "set", "Off");
+ }
+
+ }
string line;
//function pointer for putting all characters to lower case.
int (*pf)(int) = tolower;
//Start to read in the file
while(getline(file, line)) {
// ignore comment lines
if(line[0] == '#') continue;
// make everything lower case
transform(line.begin(), line.end(), line.begin(), pf);
// start of a block
if(line.find("block") == 0) {
string name = StringUtils::car(StringUtils::cdr(line), " #");
// mixing matrix
if((name.find("mix") != string::npos &&
name.find("hmix") != 0)||
name.find("au") == 0||name.find("ad") == 0||
name.find("ae") == 0 ) {
unsigned int row(0),col(0);
MixingVector vals = readMatrix(file,row,col);
_mixings[name] = make_pair(make_pair(row,col),vals);
}
else if( name.find("info") == string::npos)
readBlock(file,name);
}
// decays
else if( line.find("decay") == 0 )
readDecay(file, line);
}
// extract the relevant parameters
extractParameters();
// create the mixing matrices we need
createMixingMatrices();
// set the masses, this has to be done after the
// mixing matrices have been created
resetRepositoryMasses();
// have now read the file
_readFile=true;
}
void SusyBase::readBlock(ifstream & ifs,string name) {
if(!ifs)
throw SetupException()
<< "SusyBase::readBlock() - The input stream is in a bad state"
<< Exception::runerror;
string line;
ParamMap store;
// special for the alpha block
if(name.find("alpha") == 0 ) {
double alpha;
getline(ifs, line);
istringstream iss(line);
iss >> alpha;
store.insert(make_pair(1,alpha));
}
else {
while(getline(ifs, line)) {
if(line[0] == '#') {
if( ifs.peek() == 'D' || ifs.peek() == 'B' ||
ifs.peek() == 'd' || ifs.peek() == 'b' ) break;
else continue;
}
istringstream is(line);
long index;
double value;
is >> index >> value;
store.insert(make_pair(index, value));
if(ifs.peek() == 'B' || ifs.peek() == 'D' ||
ifs.peek() == 'b' || ifs.peek() == 'd' ||
ifs.peek() == '#') break;
}
}
_parameters[name]=store;
}
void SusyBase::readDecay(ifstream & ifs,
string decay) const{
if(!ifs)
throw SetupException()
<<"SusyBase::readDecay - The input stream is in a bad state";
//if the particle is stable then next line will be the start of a
//new decaymode or a new block so just return if this is found
if( ifs.peek() == 'D' || ifs.peek() == 'B' ||
ifs.peek() == 'd' || ifs.peek() == 'b' ) return;
istringstream iss(decay);
string dummy;
long parent(0);
Energy width(ZERO);
iss >> dummy >> parent >> iunit(width, GeV);
PDPtr inpart = getParticleData(parent);
+ if(!_topModesFromFile&&abs(parent)==ParticleID::t) return;
if(!inpart) {
throw SetupException()
<< "SusyBase::readDecay() - A ParticleData object with the PDG code "
<< parent << " does not exist. " << Exception::runerror;
return;
}
inpart->width(width);
if( width > ZERO ) inpart->cTau(hbarc/width);
inpart->widthCut(5.*width);
string prefix("decaymode " + inpart->name() + "->"), tag(""),line("");
double brsum(0.);
while(getline(ifs, line)) {
if(line[0] == '#') {
if( ifs.peek() == 'D' || ifs.peek() == 'B' ||
ifs.peek() == 'd' || ifs.peek() == 'b' ) break;
else continue;
}
istringstream is(line);
double brat(0.);
unsigned int nda(0),npr(0);
is >> brat >> nda;
brsum += brat;
while( true ) {
long t;
is >> t;
if( is.fail() ) break;
if( t == abs(parent) ) {
throw SetupException()
<< "An error occurred while read a decay of the "
<< inpart->PDGName() << ". One of its products has the same PDG code "
<< "as the parent particle. Please check the SLHA file.\n"
<< Exception::runerror;
}
tcPDPtr p = getParticleData(t);
if( !p ) {
throw SetupException()
<< "SusyBase::readDecay() - An unknown PDG code has been encounterd "
<< "while reading a decay mode. ID: " << t
<< Exception::runerror;
}
else {
++npr;
tag += p->name() + ",";
}
}
if( npr != nda ) {
throw SetupException()
<< "SusyBase::readDecay - While reading a decay of the "
<< inpart->PDGName() << " from an SLHA file, an inconsistency "
<< "between the number of decay products and the value in "
<< "the 'NDA' column was found. Please check if the spectrum "
<< "file is correct.\n"
<< Exception::warning;
}
if( npr > 1 ) {
inpart->stable(false);
tag.replace(tag.size() - 1, 1, ";");
createDecayMode(prefix + tag, brat);
tag.clear();
}
if( ifs.peek() == 'D' || ifs.peek() == 'B' ||
ifs.peek() == 'd' || ifs.peek() == 'b' ) break;
}
- if( abs(brsum - 1.) > 1e-8 ) {
+ if( abs(brsum - 1.) > _tolerance ) {
cerr << "Warning: The total branching ratio for " << inpart->PDGName()
<< " from the spectrum file does not sum to 1. The branching fractions"
<< " will be rescaled.\n";
cerr << setprecision(13) << abs(brsum - 1.) << "\n";
}
}
const MixingVector
SusyBase::readMatrix(ifstream & ifs,
unsigned int & row, unsigned int & col) {
if(!ifs)
throw SetupException()
<< "SusyBase::readMatrix() - The input stream is in a bad state."
<< Exception::runerror;
string line;
unsigned int rowmax(0), colmax(0);
MixingVector values;
while(getline(ifs, line)) {
if(line[0] == '#') {
if( ifs.peek() == 'D' || ifs.peek() == 'B' ||
ifs.peek() == 'd' || ifs.peek() == 'b' ) break;
else continue;
}
istringstream is(line);
unsigned int index1, index2;
double real(0.), imag(0.);
is >> index1 >> index2 >> real >> imag;
values.push_back(MixingElement(index1,index2,Complex(real, imag)));
if(index1 > rowmax) rowmax = index1;
if(index2 > colmax) colmax = index2;
if( ifs.peek() == 'B' || ifs.peek() == 'D' ||
ifs.peek() == 'b' || ifs.peek() == 'd' ) break;
}
col=colmax;
row=rowmax;
return values;
}
void SusyBase::createDecayMode(string tag, double brat) const {
ostringstream cmd;
cmd << tag << string(" ")
<< setprecision(13) << brat << string(" 1 /Herwig/Decays/Mambo");
Repository::exec(cmd.str(), cerr);
}
void SusyBase::createMixingMatrix(MixingMatrixPtr & matrix,
string name, const MixingVector & values,
MatrixSize size) {
matrix = new_ptr(MixingMatrix(size.first,size.second));
for(unsigned int ix=0; ix < values.size(); ++ix)
(*matrix)(values[ix].row-1,values[ix].col-1) = values[ix].value;
if(name == "nmix") {
vector<long> ids(4);
ids[0] = 1000022; ids[1] = 1000023;
ids[2] = 1000025; ids[3] = 1000035;
matrix->setIds(ids);
}
else if(name == "nmnmix") {
vector<long> ids(5);
ids[0] = 1000022; ids[1] = 1000023;
ids[2] = 1000025; ids[3] = 1000035;
ids[4] = 1000045;
matrix->setIds(ids);
}
else if(name == "umix") {
vector<long> ids(2);
ids[0] = 1000024; ids[1] = 1000037;
matrix->setIds(ids);
}
else if(name == "vmix") {
vector<long> ids(2);
ids[0] = 1000024; ids[1] = 1000037;
matrix->setIds(ids);
}
else if(name == "stopmix") {
vector<long> ids(2);
ids[0] = 1000006; ids[1] = 2000006;
matrix->setIds(ids);
}
else if(name == "sbotmix") {
vector<long> ids(2);
ids[0] = 1000005; ids[1] = 2000005;
matrix->setIds(ids);
}
else if(name == "staumix") {
vector<long> ids(2);
ids[0] = 1000015; ids[1] = 2000015;
matrix->setIds(ids);
}
else if(name == "nmhmix") {
vector<long> ids(3);
ids[0] = 25; ids[1] = 35; ids[2] = 45;
matrix->setIds(ids);
}
else if(name == "nmamix") {
vector<long> ids(2);
ids[0] = 36; ids[1] = 46;
matrix->setIds(ids);
}
else
throw SetupException() << "Cannot find correct title for mixing matrix "
<< name << Exception::runerror;
}
void SusyBase::resetRepositoryMasses() {
map<string,ParamMap>::const_iterator fit=_parameters.find("mass");
if(fit==_parameters.end())
throw Exception() << "BLOCK MASS not found in input file"
<< " can't set masses of SUSY particles"
<< Exception::runerror;
ParamMap theMasses = fit->second;
for(ParamMap::iterator it = theMasses.begin(); it != theMasses.end();
++it) {
long id = it->first;
double mass = it->second;
//a negative mass requires an adjustment to the
//associated mixing matrix by a factor of i
if(mass < 0.0) adjustMixingMatrix(id);
PDPtr part = getParticleData(id);
if(!part) throw SetupException()
<< "SusyBase::resetRepositoryMasses() - Particle with PDG code " << id
<< " not found." << Exception::warning;
//Find interface nominal mass interface
const InterfaceBase * ifb = BaseRepository::FindInterface(part, "NominalMass");
ostringstream os;
os << abs(it->second);
ifb->exec(*part, "set", os.str());
}
theMasses.clear();
}
void SusyBase::adjustMixingMatrix(long id) {
//get correct mixing matrix
switch(id) {
case 1000022 :
case 1000023 :
case 1000025 :
case 1000035 :
case 1000045 :
if(theNMix)
theNMix->adjustPhase(id);
else
throw SetupException() << "SusyBase::adjustMixingMatrix - "
<< "The neutralino mixing matrix pointer "
<< "is null!" << Exception::runerror;
break;
case 1000024 :
case 1000037 :
if(theUMix)
theUMix->adjustPhase(id);
else
throw SetupException() << "SusyBase::adjustMixingMatrix - "
<< "The U-Type chargino mixing matrix pointer "
<< "is null!" << Exception::runerror;
if(theVMix)
theVMix->adjustPhase(id);
else
throw SetupException() << "SusyBase::adjustMixingMatrix - "
<< "The V-Type chargino mixing matrix pointer "
<< "is null!" << Exception::runerror;
break;
default :
throw SetupException()
<< "SusyBase::adjustMixingMatrix - Trying to adjust mixing matrix "
<< "phase for a particle that does not have a mixing matrix "
<< "associated with it. " << id << " must have a negative mass in "
<< "the spectrum file, this should only occur for particles that mix."
<< Exception::runerror;
}
}
void SusyBase::createMixingMatrices() {
map<string,pair<MatrixSize, MixingVector > >::const_iterator it;
for(it=_mixings.begin();it!=_mixings.end();++it) {
string name=it->first;
// create the gaugino mixing matrices
if(name == "nmix" || name == "nmnmix" ){
createMixingMatrix(theNMix,name,it->second.second,it->second.first);
}
else if (name == "umix" ) {
createMixingMatrix(theUMix,name,it->second.second,it->second.first);
}
else if (name == "vmix") {
createMixingMatrix(theVMix,name,it->second.second,it->second.first);
}
}
}
void SusyBase::extractParameters(bool checkmodel) {
map<string,ParamMap>::const_iterator pit;
// extract parameters from minpar
pit=_parameters.find("minpar");
if(pit==_parameters.end())
throw Exception() << "BLOCK MINPAR not found in "
<< "SusyBase::extractParameters()"
<< Exception::runerror;
// extract tan beta
ParamMap::const_iterator it = pit->second.find(3);
if(it==pit->second.end())
throw Exception() << "Can't find tan beta in BLOCK MINPAR"
<< Exception::runerror;
_tanbeta=it->second;
// extract parameters from hmix
pit=_parameters.find("hmix");
if(pit==_parameters.end()) {
cerr << "BLOCK HMIX not found setting mu to zero\n";
_mu=ZERO;
}
else {
it = pit->second.find(1);
if(it==pit->second.end()) {
cerr << "mu not found in BLOCK HMIX setting to zero\n";
}
else {
_mu=it->second*GeV;
}
}
pit = _parameters.find("msoft");
if( pit == _parameters.end() )
throw Exception() << "BLOCK MSOFT not found in "
<< "SusyBase::extractParameters()"
<< Exception::runerror;
it = pit->second.find(1);
theMone = it->second*GeV;
it = pit->second.find(2);
theMtwo = it->second*GeV;
it = pit->second.find(3);
theMthree = it->second*GeV;
if(checkmodel) {
throw Exception() << "The SusyBase class should not be used as a "
<< "Model class, use one of the models which inherit"
<< " from it" << Exception::runerror;
}
}
diff --git a/Models/Susy/SusyBase.h b/Models/Susy/SusyBase.h
--- a/Models/Susy/SusyBase.h
+++ b/Models/Susy/SusyBase.h
@@ -1,534 +1,545 @@
// -*- C++ -*-
//
// SusyBase.h is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2007 The Herwig Collaboration
//
// Herwig++ is licenced under version 2 of the GPL, see COPYING for details.
// Please respect the MCnet academic guidelines, see GUIDELINES for details.
//
#ifndef HERWIG_SusyBase_H
#define HERWIG_SusyBase_H
//
// This is the declaration of the SusyBase class.
//
#include "Herwig++/Models/StandardModel/StandardModel.h"
#include "Herwig++/Models/Susy/MixingMatrix.h"
#include "ThePEG/Helicity/Vertex/AbstractVSSVertex.h"
#include "ThePEG/Helicity/Vertex/AbstractSSSVertex.h"
#include "ThePEG/Helicity/Vertex/AbstractVVSSVertex.h"
#include "SusyBase.fh"
namespace Herwig {
using namespace ThePEG;
/*@name Some convenient typedefs. */
//@{
/**
* Map to hold key, parameter pairs.
*/
typedef map<long, double> ParamMap;
//@}
/** \ingroup Models
* This class is designed to be a base class for SUSY models. There is
* an interface to set the name of the spectrum file to read in
* the necessary parameters for a SUSY model.
*
* @see \ref SusyBaseInterfaces "The interfaces"
* defined for SusyBase.
* @see StandardModel
*/
class SusyBase: public StandardModel {
public:
/**
* The default constructor.
*/
SusyBase();
public:
/** @name Access functions. */
//@{
/**
* Value of \f$\tan\beta\f$.
*/
inline double tanBeta() const { return _tanbeta; }
/**
* Value of \f$\mu\f$ parameter.
*/
inline Energy muParameter() const { return _mu; }
/**
* Value of soft breaking mass for the bino
*/
inline Energy softMOne() const { return theMone; }
/**
* Value of soft breaking mass for the wino
*/
inline Energy softMTwo() const { return theMtwo; }
/**
* Value of soft breaking mass for the gluino
*/
inline Energy softMThree() const { return theMthree; }
/**
* The neutralino mixing matrix
*/
inline const MixingMatrixPtr & neutralinoMix() const {
return theNMix;
}
/**
* The U-type chargino mixing matrix
*/
inline const MixingMatrixPtr & charginoUMix() const {
return theUMix;
}
/**
* The V-type chargino mixing matrix
*/
inline const MixingMatrixPtr & charginoVMix() const {
return theVMix;
}
//@}
public:
/** @name Functions used by the persistent I/O system. */
//@{
/**
* Function used to write out object persistently.
* @param os the persistent output stream written to.
*/
void persistentOutput(PersistentOStream & os) const;
/**
* Function used to read in object persistently.
* @param is the persistent input stream read from.
* @param version the version number of the object when written.
*/
void persistentInput(PersistentIStream & is, int version);
//@}
/**
* The standard Init function used to initialize the interfaces.
* Called exactly once for each class by the class description system
* before the main function starts or
* when this class is dynamically loaded.
*/
static void Init();
/**@name Functions to access specific vertices.*/
//@{
/**
* Pointer to the MSSM fermion-antifermion-higgs vertex
*/
virtual inline tAbstractFFSVertexPtr vertexFFH() const {
return theSSFFHVertex;
}
/**
* Pointer to the MSSM double gauge boson-higgs vertex
*/
virtual inline tAbstractVVSVertexPtr vertexWWH() const {
return theSSWWHVertex;
}
/**
* Pointer to the MSSM effective higgs-gluon-gluon vertex
*/
virtual inline tAbstractVVSVertexPtr vertexHGG() const {
return theSSHGGVertex;
}
/**
* Pointer to the electroweak gauge boson Higgs-Higgs vertex.
*/
virtual inline tAbstractVSSVertexPtr vertexWHH() const {
return theWHHVertex;
}
/**
* Pointer to the higgs coupling to a pair of gauginos
*/
virtual inline tAbstractFFSVertexPtr vertexGOGOH() const {
return theGOGOHVertex;
}
/**
* Pointer to the triple higgs vertex
*/
virtual inline tAbstractSSSVertexPtr vertexHHH() const {
return theHHHVertex;
}
/**
* Pointer to higgs-sfermion-sfermion vertex
*/
virtual inline tAbstractSSSVertexPtr vertexHSS() const {
return theHSFSFVertex;
}
//@}
protected:
/**
* Function to read information from a setup file.
* @param is istream object to read file.
*/
virtual void readSetup(istream & is);
private:
/**@name Functions to help file read-in. */
//@{
/**
* Read block from LHA file
* @param ifs input stream containg data
* @param name The name of the block
*/
void readBlock(ifstream & ifs,string name);
/**
* Function to read mixing matrix from LHA file
* @param ifs input stream containg data
* @param row Number of rows
* @param col Number of columns
*/
const MixingVector readMatrix(ifstream & ifs, unsigned int & row,
unsigned int & col);
/**
* Read decaymodes from LHA file
* @param ifs input stream containg data
* @param decay string containing name of parent and value of total width
*/
void readDecay(ifstream & ifs, string decay) const;
/**
* Create a DecayMode object in the repository
* @param tag The tag identifying the decay mode including the prefix
* 'decaymode'
* @param brat Branching ratio of this mode
*/
void createDecayMode(string tag, double brat) const;
protected:
/**
* Create the mixing matrices for the model
*/
virtual void createMixingMatrices();
/**
* Extract the parameters from the input blocks
*/
virtual void extractParameters(bool checkmodel=true);
/**
* Create a object MixingMatrix in the repository
* @param matrix Pointer to the mixing matrix
* @param name Name of the mixing matrix, i.e. nmix, umix...
* @param values Value of each entry in the matrix
* @param size The size of the matrix
*/
void createMixingMatrix(MixingMatrixPtr & matrix, string name,
const MixingVector & values,
MatrixSize size);
/**
* Reset masses in the repository to values read from LHA file.
*/
void resetRepositoryMasses();
/**
* Adjust row of Mixing Matrix if a negative mass occurs in LHA file
* @param id The PDG code of the particle with a negative mass
*/
virtual void adjustMixingMatrix(long id);
//@}
/**
* Access to the mixings and parameters for the inheriting classes
*/
//@{
/**
* Parameter blocks
*/
inline const map<string,ParamMap> & parameters() const {
return _parameters;
}
/**
* Mixing blocks
*/
inline const map<string,pair<MatrixSize,MixingVector> > & mixings() const {
return _mixings;
}
//@}
/**
* Reset neutralino mixing matrix
*/
inline void neutralinoMix(MixingMatrixPtr nm) { theNMix = nm; }
/**
* Reset the U-type chargino mixing matrix
*/
inline void charginoUMix(MixingMatrixPtr um) { theUMix = um; }
/**
* Reset the V-type chargino mixing matrix
*/
inline void charginoVMix(MixingMatrixPtr vm) { theVMix = vm; }
protected:
/** @name Clone Methods. */
//@{
/**
* Make a simple clone of this object.
* @return a pointer to the new object.
*/
virtual IBPtr clone() const;
/** Make a clone of this object, possibly modifying the cloned object
* to make it sane.
* @return a pointer to the new object.
*/
virtual IBPtr fullclone() const;
//@}
protected:
/** @name Standard Interfaced functions. */
//@{
/**
* Initialize this object after the setup phase before saving an
* EventGenerator to disk.
* @throws InitException if object could not be initialized properly.
*/
virtual void doinit();
//@}
private:
/**
* The static object used to initialize the description of this class.
* Indicates that this is a concrete class with persistent data.
*/
static ClassDescription<SusyBase> initSusyBase;
/**
* The assignment operator is private and must never be called.
* In fact, it should not even be implemented.
*/
SusyBase & operator=(const SusyBase &);
private:
/**
* Whether or not the SLHA fiel has been read
*/
bool _readFile;
+ /**
+ * Whether or not to replace the top decay modes with those from
+ * the SLHA files
+ */
+ bool _topModesFromFile;
+
+ /**
+ * Tolerance for branching ratios
+ */
+ double _tolerance;
+
/*
* Storage of the parameters.
*/
//@{
/**
* Parameter blocks
*/
map<string,ParamMap> _parameters;
/**
* Mixing blocks
*/
map<string,pair<MatrixSize, MixingVector> > _mixings;
/**
* \f$\tan\beta\f$
*/
double _tanbeta;
/**
* \f$\mu\f$
*/
Energy _mu;
/**
* The bilinear breaking mass term for the bino
*/
Energy theMone;
/**
* The bilinear breaking mass term for the wino
*/
Energy theMtwo;
/**
* The bilinear breaking mass term for the gluinos
*/
Energy theMthree;
//@}
/**
* Neutralino and Chargino mixing matrices
*/
//@{
/**
* Store pointers to the gaugino mixing matrices
*/
//@{
/**
* The neutralino mixing matrix
*/
MixingMatrixPtr theNMix;
/**
* The \f$U\f$ mixing matrix for the charginos
*/
MixingMatrixPtr theUMix;
/**
* The \f$V\f$ mixing matrix for the charginos
*/
MixingMatrixPtr theVMix;
//@}
/**@name Vertex pointers. */
//@{
/**
* Pointer to the gauge boson sfermion-sfermion vertex
*/
AbstractVSSVertexPtr theWSFSFVertex;
/**
* Pointer to the neutralino-fermion-sfermion vertex
*/
AbstractFFSVertexPtr theNFSFVertex;
/**
* Pointer to the gluino-fermion-sfermion coupling
*/
AbstractFFSVertexPtr theGFSFVertex;
/**
* Pointer to the Higgs-sfermion-sfermion vertex
*/
AbstractSSSVertexPtr theHSFSFVertex;
/**
* Pointer to the \f$\tilde{\chi}^+\f$-fermion-sfermion vertex
*/
AbstractFFSVertexPtr theCFSFVertex;
/**
* Pointer to the gluon-sfermion-sfermion vertex
*/
AbstractVSSVertexPtr theGSFSFVertex;
/**
* Pointer to the gluon-gluon-squark-squark vertex;
*/
AbstractVVSSVertexPtr theGGSQSQVertex;
/**
* Pointer to the gluon-gluino-gluino vertex
*/
AbstractFFVVertexPtr theGSGSGVertex;
/**
* Pointer to the neutralino-neutralino-Z vertex
*/
AbstractFFVVertexPtr theNNZVertex;
/**
* Pointer to the vertex chargino-chargino-Z vertex
*/
AbstractFFVVertexPtr theCCZVertex;
/**
* Pointer to the vertex chargino-neutralino-Z vertex
*/
AbstractFFVVertexPtr theCNWVertex;
/**
* Pointer to the vertex fermion-antifermion-higgs vertex
*/
AbstractFFSVertexPtr theSSFFHVertex;
/**
* Pointer to the vertex gaugino-gaugino-higgs vertex
*/
AbstractFFSVertexPtr theGOGOHVertex;
/**
* Pointer to the vertex for a pair of gauge bosons and higgs
*/
AbstractVVSVertexPtr theSSWWHVertex;
/**
* Pointer to the vertex for a gauge boson and higgs
*/
AbstractVSSVertexPtr theWHHVertex;
/**
* Pointer to triple higgs vertex
*/
AbstractSSSVertexPtr theHHHVertex;
/**
* The effective coupling of the higgs to a pai of gluons in the MSSM
*/
AbstractVVSVertexPtr theSSHGGVertex;
//@}
};
}
#include "ThePEG/Utilities/ClassTraits.h"
namespace ThePEG {
/** @cond TRAITSPECIALIZATIONS */
/** This template specialization informs ThePEG about the
* base classes of SusyBase. */
template <>
struct BaseClassTrait<Herwig::SusyBase,1> {
/** Typedef of the first base class of SusyBase. */
typedef Herwig::StandardModel NthBase;
};
/** This template specialization informs ThePEG about the name of
* the SusyBase class and the shared object where it is defined. */
template <>
struct ClassTraits<Herwig::SusyBase>
: public ClassTraitsBase<Herwig::SusyBase> {
/** Return a platform-independent class name */
static string className() { return "Herwig::SusyBase"; }
/**
* The name of a file containing the dynamic library where the class
* SusyBase is implemented. It may also include several, space-separated,
* libraries if the class SusyBase depends on other classes (base classes
* excepted). In this case the listed libraries will be dynamically
* linked in the order they are specified.
*/
static string library() { return "HwSusy.so"; }
};
/** @endcond */
}
#endif /* HERWIG_SusyBase_H */
diff --git a/PDF/HwRemDecayer.cc b/PDF/HwRemDecayer.cc
--- a/PDF/HwRemDecayer.cc
+++ b/PDF/HwRemDecayer.cc
@@ -1,1097 +1,1129 @@
// -*- C++ -*-
//
// HwRemDecayer.cc is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2007 The Herwig Collaboration
//
// Herwig++ is licenced under version 2 of the GPL, see COPYING for details.
// Please respect the MCnet academic guidelines, see GUIDELINES for details.
//
//
// This is the implementation of the non-inlined, non-templated member
// functions of the HwRemDecayer class.
//
#include "HwRemDecayer.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
#include "ThePEG/Interface/Reference.h"
#include "ThePEG/Interface/Parameter.h"
#include "ThePEG/Interface/Switch.h"
#include "ThePEG/Utilities/UtilityBase.h"
#include "ThePEG/Utilities/SimplePhaseSpace.h"
#include "ThePEG/Utilities/Throw.h"
#include "Herwig++/Shower/ShowerHandler.h"
using namespace Herwig;
+namespace{
+
const bool dbg = false;
-namespace{
+
void reShuffle(Lorentz5Momentum &p1, Lorentz5Momentum &p2, Energy m1, Energy m2){
Lorentz5Momentum ptotal(p1+p2);
ptotal.rescaleMass();
if( ptotal.m() < m1+m2 ) {
if(dbg)
cerr << "Not enough energy to perform reshuffling \n";
throw HwRemDecayer::ExtraSoftScatterVeto();
}
Boost boostv = -ptotal.boostVector();
ptotal.boost(boostv);
p1.boost(boostv);
// set the masses and energies,
p1.setMass(m1);
p1.setE(0.5/ptotal.m()*(ptotal.m2()+sqr(m1)-sqr(m2)));
p1.rescaleRho();
// boost back to the lab
p1.boost(-boostv);
p2.boost(boostv);
// set the masses and energies,
p2.setMass(m2);
p2.setE(0.5/ptotal.m()*(ptotal.m2()+sqr(m2)-sqr(m1)));
p2.rescaleRho();
// boost back to the lab
p2.boost(-boostv);
}
}
void HwRemDecayer::initialize(pair<tRemPPtr, tRemPPtr> rems, tPPair beam, Step & step,
Energy forcedSplitScale) {
// the step
thestep = &step;
// valence content of the hadrons
theContent.first = getHadronContent(beam.first);
theContent.second = getHadronContent(beam.second);
// momentum extracted from the hadrons
theUsed.first = Lorentz5Momentum();
theUsed.second = Lorentz5Momentum();
theMaps.first.clear();
theMaps.second.clear();
theX.first = 0.0;
theX.second = 0.0;
theRems = rems;
_forcedSplitScale = forcedSplitScale;
// check remnants attached to the right hadrons
if( (theRems.first && parent(theRems.first ) != beam.first ) ||
(theRems.second && parent(theRems.second) != beam.second) )
throw Exception() << "Remnant order wrong in "
<< "HwRemDecayer::initialize(...)"
<< Exception::runerror;
return;
}
void HwRemDecayer::split(tPPtr parton, HadronContent & content,
tRemPPtr rem, Lorentz5Momentum & used,
PartnerMap &partners, tcPDFPtr pdf, bool first) {
theBeam = parent(rem);
theBeamData = dynamic_ptr_cast<Ptr<BeamParticleData>::const_pointer>
(theBeam->dataPtr());
-
- if(rem==theRems.first)
- theX.first += parton->momentum().rho()/theBeam->momentum().rho();
- else
- theX.second += parton->momentum().rho()/theBeam->momentum().rho();
-
+ double currentx = parton->momentum().rho()/theBeam->momentum().rho();
double check = rem==theRems.first ? theX.first : theX.second;
-
+ check += currentx;
if(1.0-check < 1e-3) throw ShowerHandler::ExtraScatterVeto();
-
bool anti;
Lorentz5Momentum lastp(parton->momentum());
int lastID(parton->id());
ColinePtr cl;
Energy oldQ(_forcedSplitScale);
_pdf = pdf;
//do nothing if already valence quark
if(first && content.isValenceQuark(parton)) {
//set the extracted value, because otherwise no RemID could be generated.
content.extract(lastID);
// add the particle to the colour partners
partners.push_back(make_pair(parton, tPPtr()));
//set the sign
anti = parton->hasAntiColour();
if(rem==theRems.first) theanti.first = anti;
else theanti.second = anti;
+ // add the x and return
+ if(rem==theRems.first) theX.first += currentx;
+ else theX.second += currentx;
return;
}
//or gluon for secondaries
- else if(!first && lastID == ParticleID::g){
+ else if(!first && lastID == ParticleID::g) {
partners.push_back(make_pair(parton, tPPtr()));
+ // add the x and return
+ if(rem==theRems.first) theX.first += currentx;
+ else theX.second += currentx;
return;
}
// if a sea quark.antiquark forced splitting to a gluon
// Create the new parton with its momentum and parent/child relationship set
PPtr newSea;
if( lastID != ParticleID::g ) {
- newSea = forceSplit(rem, -lastID, oldQ,
- rem==theRems.first ? theX.first : theX.second,
- lastp, used,content);
+ newSea = forceSplit(rem, -lastID, oldQ, currentx, lastp, used,content);
cl = new_ptr(ColourLine());
if(newSea->id() > 0) cl->addColoured(newSea);
else cl->addAntiColoured(newSea);
// if a secondard scatter finished so return
if(!first){
partners.push_back(make_pair(parton, newSea));
+ // add the x and return
+ if(rem==theRems.first) theX.first += currentx;
+ else theX.second += currentx;
return;
}
}
// otherwise evolve back to valence
if( !content.isValenceQuark(parton) ) {
// final valence splitting
- PPtr newValence = forceSplit(rem, 0, oldQ,
- rem==theRems.first ? theX.first : theX.second,
- lastp, used, content);
+ PPtr newValence = forceSplit(rem, 0, oldQ, currentx , lastp, used, content);
// extract from the hadron to allow remnant to be determined
content.extract(newValence->id());
// case of a gluon going into the hard subprocess
if( lastID == ParticleID::g ) {
partners.push_back(make_pair(parton, tPPtr()));
anti = newValence->hasAntiColour();
if(rem==theRems.first) theanti.first = anti;
else theanti.second = anti;
parton->colourLine(!anti)->addColoured(newValence, anti);
+ // add the x and return
+ if(rem==theRems.first) theX.first += currentx;
+ else theX.second += currentx;
return;
}
//The valence quark will always be connected to the sea quark with opposite sign
tcPPtr particle;
if(lastID*newValence->id() < 0){
particle = parton;
partners.push_back(make_pair(newSea, tPPtr()));
}
else {
particle = newSea;
partners.push_back(make_pair(parton, tPPtr()));
}
anti = newValence->hasAntiColour();
if(rem==theRems.first) theanti.first = anti;
else theanti.second = anti;
if(particle->colourLine())
particle->colourLine()->addAntiColoured(newValence);
if(particle->antiColourLine())
- particle->antiColourLine()->addColoured(newValence);
+ particle->antiColourLine()->addColoured(newValence);
}
+ // add the x and return
+ if(rem==theRems.first) theX.first += currentx;
+ else theX.second += currentx;
return;
}
void HwRemDecayer::doSplit(pair<tPPtr, tPPtr> partons, pair<tcPDFPtr, tcPDFPtr> pdfs,
bool first) {
if(theRems.first) {
ParticleVector children=theRems.first->children();
for(unsigned int ix=0;ix<children.size();++ix) {
if(children[ix]->dataPtr()==theRems.first->dataPtr())
theRems.first = dynamic_ptr_cast<RemPPtr>(children[ix]);
}
}
if(theRems.second) {
ParticleVector children=theRems.second->children();
for(unsigned int ix=0;ix<children.size();++ix) {
if(children[ix]->dataPtr()==theRems.second->dataPtr())
theRems.second = dynamic_ptr_cast<RemPPtr>(children[ix]);
}
}
// forced splitting for first parton
if(partons.first->data().coloured()) {
try {
split(partons.first, theContent.first, theRems.first,
theUsed.first, theMaps.first, pdfs.first, first);
}
catch(ShowerHandler::ExtraScatterVeto) {
theX.first -= partons.first->momentum().rho()/
parent(theRems.first)->momentum().rho();
throw ShowerHandler::ExtraScatterVeto();
}
}
// forced splitting for second parton
if(partons.second->data().coloured()) {
- try{
+ try {
split(partons.second, theContent.second, theRems.second,
theUsed.second, theMaps.second, pdfs.second, first);
// additional check for the remnants
// if can't do the rescale veto the emission
if(!first&&partons.first->data().coloured()&&
partons.second->data().coloured()) {
Lorentz5Momentum pnew[2]=
{theRems.first->momentum() - theUsed.first - partons.first->momentum(),
theRems.second->momentum() - theUsed.second - partons.second->momentum()};
pnew[0].setMass(getParticleData(theContent.first.RemID())->constituentMass());
pnew[0].rescaleEnergy();
pnew[1].setMass(getParticleData(theContent.second.RemID())->constituentMass());
pnew[1].rescaleEnergy();
for(unsigned int iy=0; iy<theRems.first->children().size(); ++iy)
pnew[0] += theRems.first->children()[iy]->momentum();
for(unsigned int iy=0; iy<theRems.second->children().size(); ++iy)
pnew[1] += theRems.second->children()[iy]->momentum();
Lorentz5Momentum ptotal=
theRems.first ->momentum()-partons.first ->momentum()+
theRems.second->momentum()-partons.second->momentum();
if(ptotal.m() < (pnew[0].m() + pnew[1].m()) ) {
if(partons.second->id() != ParticleID::g){
if(partons.second==theMaps.second.back().first)
theUsed.second -= theMaps.second.back().second->momentum();
else
theUsed.second -= theMaps.second.back().first->momentum();
-
+
thestep->removeParticle(theMaps.second.back().first);
thestep->removeParticle(theMaps.second.back().second);
}
theMaps.second.pop_back();
throw ShowerHandler::ExtraScatterVeto();
}
}
}
catch(ShowerHandler::ExtraScatterVeto){
if(!partons.first||!partons.second||
!theRems.first||!theRems.second)
throw ShowerHandler::ExtraScatterVeto();
//case of the first forcedSplitting worked fine
theX.first -= partons.first->momentum().rho()/
parent(theRems.first)->momentum().rho();
theX.second -= partons.second->momentum().rho()/
parent(theRems.second)->momentum().rho();
//case of the first interaction
//throw veto immediately, because event get rejected anyway.
if(first) throw ShowerHandler::ExtraScatterVeto();
-
//secondary interactions have to end on a gluon, if parton
//was NOT a gluon, the forced splitting particles must be removed
- if(partons.first->id() != ParticleID::g){
+ if(partons.first->id() != ParticleID::g) {
if(partons.first==theMaps.first.back().first)
theUsed.first -= theMaps.first.back().second->momentum();
else
theUsed.first -= theMaps.first.back().first->momentum();
thestep->removeParticle(theMaps.first.back().first);
thestep->removeParticle(theMaps.first.back().second);
}
theMaps.first.pop_back();
throw ShowerHandler::ExtraScatterVeto();
}
}
+ // veto if not enough energy for extraction
+ if( !first &&(theRems.first ->momentum().e() -
+ partons.first ->momentum().e() < 1.0e-3*MeV ||
+ theRems.second->momentum().e() -
+ partons.second->momentum().e() < 1.0e-3*MeV )) {
+ if(partons.first->id() != ParticleID::g) {
+ if(partons.first==theMaps.first.back().first)
+ theUsed.first -= theMaps.first.back().second->momentum();
+ else
+ theUsed.first -= theMaps.first.back().first->momentum();
+ thestep->removeParticle(theMaps.first.back().first);
+ thestep->removeParticle(theMaps.first.back().second);
+ }
+ theMaps.first.pop_back();
+ if(partons.second->id() != ParticleID::g) {
+ if(partons.second==theMaps.second.back().first)
+ theUsed.second -= theMaps.second.back().second->momentum();
+ else
+ theUsed.second -= theMaps.second.back().first->momentum();
+ thestep->removeParticle(theMaps.second.back().first);
+ thestep->removeParticle(theMaps.second.back().second);
+ }
+ theMaps.second.pop_back();
+ throw ShowerHandler::ExtraScatterVeto();
+ }
}
void HwRemDecayer::mergeColour(tPPtr pold, tPPtr pnew, bool anti) const {
ColinePtr clnew, clold;
//save the corresponding colour lines
clold = pold->colourLine(anti);
clnew = pnew->colourLine(!anti);
assert(clold);
if(clnew){//there is already a colour line (not the final diquark)
if( (clnew->coloured().size() + clnew->antiColoured().size()) > 1 ){
if( (clold->coloured().size() + clold->antiColoured().size()) > 1 ){
//join the colour lines
//I don't use the join method, because potentially only (anti)coloured
//particles belong to one colour line
if(clold!=clnew){//procs are not already connected
while ( !clnew->coloured().empty() ) {
tPPtr p = clnew->coloured()[0];
clnew->removeColoured(p);
clold->addColoured(p);
}
while ( !clnew->antiColoured().empty() ) {
tPPtr p = clnew->antiColoured()[0];
clnew->removeAntiColoured(p);
clold->addAntiColoured(p);
}
}
}else{
//if pold is the only member on it's
//colour line, remove it.
clold->removeColoured(pold, anti);
//and add it to clnew
clnew->addColoured(pold, anti);
}
}else{//pnnew is the only member on it's colour line.
clnew->removeColoured(pnew, !anti);
clold->addColoured(pnew, !anti);
}
}else{//there is no coline at all for pnew
clold->addColoured(pnew, !anti);
}
}
void HwRemDecayer::fixColours(PartnerMap partners, bool anti,
double colourDisrupt) const {
PartnerMap::iterator prev;
tPPtr pnew, pold;
assert(partners.size()>=2);
PartnerMap::iterator it=partners.begin();
- while(it != partners.end()){
+ while(it != partners.end()) {
//skip the first one to have a partner
if(it==partners.begin()){
it++;
continue;
}
prev = it - 1;
//determine the particles to work with
pold = prev->first;
if(prev->second){
if(pold->hasAntiColour() != anti)
pold = prev->second;
}
assert(pold);
pnew = it->first;
- if(it->second){
+ if(it->second) {
if(it->second->colourLine(!anti)) //look for the opposite colour
pnew = it->second;
}
assert(pnew);
// Implement the disruption of colour connections
if( it != partners.end()-1 ){//last one is diquark-has to be connected
//has to be inside the if statement, so that the probability is
//correctly counted:
if( UseRandom::rnd() < colourDisrupt ){
if(!it->second){//check, whether we have a gluon
mergeColour(pnew, pnew, anti);
}else{
if(pnew==it->first)//be careful about the order
mergeColour(it->second, it->first, anti);
else
mergeColour(it->first, it->second, anti);
}
it = partners.erase(it);
continue;
}
}
// regular merging
mergeColour(pold, pnew, anti);
//end of loop
it++;
}
return;
}
PPtr HwRemDecayer::forceSplit(const tRemPPtr rem, long child, Energy &lastQ,
double &lastx, Lorentz5Momentum &pf,
Lorentz5Momentum &p, HadronContent & content) const {
// beam momentum
Lorentz5Momentum beam = theBeam->momentum();
// the last scale is minimum of last value and upper limit
Energy minQ=_range*_kinCutoff*sqrt(lastx)/(1-lastx);
if(minQ>lastQ) lastQ=minQ;
// generate the new value of qtilde
// weighted towards the lower value: dP/dQ = 1/Q -> Q(R) =
// Q0 (Qmax/Q0)^R
Energy q;
double zmin,zmax,yy;
do {
q = minQ*pow(lastQ/minQ,UseRandom::rnd());
zmin = lastx;
yy = 1.+0.5*sqr(_kinCutoff/q);
zmax = yy - sqrt(sqr(yy)-1.);
}
while(zmax<zmin);
// now generate z as in FORTRAN HERWIG
// use y = ln(z/(1-z)) as integration variable
double ymin=log(zmin/(1.-zmin));
double ymax=log(zmax/(1.-zmax));
double dely=ymax-ymin;
unsigned int nz=_nbinmax;
dely/=nz;
yy=ymin+0.5*dely;
vector<int> ids;
if(child!=0) ids.push_back(ParticleID::g);
else {
ids=content.flav;
for(unsigned int ix=0;ix<ids.size();++ix) ids[ix] *= content.sign;
}
// probabilities of the different types of possible splitting
map<long,pair<double,vector<double> > > partonprob;
double ptotal(0.);
for(unsigned int iflav=0;iflav<ids.size();++iflav) {
// only do each parton once
if(partonprob.find(ids[iflav])!=partonprob.end()) continue;
// particle data object
tcPDPtr in = getParticleData(ids[iflav]);
double psum(0.);
vector<double> prob;
for(unsigned int iz=0;iz<nz;++iz) {
double ez=exp(yy);
double wr=1.+ez;
double zr=wr/ez;
double wz=1./wr;
double zz=wz*ez;
double az=wz*zz*_alpha->value(sqr(max(wz*q,_kinCutoff)));
// g -> q qbar
if(ids[iflav]==ParticleID::g) {
// calculate splitting function
// SP as q is always less than forcedSplitScale, the pdf scale is fixed
// pdfval = _pdf->xfx(theBeamData,in,sqr(q),lastx*zr);
double pdfval=_pdf->xfx(theBeamData,in,sqr(_forcedSplitScale),lastx*zr);
if(pdfval>0.) psum += pdfval*az*0.5*(sqr(zz)+sqr(wz));
}
// q -> q g
else {
// calculate splitting function
// SP as q is always less than forcedSplitScale, the pdf scale is fixed
// pdfval = _pdf->xfx(theBeamData,in,sqr(q),lastx*zr);
double pdfval=_pdf->xfx(theBeamData,in,sqr(_forcedSplitScale),lastx*zr);
if(pdfval>0.) psum += pdfval*az*4./3.*(1.+sqr(wz))*zr;
}
if(psum>0.) prob.push_back(psum);
yy+=dely;
}
if(psum>0.) partonprob[ids[iflav]] = make_pair(psum,prob);
ptotal+=psum;
}
// select the flavour
+ if(ptotal==0.) throw ShowerHandler::ExtraScatterVeto();
ptotal *= UseRandom::rnd();
map<long,pair<double,vector<double> > >::const_iterator pit;
for(pit=partonprob.begin();pit!=partonprob.end();++pit) {
if(pit->second.first>=ptotal) break;
else ptotal -= pit->second.first;
}
if(pit==partonprob.end())
throw Exception() << "Can't select parton for forced backward evolution in "
<< "HwRemDecayer::forceSplit" << Exception::eventerror;
// select z
unsigned int iz=0;
for(;iz<pit->second.second.size();++iz) {
if(pit->second.second[iz]>ptotal) break;
}
if(iz==pit->second.second.size()) --iz;
double ey=exp(ymin+dely*(float(iz+1)-UseRandom::rnd()));
double z=ey/(1.+ey);
Energy2 pt2=sqr((1.-z)*q)- z*sqr(_kinCutoff);
// create the particle
if(pit->first!=ParticleID::g) child=pit->first;
PPtr parton = getParticleData(child)->produceParticle();
Energy2 emittedm2 = sqr(parton->dataPtr()->constituentMass());
// Now boost pcm and pf to z only frame
Lorentz5Momentum p_ref = Lorentz5Momentum(ZERO, beam.vect());
Lorentz5Momentum n_ref = Lorentz5Momentum(ZERO, -beam.vect());
// generate phi and compute pt of branching
double phi = Constants::twopi*UseRandom::rnd();
Energy pt=sqrt(pt2);
Lorentz5Momentum qt = LorentzMomentum(pt*cos(phi), pt*sin(phi), ZERO, ZERO);
// compute alpha for previous particle
Energy2 p_dot_n = p_ref*n_ref;
double lastalpha = pf*n_ref/p_dot_n;
Lorentz5Momentum qtout=qt;
Energy2 qtout2=-qt*qt;
double alphaout=(1.-z)/z*lastalpha;
double betaout=0.5*(emittedm2+qtout2)/alphaout/p_dot_n;
Lorentz5Momentum k=alphaout*p_ref+betaout*n_ref+qtout;
k.rescaleMass();
parton->set5Momentum(k);
pf+=k;
lastQ=q;
lastx/=z;
p += parton->momentum();
thestep->addDecayProduct(rem,parton,false);
return parton;
}
void HwRemDecayer::setRemMasses() const {
// get the masses of the remnants
Energy mrem[2];
Lorentz5Momentum ptotal,pnew[2];
vector<tRemPPtr> theprocessed;
theprocessed.push_back(theRems.first);
theprocessed.push_back(theRems.second);
// one remnant in e.g. DIS
if(!theprocessed[0]||!theprocessed[1]) {
tRemPPtr rem = theprocessed[0] ? theprocessed[0] : theprocessed[1];
Lorentz5Momentum deltap(rem->momentum());
// find the diquark and momentum we still need in the energy
tPPtr diquark;
vector<PPtr> progenitors;
for(unsigned int ix=0;ix<rem->children().size();++ix) {
if(!DiquarkMatcher::Check(rem->children()[ix]->data())) {
progenitors.push_back(rem->children()[ix]);
deltap -= rem->children()[ix]->momentum();
}
else
diquark = rem->children()[ix];
}
// now find the total momentum of the hadronic final-state to
// reshuffle against
// find the hadron for this remnant
tPPtr hadron=rem;
do hadron=hadron->parents()[0];
while(!hadron->parents().empty());
// find incoming parton to hard process from this hadron
tPPtr hardin =
generator()->currentEvent()->primaryCollision()->incoming().first==hadron ?
generator()->currentEvent()->primarySubProcess()->incoming().first :
generator()->currentEvent()->primarySubProcess()->incoming().second;
tPPtr parent=hardin;
vector<PPtr> tempprog;
// find the outgoing particles emitted from the backward shower
do {
assert(!parent->parents().empty());
tPPtr newparent=parent->parents()[0];
if(newparent==hadron) break;
for(unsigned int ix=0;ix<newparent->children().size();++ix) {
if(newparent->children()[ix]!=parent)
findChildren(newparent->children()[ix],tempprog);
}
parent=newparent;
}
while(parent!=hadron);
// add to list of potential particles to reshuffle against in right order
for(unsigned int ix=tempprog.size();ix>0;--ix) progenitors.push_back(tempprog[ix-1]);
// final-state particles which are colour connected
tColinePair lines = make_pair(hardin->colourLine(),hardin->antiColourLine());
vector<PPtr> others;
for(ParticleVector::const_iterator
cit = generator()->currentEvent()->primarySubProcess()->outgoing().begin();
cit!= generator()->currentEvent()->primarySubProcess()->outgoing().end();++cit) {
// colour connected
if(lines.first&&lines.first==(**cit).colourLine()) {
findChildren(*cit,progenitors);
continue;
}
// anticolour connected
if(lines.second&&lines.second==(**cit).antiColourLine()) {
findChildren(*cit,progenitors);
continue;
}
// not connected
for(unsigned int ix=0;ix<(**cit).children().size();++ix)
others.push_back((**cit).children()[ix]);
}
// work out how much of the system needed for rescaling
unsigned int iloc=0;
Lorentz5Momentum psystem,ptotal;
do {
psystem+=progenitors[iloc]->momentum();
ptotal = psystem + deltap;
ptotal.rescaleMass();
psystem.rescaleMass();
++iloc;
if(ptotal.mass() > psystem.mass() + diquark->mass() &&
DISRemnantOpt_<2 && ptotal.e() > 0.*GeV ) break;
}
while(iloc<progenitors.size());
if(ptotal.mass() > psystem.mass() + diquark->mass()) --iloc;
if(iloc==progenitors.size()) {
// try touching the lepton in dis as a last restort
for(unsigned int ix=0;ix<others.size();++ix) {
progenitors.push_back(others[ix]);
psystem+=progenitors[iloc]->momentum();
ptotal = psystem + deltap;
ptotal.rescaleMass();
psystem.rescaleMass();
++iloc;
}
--iloc;
if(ptotal.mass() > psystem.mass() + diquark->mass()) {
if(DISRemnantOpt_==0||DISRemnantOpt_==2)
Throw<Exception>() << "Warning had to adjust the momentum of the"
<< " non-colour connected"
<< " final-state, e.g. the scattered lepton in DIS"
<< Exception::warning;
else
throw Exception() << "Can't set remnant momentum without adjusting "
<< "the momentum of the"
<< " non-colour connected"
<< " final-state, e.g. the scattered lepton in DIS"
<< " vetoing event"
<< Exception::eventerror;
}
else {
throw Exception() << "Can't put the remnant on-shell in HwRemDecayer::setRemMasses()"
<< Exception::eventerror;
}
}
psystem.rescaleMass();
LorentzRotation R = Utilities::getBoostToCM(make_pair(psystem, deltap));
Energy pz = SimplePhaseSpace::getMagnitude(sqr(ptotal.mass()),
psystem.mass(), diquark->mass());
LorentzRotation Rs(-(R*psystem).boostVector());
Rs.boost(0.0, 0.0, pz/sqrt(sqr(pz) + sqr(psystem.mass())));
Rs = Rs*R;
// put remnant on shell
deltap.transform(R);
deltap.setMass(diquark->mass());
deltap.setE(sqrt(sqr(diquark->mass())+sqr(pz)));
deltap.rescaleRho();
R.invert();
deltap.transform(R);
Rs = R*Rs;
// apply transformation to required particles to absorb recoil
for(unsigned int ix=0;ix<=iloc;++ix) {
progenitors[ix]->deepTransform(Rs);
}
diquark->set5Momentum(deltap);
}
// two remnants
else {
for(unsigned int ix=0;ix<2;++ix) {
if(!theprocessed[ix]) continue;
pnew[ix]=Lorentz5Momentum();
for(unsigned int iy=0;iy<theprocessed[ix]->children().size();++iy) {
pnew[ix]+=theprocessed[ix]->children()[iy]->momentum();
}
mrem[ix]=sqrt(pnew[ix].m2());
}
// now find the remnant remnant cmf frame
Lorentz5Momentum prem[2]={theprocessed[0]->momentum(),
theprocessed[1]->momentum()};
ptotal=prem[0]+prem[1];
ptotal.rescaleMass();
// boost momenta to this frame
if(ptotal.m()< (pnew[0].m()+pnew[1].m()))
throw Exception() << "Not enough energy in both remnants in "
<< "HwRemDecayer::setRemMasses() "
<< Exception::eventerror;
Boost boostv(-ptotal.boostVector());
ptotal.boost(boostv);
for(unsigned int ix=0;ix<2;++ix) {
prem[ix].boost(boostv);
// set the masses and energies,
prem[ix].setMass(mrem[ix]);
prem[ix].setE(0.5/ptotal.m()*(sqr(ptotal.m())+sqr(mrem[ix])-sqr(mrem[1-ix])));
prem[ix].rescaleRho();
// boost back to the lab
prem[ix].boost(-boostv);
// set the momenta of the remnants
theprocessed[ix]->set5Momentum(prem[ix]);
}
// boost the decay products
Lorentz5Momentum ptemp;
for(unsigned int ix=0;ix<2;++ix) {
Boost btorest(-pnew[ix].boostVector());
Boost bfmrest( prem[ix].boostVector());
for(unsigned int iy=0;iy<theprocessed[ix]->children().size();++iy) {
ptemp=theprocessed[ix]->children()[iy]->momentum();
ptemp.boost(btorest);
ptemp.boost(bfmrest);
theprocessed[ix]->children()[iy]->set5Momentum(ptemp);
}
}
}
}
void HwRemDecayer::initSoftInteractions(Energy ptmin, InvEnergy2 beta){
ptmin_ = ptmin;
beta_ = beta;
}
Energy HwRemDecayer::softPt() const {
Energy2 pt2(ZERO);
double xmin(0.0), xmax(1.0), x(0);
if(beta_ == ZERO){
return UseRandom::rnd(0.0,(double)(ptmin_/GeV))*GeV;
}
if(beta_ < ZERO){
xmin = 1.0;
xmax = exp( -beta_*sqr(ptmin_) );
}else{
xmin = exp( -beta_*sqr(ptmin_) );
xmax = 1.0;
}
x = UseRandom::rnd(xmin, xmax);
pt2 = 1.0/beta_ * log(1/x);
if( pt2 < ZERO || pt2 > sqr(ptmin_) )
throw Exception() << "HwRemDecayer::softPt generation of pt "
<< "outside allowed range [0," << ptmin_/GeV << "]."
<< Exception::runerror;
return sqrt(pt2);
}
void HwRemDecayer::softKinematics(Lorentz5Momentum &r1, Lorentz5Momentum &r2,
Lorentz5Momentum &g1, Lorentz5Momentum &g2) const {
const Energy mg(0.75*GeV);
g1 = Lorentz5Momentum();
g2 = Lorentz5Momentum();
//All necessary variables for the two soft gluons
Energy pt(softPt()), pz(ZERO);
Energy2 pz2(ZERO);
double phi(UseRandom::rnd(2.*Constants::pi));
double x_g1(0.0), x_g2(0.0);
//Get the external momenta
tcPPair beam(generator()->currentEventHandler()->currentCollision()->incoming());
Lorentz5Momentum P1(beam.first->momentum()), P2(beam.second->momentum());
if(dbg){
cerr << "new event --------------------\n"
<< *(beam.first) << *(softRems_.first)
<< "-------------------\n"
<< *(beam.second) << *(softRems_.second) << endl;
}
//Get x_g1 and x_g2
//first limits
double xmin = sqr(ptmin_)/4.0/(P1+P2).m2();
double x1max = (r1.e()+abs(r1.z()))/(P1.e() + abs(P1.z()));
double x2max = (r2.e()+abs(r2.z()))/(P2.e() + abs(P2.z()));
//now generate according to 1/x
x_g1 = xmin * exp(UseRandom::rnd(log(x1max/xmin)));
x_g2 = xmin * exp(UseRandom::rnd(log(x2max/xmin)));
if(dbg)
cerr << x1max << " " << x_g1 << endl << x2max << " " << x_g2 << endl;
Lorentz5Momentum ig1, ig2, cmf;
ig1 = x_g1*P1;
ig2 = x_g2*P2;
ig1.setMass(mg);
ig2.setMass(mg);
ig1.rescaleEnergy();
ig2.rescaleEnergy();
cmf = ig1 + ig2;
//boost vector from cmf to lab
Boost boostv(cmf.boostVector());
//outgoing gluons in cmf
g1.setMass(mg);
g2.setMass(mg);
g1.setX(pt*cos(phi));
g2.setX(-pt*cos(phi));
g1.setY(pt*sin(phi));
g2.setY(-pt*sin(phi));
pz2 = cmf.m2()/4 - sqr(mg) - sqr(pt);
if(pz2/GeV2 < 0.0){
if(dbg)
cerr << "EXCEPTION not enough energy...." << endl;
throw ExtraSoftScatterVeto();
}
if(UseRandom::rndbool())
pz = sqrt(pz2);
else
pz = -sqrt(pz2);
if(dbg)
cerr << "pz has been calculated to: " << pz/GeV << endl;
g1.setZ(pz);
g2.setZ(-pz);
g1.rescaleEnergy();
g2.rescaleEnergy();
if(dbg){
cerr << "check inv mass in cmf frame: " << (g1+g2).m()/GeV
<< " vs. lab frame: " << (ig1+ig2).m()/GeV << endl;
}
g1.boost(boostv);
g2.boost(boostv);
//recalc the remnant momenta
Lorentz5Momentum r1old(r1), r2old(r2);
r1 -= ig1;
r2 -= ig2;
try{
reShuffle(r1, r2, r1old.m(), r2old.m());
}catch(ExtraSoftScatterVeto){
r1 = r1old;
r2 = r2old;
throw ExtraSoftScatterVeto();
}
if(dbg){
cerr << "remnant 1,2 momenta: " << r1/GeV << "--" << r2/GeV << endl;
cerr << "remnant 1,2 masses: " << r1.m()/GeV << " " << r2.m()/GeV << endl;
cerr << "check momenta in the lab..." << (-r1old-r2old+r1+r2+g1+g2)/GeV << endl;
}
}
void HwRemDecayer::doSoftInteractions(unsigned int N) {
if(N == 0) return;
if(!softRems_.first || !softRems_.second)
throw Exception() << "HwRemDecayer::doSoftInteractions: no "
<< "Remnants available."
<< Exception::runerror;
if( ptmin_ == -1.*GeV )
throw Exception() << "HwRemDecayer::doSoftInteractions: init "
<< "code has not been called! call initSoftInteractions."
<< Exception::runerror;
Lorentz5Momentum g1, g2;
Lorentz5Momentum r1(softRems_.first->momentum()), r2(softRems_.second->momentum());
unsigned int tries(1), i(0);
for(i=0; i<N; i++){
//check how often this scattering has been regenerated
if(tries > maxtrySoft_) break;
if(dbg){
cerr << "new try \n" << *softRems_.first << *softRems_.second << endl;
}
try{
softKinematics(r1, r2, g1, g2);
}catch(ExtraSoftScatterVeto){
tries++;
i--;
continue;
}
PPair oldrems = softRems_;
PPair gluons = make_pair(addParticle(softRems_.first, ParticleID::g, g1),
addParticle(softRems_.second, ParticleID::g, g2));
//now reset the remnants with the new ones
softRems_.first = addParticle(softRems_.first, softRems_.first->id(), r1);
softRems_.second = addParticle(softRems_.second, softRems_.second->id(), r2);
//do the colour connections
pair<bool, bool> anti = make_pair(oldrems.first->hasAntiColour(),
oldrems.second->hasAntiColour());
ColinePtr cl1 = new_ptr(ColourLine());
ColinePtr cl2 = new_ptr(ColourLine());
if( UseRandom::rnd() < colourDisrupt_ ){//this is the member variable, i.e. SOFT colour disruption
//connect the remnants independent of the gluons
oldrems.first->colourLine(anti.first)->addColoured(softRems_.first, anti.first);
oldrems.second->colourLine(anti.second)->addColoured(softRems_.second, anti.second);
//connect the gluons to each other
cl1->addColoured(gluons.first);
cl1->addAntiColoured(gluons.second);
cl2->addColoured(gluons.second);
cl2->addAntiColoured(gluons.first);
}else{
//connect the remnants to the gluons
oldrems.first->colourLine(anti.first)->addColoured(gluons.first, anti.first);
oldrems.second->colourLine(anti.second)->addColoured(gluons.second, anti.second);
//and the remaining colour line to the final remnant
cl1->addColoured(softRems_.first, anti.first);
cl1->addColoured(gluons.first, !anti.first);
cl2->addColoured(softRems_.second, anti.second);
cl2->addColoured(gluons.second, !anti.second);
}
//reset counter
tries = 1;
}
if(dbg)
cerr << "generated " << i << "th soft scatters\n";
}
void HwRemDecayer::finalize(double colourDisrupt, unsigned int softInt){
PPair diquarks;
//Do the final Rem->Diquark or Rem->quark "decay"
if(theRems.first) {
diquarks.first = finalSplit(theRems.first, theContent.first.RemID(),
theUsed.first);
theMaps.first.push_back(make_pair(diquarks.first, tPPtr()));
}
if(theRems.second) {
diquarks.second = finalSplit(theRems.second, theContent.second.RemID(),
theUsed.second);
theMaps.second.push_back(make_pair(diquarks.second, tPPtr()));
}
setRemMasses();
if(theRems.first) fixColours(theMaps.first, theanti.first, colourDisrupt);
if(theRems.second) fixColours(theMaps.second, theanti.second, colourDisrupt);
if( !theRems.first || !theRems.second ) return;
//stop here if we don't have two remnants
softRems_ = diquarks;
doSoftInteractions(softInt);
}
HwRemDecayer::HadronContent
HwRemDecayer::getHadronContent(tcPPtr hadron) const {
HadronContent hc;
hc.hadron = hadron->dataPtr();
long id(hadron->id());
// baryon
if(BaryonMatcher::Check(hadron->data())) {
hc.sign = id < 0? -1: 1;
hc.flav.push_back((id = abs(id)/10)%10);
hc.flav.push_back((id /= 10)%10);
hc.flav.push_back((id /= 10)%10);
hc.extracted = -1;
}
else if(hadron->data().id()==ParticleID::gamma) {
hc.sign = 1;
for(int ix=1;ix<6;++ix) {
hc.flav.push_back( ix);
hc.flav.push_back(-ix);
}
}
return hc;
}
long HwRemDecayer::HadronContent::RemID() const{
if(extracted == -1)
throw Exception() << "Try to build a Diquark id without "
<< "having extracted something in "
<< "HwRemDecayer::RemID(...)"
<< Exception::runerror;
//the hadron was a meson or photon
if(flav.size()==2) return sign*flav[(extracted+1)%2];
long remId;
int id1(sign*flav[(extracted+1)%3]),
id2(sign*flav[(extracted+2)%3]),
sign(0), spin(0);
if (abs(id1) > abs(id2)) swap(id1, id2);
sign = (id1 < 0) ? -1 : 1; // Needed for the spin 0/1 part
remId = id2*1000+id1*100;
// Now decide if we have spin 0 diquark or spin 1 diquark
if(id1 == id2) spin = 3; // spin 1
else spin = 1; // otherwise spin 0
remId += sign*spin;
return remId;
}
tPPtr HwRemDecayer::addParticle(tcPPtr parent, long id, Lorentz5Momentum p) const {
PPtr newp = new_ptr(Particle(getParticleData(id)));
newp->set5Momentum(p);
// Add the new remnant to the step, but don't do colour connections
thestep->addDecayProduct(parent,newp,false);
return newp;
}
void HwRemDecayer::findChildren(tPPtr part,vector<PPtr> & particles) const {
if(part->children().empty()) particles.push_back(part);
else {
for(unsigned int ix=0;ix<part->children().size();++ix)
findChildren(part->children()[ix],particles);
}
}
ParticleVector HwRemDecayer::decay(const DecayMode &,
const Particle &, Step &) const {
throw Exception() << "HwRemDecayer::decay(...) "
<< "must not be called explicitely."
<< Exception::runerror;
}
void HwRemDecayer::persistentOutput(PersistentOStream & os) const {
os << ounit(_kinCutoff, GeV) << _range
<< _zbin << _ybin << _nbinmax << _alpha << DISRemnantOpt_
<< maxtrySoft_ << colourDisrupt_;
}
void HwRemDecayer::persistentInput(PersistentIStream & is, int) {
is >> iunit(_kinCutoff, GeV) >> _range
>> _zbin >> _ybin >> _nbinmax >> _alpha >> DISRemnantOpt_
>> maxtrySoft_ >> colourDisrupt_;
}
ClassDescription<HwRemDecayer> HwRemDecayer::initHwRemDecayer;
// Definition of the static class description member.
void HwRemDecayer::Init() {
static ClassDocumentation<HwRemDecayer> documentation
("The HwRemDecayer class decays the remnant for Herwig++");
static Parameter<HwRemDecayer,double> interfaceZBinSize
("ZBinSize",
"The size of the vbins in z for the interpolation of the splitting function.",
&HwRemDecayer::_zbin, 0.05, 0.001, 0.1,
false, false, Interface::limited);
static Parameter<HwRemDecayer,int> interfaceMaxBin
("MaxBin",
"Maximum number of z bins",
&HwRemDecayer::_nbinmax, 100, 10, 1000,
false, false, Interface::limited);
static Reference<HwRemDecayer,ShowerAlpha> interfaceAlphaS
("AlphaS",
"Pointer to object to calculate the strong coupling",
&HwRemDecayer::_alpha, false, false, true, false, false);
static Parameter<HwRemDecayer,Energy> interfaceKinCutoff
("KinCutoff",
"Parameter kinCutoff used to constrain qtilde",
&HwRemDecayer::_kinCutoff, GeV, 0.75*GeV, 0.5*GeV, 10.0*GeV,
false, false, Interface::limited);
static Parameter<HwRemDecayer,double> interfaceEmissionRange
("EmissionRange",
"Factor above the minimum possible value in which the forced splitting is allowed.",
&HwRemDecayer::_range, 1.1, 1.0, 10.0,
false, false, Interface::limited);
static Switch<HwRemDecayer,unsigned int> interfaceDISRemnantOption
("DISRemnantOption",
"Options for the treatment of the remnant in DIS",
&HwRemDecayer::DISRemnantOpt_, 0, false, false);
static SwitchOption interfaceDISRemnantOptionDefault
(interfaceDISRemnantOption,
"Default",
"Use the minimum number of particles needed to take the recoil"
" and allow the lepton to be used if needed",
0);
static SwitchOption interfaceDISRemnantOptionNoLepton
(interfaceDISRemnantOption,
"NoLepton",
"Use the minimum number of particles needed to take the recoil but"
" veto events where the lepton kinematics would need to be altered",
1);
static SwitchOption interfaceDISRemnantOptionAllParticles
(interfaceDISRemnantOption,
"AllParticles",
"Use all particles in the colour connected system to take the recoil"
" and use the lepton if needed.",
2);
static SwitchOption interfaceDISRemnantOptionAllParticlesNoLepton
(interfaceDISRemnantOption,
"AllParticlesNoLepton",
"Use all the particles in the colour connected system to take the"
" recoil but don't use the lepton.",
3);
static Parameter<HwRemDecayer,unsigned int> interfaceMaxTrySoft
("MaxTrySoft",
"The maximum number of regeneration attempts for an additional soft scattering",
&HwRemDecayer::maxtrySoft_, 10, 0, 100,
false, false, Interface::limited);
static Parameter<HwRemDecayer,double> interfacecolourDisrupt
("colourDisrupt",
"Fraction of connections to additional soft subprocesses, which are colour disrupted.",
&HwRemDecayer::colourDisrupt_,
1.0, 0.0, 1.0,
false, false, Interface::limited);
}
diff --git a/PDF/IncomingPhotonEvolver.cc b/PDF/IncomingPhotonEvolver.cc
--- a/PDF/IncomingPhotonEvolver.cc
+++ b/PDF/IncomingPhotonEvolver.cc
@@ -1,334 +1,378 @@
// -*- C++ -*-
//
// This is the implementation of the non-inlined, non-templated member
// functions of the IncomingPhotonEvolver class.
//
#include "IncomingPhotonEvolver.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Interface/Parameter.h"
+#include "ThePEG/Interface/Reference.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
#include "ThePEG/Handlers/EventHandler.h"
#include "ThePEG/EventRecord/Event.h"
#include "ThePEG/EventRecord/Particle.h"
#include "ThePEG/StandardModel/StandardModelBase.h"
#include "ThePEG/Repository/EventGenerator.h"
#include "ThePEG/PDT/EnumParticles.h"
#include "ThePEG/PDF/BeamParticleData.h"
#include "ThePEG/PDF/PartonExtractor.h"
using namespace Herwig;
IncomingPhotonEvolver::IncomingPhotonEvolver()
- : PDFMax_(50.), PDFPower_(1.0), minpT_(2.*GeV)
+ : PDFMax_(80.), PDFPower_(1.0), minpT_(2.*GeV), minVirtuality_(1e-3*GeV),
+ vetoTries_(10000), virtualityTries_(10)
{}
void IncomingPhotonEvolver::
handle(EventHandler & eh, const tPVector & ,
const Hint & ) {
+ cerr << "testing start event number " << generator()->currentEvent()->number() << "\n";
// extract the incoming partons from the hard process
PPair incomingPartons =
eh.currentEvent()->primarySubProcess()->incoming();
// check one and only one is a photon
if(!( (incomingPartons.first->id() == ParticleID::gamma &&
incomingPartons.second->id() != ParticleID::gamma) ||
(incomingPartons.first->id() != ParticleID::gamma &&
incomingPartons.second->id() == ParticleID::gamma))) return;
// extract the incoming hadrons from the event
PPair incomingHadrons =
eh.currentEvent()->incoming();
// calculate the value of x
double x[2] =
{incomingPartons.first ->momentum().t()/incomingHadrons.first ->momentum().t(),
incomingPartons.second->momentum().t()/incomingHadrons.second->momentum().t()};
// swap order so photon first
if(incomingPartons.first->id()!=ParticleID::gamma) {
swap(incomingPartons.first,incomingPartons.second);
swap(incomingHadrons.first,incomingHadrons.second);
swap(x[0],x[1]);
}
// calculate CMF momentum get the pt scale for the process
- Energy pt(generator()->maximumCMEnergy());
+ Energy ptmax(generator()->maximumCMEnergy());
Lorentz5Momentum pcmf;
for(ParticleVector::const_iterator
cit=eh.currentEvent()->primarySubProcess()->outgoing().begin(),
end=eh.currentEvent()->primarySubProcess()->outgoing().end();
cit!=end;++cit) {
pcmf += (**cit).momentum();
Energy pttest = (**cit).momentum().perp();
- if(pttest<pt&&pt>minpT_) pt=pttest;
+ if(pttest<ptmax&&ptmax>minpT_) ptmax=pttest;
}
- if(pt==generator()->maximumCMEnergy()) pt=minpT_;
+ if(ptmax==generator()->maximumCMEnergy()) ptmax=minpT_;
// limits for the z integrand
double lower = 1./PDFPower_;
double upper = lower/pow(x[0],PDFPower_);
// extract the PDF for the beam particle
Ptr<BeamParticleData>::transient_const_pointer beam =
dynamic_ptr_cast<Ptr<BeamParticleData>::transient_const_pointer>
(incomingHadrons.first->dataPtr());
assert(beam);
// get the PDF
- tcPDFPtr pdf = beam->pdf();
+ tcPDFPtr pdf;
+ if ( PDF_ ) pdf = PDF_;
+ else pdf = beam->pdf();
assert(pdf);
- // generate the values of pt and z for the branching
+ // power for the sampling
double wgt = PDFMax_*SM().alphaEM()/Constants::pi/PDFPower_*
(1./pow(x[0],PDFPower_)-1.);
- double z,pdftotal,rwgt;
- unsigned int ncount(0);
- Energy scale;
- do {
- scale = max(pt,minpT_);
- // new value of pT
- pt *= pow(UseRandom::rnd(),0.5/wgt);
- // new value of z
- z = lower+UseRandom::rnd()*(upper-lower);
- z = pow(1./z/PDFPower_,1./PDFPower_);
- // the weight
- rwgt = 0.5*(1.+sqr(1.-z));
- // denominator of the pdf bit
- rwgt /= pdf->xfx(beam,photon_,sqr(scale),x[0]);
- // numerator of the pdf bit
- pdftotal = 0.;
- for(unsigned int ix=0;ix<partons_.size();++ix) {
- double pdfval = pdf->xfx(beam,partons_[ix],sqr(scale),x[0]/z);
- if(pdfval>0.) pdftotal += pdfval*sqr(double(partons_[ix]->iCharge())/3.);
- }
- rwgt *= pdftotal;
- // finally divide by the overestimate of the PDF bit
- rwgt /= PDFMax_/pow(z,PDFPower_);
- if(rwgt>1.) cerr << "testing weight problem " << rwgt << " " << PDFMax_ << "\n";
- if(UseRandom::rnd()>rwgt) {
- ++ncount;
- continue;
- }
- break;
- }
- while(true&&ncount<5000);
- if(ncount==5000) {
- throw Exception() << "Too many attempts to generate backward "
- << "photon evolution in IncomingPhotonEvolver::handle()"
- << Exception::eventerror;
- }
- // now select the flavour of the emitted parton
- pdftotal *= UseRandom::rnd();
- tcPDPtr quark;
- for(unsigned int ix=0;ix<partons_.size();++ix) {
- double pdfval = pdf->xfx(beam,partons_[ix],sqr(scale),x[0]/z);
- if(pdfval<=0.) continue;
- pdfval *= sqr(double(partons_[ix]->iCharge())/3.);
- if(pdftotal<pdfval) {
- quark = partons_[ix];
- break;
- }
- pdftotal -= pdfval;
- }
- assert(quark);
- // construct the kinematics
+ unsigned int virtualityAttempts(0);
+ Lorentz5Momentum pin,pout,pgamma;
// p and n vectors
Energy mag = incomingHadrons.first->momentum().t();
Lorentz5Momentum p(ZERO,ZERO, mag,mag);
Lorentz5Momentum n(ZERO,ZERO,-mag,mag);
if(incomingHadrons.first->momentum().z()<ZERO) swap(p,n);
Energy2 pdotn = p*n;
- // calculate the momenta of the partons involved in the branching
- double betaq = 0.5*z*sqr(pt)/(x[0]*(1.-z)*pdotn);
- double phi = Constants::twopi*UseRandom::rnd();
- Lorentz5Momentum pin = x[0]/z*p;
- Lorentz5Momentum pout = (1.-z)*x[0]/z*p+betaq*n+
- Lorentz5Momentum(pt*cos(phi),pt*sin(phi),ZERO,ZERO);
- Lorentz5Momentum pgamma = pin-pout;
- pout .rescaleMass();
- pgamma.rescaleMass();
+ tcPDPtr quark;
+ // generate the momenta
+ do {
+ ++virtualityAttempts;
+ Energy pt(ptmax);
+ quark = tcPDPtr();
+ // generate the values of pt and z for the branching
+ double z,pdftotal,rwgt;
+ unsigned int vetoAttempts(0);
+ Energy scale;
+ do {
+ scale = max(pt,minpT_);
+ // new value of pT
+ pt *= pow(UseRandom::rnd(),0.5/wgt);
+ // new value of z
+ z = lower+UseRandom::rnd()*(upper-lower);
+ z = pow(1./z/PDFPower_,1./PDFPower_);
+ // the weight
+ rwgt = 0.5*(1.+sqr(1.-z));
+ // denominator of the pdf bit
+ rwgt /= pdf->xfx(beam,photon_,sqr(scale),x[0]);
+ // numerator of the pdf bit
+ pdftotal = 0.;
+ for(unsigned int ix=0;ix<partons_.size();++ix) {
+ double pdfval = pdf->xfx(beam,partons_[ix],sqr(scale),x[0]/z);
+ if(pdfval>0.) pdftotal += pdfval*sqr(double(partons_[ix]->iCharge())/3.);
+ }
+ rwgt *= pdftotal;
+ // finally divide by the overestimate of the PDF bit
+ rwgt /= PDFMax_/pow(z,PDFPower_);
+ if(rwgt>1.) generator()->logWarning( Exception("IncomingPhotonEvolver::handle() "
+ "Veto algorithm weight greater than one.",
+ Exception::warning) );
+ if(UseRandom::rnd()<=rwgt) break;
+ ++vetoAttempts;
+ }
+ while (vetoAttempts<vetoTries_);
+ if(vetoAttempts==vetoTries_)
+ throw Exception() << "Too many attempts to generate scale in backward "
+ << "photon evolution in IncomingPhotonEvolver::handle()"
+ << Exception::eventerror;
+ // now select the flavour of the emitted parton
+ pdftotal *= UseRandom::rnd();
+ // construct the kinematics
+ // calculate the momenta of the partons involved in the branching
+ double betaq = 0.5*z*sqr(pt)/(x[0]*(1.-z)*pdotn);
+ double phi = Constants::twopi*UseRandom::rnd();
+ pin = x[0]/z*p;
+ pout = (1.-z)*x[0]/z*p+betaq*n+
+ Lorentz5Momentum(pt*cos(phi),pt*sin(phi),0.*GeV,0.*GeV);
+ pgamma = pin-pout;
+ pout .rescaleMass();
+ pgamma.rescaleMass();
+ for(unsigned int ix=0;ix<partons_.size();++ix) {
+ double pdfval = pdf->xfx(beam,partons_[ix],sqr(scale),x[0]/z);
+ if(pdfval<=0.) continue;
+ pdfval *= sqr(double(partons_[ix]->iCharge())/3.);
+ if(pdftotal<pdfval) {
+ quark = partons_[ix];
+ break;
+ }
+ pdftotal -= pdfval;
+ }
+ assert(quark);
+ }
+ while(-pgamma.mass()<=minVirtuality_&&virtualityAttempts<virtualityTries_);
+ if(virtualityAttempts==virtualityTries_)
+ throw Exception() << "Too many attempts to generate virtuality in backward "
+ << "photon evolution in IncomingPhotonEvolver::handle()"
+ << Exception::eventerror;
// compute the boosts for momentum conservation
Energy2 shat = (incomingPartons.first ->momentum()+
incomingPartons.second->momentum()).m2();
Energy2 S = (p+n).m2();
Lorentz5Momentum pother = incomingPartons.second->momentum();
// find alphas and betas in terms of desired basis
double a[2] = {pgamma*n/pdotn,pother*n/pdotn};
double b[2] = {pgamma*p/pdotn,pother*p/pdotn};
Lorentz5Momentum p1p = pgamma - a[0]*p - b[0]*n;
Lorentz5Momentum p2p = pother - a[1]*p - b[1]*n;
// compute kappa
Energy2 A = a[0]*b[1]*S;
Energy2 B = shat - (a[0]*b[0]+a[1]*b[1])*S - (p1p+p2p).mag2();
Energy2 C = a[1]*b[0]*S;
double rad = 1.-4.*A*C/sqr(B);
if(rad < 0.) throw Exception() << "Can't generate backward evolution of the photon"
<< " in IncomingPhotonEvolver::handle()"
<< Exception::eventerror;
double kp = B/(2.*A)*(1.+sqrt(rad));
// now compute k1, k2
rad = kp*(b[0]+kp*b[1])/(kp*a[0]+a[1])*(x[0]/x[1]);
if(rad <= 0.) throw Exception() << "Can't generate backward evolution of the photon"
<< " in IncomingPhotonEvolver::handle()"
<< Exception::eventerror;
double k1 = sqrt(rad);
double k2 = kp/k1;
double beta[2] =
{getBeta((a[0]+b[0]), (a[0]-b[0]), (k1*a[0]+b[0]/k1), (k1*a[0]-b[0]/k1)),
getBeta((a[1]+b[1]), (a[1]-b[1]), (a[1]/k2+k2*b[1]), (a[1]/k2-k2*b[1]))};
if (p.z() > ZERO) {
beta[0] = -beta[0];
beta[1] = -beta[1];
}
// apply the boosts
Boost betaboost(0, 0, beta[0]);
pin .boost(betaboost);
pgamma.boost(betaboost);
pout .boost(betaboost);
betaboost = Boost(0, 0, beta[1]);
pother.boost(betaboost);
Lorentz5Momentum newcmf = pother+pgamma;
pcmf.rescaleMass();
if(pin.e()/p.e()>1.||pin.z()/p.z()>1.)
throw Exception() << "Can't generate backward evolution of the photon"
<< " in IncomingPhotonEvolver::handle()"
<< Exception::eventerror;
if(pother.e()/n.e()>1.||pother.z()/n.z()>1.)
throw Exception() << "Can't generate backward evolution of the photon"
<< " in IncomingPhotonEvolver::handle()"
<< Exception::eventerror;
if(newcmf.m()<ZERO||newcmf.e()<ZERO)
throw Exception() << "Can't generate backward evolution of the photon"
<< " in IncomingPhotonEvolver::handle()"
<< Exception::eventerror;
Boost toRest = pcmf.findBoostToCM();
Boost fromRest = newcmf.boostVector();
// apply the boosts to the outgoing particles
for(ParticleVector::const_iterator
cit=eh.currentEvent()->primarySubProcess()->outgoing().begin(),
end=eh.currentEvent()->primarySubProcess()->outgoing().end();
cit!=end;++cit) {
(**cit).deepBoost( toRest);
(**cit).deepBoost(fromRest);
newcmf -= (**cit).momentum();
}
// now sort out the event record
// make the new outgoing parton
PPtr newOutgoing = quark->produceParticle(pout);
// make the new incoming parton
PPtr newIncoming = quark->produceParticle(pin);
// and new other
PPtr newOther = incomingPartons.second->dataPtr()->
produceParticle(pother);
// colour connections
if(newIncoming->id()>0) {
ColinePtr newline = ColourLine::create(newIncoming);
newline->addColoured(newOutgoing);
}
else {
ColinePtr newline = ColourLine::create(newIncoming,true);
newline->addAntiColoured(newOutgoing);
}
if(incomingPartons.second->colourLine())
incomingPartons.second->colourLine()->addColoured(newOther);
if(incomingPartons.second->antiColourLine())
incomingPartons.second->antiColourLine()->addAntiColoured(newOther);
// sort out the remnants
// get the parton extractor
PartonExtractor & pex = *eh.lastExtractor();
// get the new partons
tPPair newp = make_pair(newIncoming,newOther);
// Creates the new remnants and returns the new PartonBinInstances
PBIPair newbins = pex.newRemnants(incomingPartons, newp, eh.currentStep());
// reset the momenta of the old incoming partons
incomingPartons.first ->set5Momentum(pgamma);
incomingPartons.second->set5Momentum(pother);
// sort out the mother/child stuff
incomingHadrons.first ->abandonChild(incomingPartons.first);
incomingHadrons.second->abandonChild(incomingPartons.second);
newIncoming->addChild(incomingPartons.first);
newOther->addChild(incomingPartons.second);
newIncoming->addChild(newOutgoing);
// add the new particles
eh.currentEvent()->primarySubProcess()->addOutgoing(newOutgoing,false);
eh.currentStep()->addParticle(newOutgoing);
eh.currentEvent()->primarySubProcess()->changeIncoming(newIncoming,
incomingPartons.first);
eh.currentEvent()->primarySubProcess()->changeIncoming(newOther,
incomingPartons.second);
eh.currentStep()->addIntermediate(newIncoming);
eh.currentStep()->addIntermediate(newOther );
// clean up the remnants
ParticleVector children = incomingHadrons.first->children();
for(unsigned int ix=0;ix<children.size();++ix) {
if(children[ix]==newIncoming) continue;
PPtr temp = children[ix];
incomingHadrons.first->abandonChild(temp);
ParticleVector childrenB = temp->children();
for(unsigned int iy=0;iy<childrenB.size();++iy) {
temp->abandonChild(childrenB[ix]);
incomingHadrons.first->addChild(childrenB[ix]);
}
eh.currentStep()->removeParticle(temp);
}
children = incomingHadrons.second->children();
for(unsigned int ix=0;ix<children.size();++ix) {
if(children[ix]==newOther) continue;
PPtr temp = children[ix];
incomingHadrons.second->abandonChild(temp);
ParticleVector childrenB = temp->children();
for(unsigned int iy=0;iy<childrenB.size();++iy) {
temp->abandonChild(childrenB[ix]);
incomingHadrons.second->addChild(childrenB[ix]);
}
eh.currentStep()->removeParticle(temp);
}
+ cerr << "testing end event number " << generator()->currentEvent()->number() << "\n";
}
IBPtr IncomingPhotonEvolver::clone() const {
return new_ptr(*this);
}
IBPtr IncomingPhotonEvolver::fullclone() const {
return new_ptr(*this);
}
void IncomingPhotonEvolver::persistentOutput(PersistentOStream & os) const {
- os << PDFMax_ << PDFPower_ << ounit(minpT_,GeV) << photon_ << partons_;
+ os << PDFMax_ << PDFPower_ << ounit(minpT_,GeV) << ounit(minVirtuality_,GeV)
+ << vetoTries_ << virtualityTries_ << photon_ << partons_;
}
void IncomingPhotonEvolver::persistentInput(PersistentIStream & is, int) {
- is >> PDFMax_ >> PDFPower_ >> iunit(minpT_,GeV) >> photon_ >> partons_;
+ is >> PDFMax_ >> PDFPower_ >> iunit(minpT_,GeV) >> iunit(minVirtuality_,GeV)
+ >> vetoTries_ >> virtualityTries_ >> photon_ >> partons_;
}
ClassDescription<IncomingPhotonEvolver> IncomingPhotonEvolver::initIncomingPhotonEvolver;
// Definition of the static class description member.
void IncomingPhotonEvolver::Init() {
static ClassDocumentation<IncomingPhotonEvolver> documentation
("The IncomingPhotonEvolver class performs the backward"
" evolution of a photon extracted from a hadron to a quark"
" or antiquark so that the event can be showered.");
static Parameter<IncomingPhotonEvolver,Energy> interfaceminpT
("minpT",
"The minimum pT scale to start the evolution",
&IncomingPhotonEvolver::minpT_, GeV, 2.0*GeV, 10.0*GeV, 0.5*GeV,
false, false, Interface::limited);
+ static Reference<IncomingPhotonEvolver,PDFBase> interfacePDF
+ ("PDF",
+ "PDF set to use. Overrides the one that is associated with the beam particle.",
+ &IncomingPhotonEvolver::PDF_, false, false, true, true, false);
+
static Parameter<IncomingPhotonEvolver,double> interfacePDFMax
("PDFMax",
"The maximum value for the overestimate of the branching probability",
&IncomingPhotonEvolver::PDFMax_, 50.0, 1.0, 1000.0,
false, false, Interface::limited);
static Parameter<IncomingPhotonEvolver,double> interfacePDFPower
("PDFPower",
"The power for the overestimate of the branching probability",
&IncomingPhotonEvolver::PDFPower_, 1.0, 0.01, 10.0,
false, false, Interface::limited);
+ static Parameter<IncomingPhotonEvolver,Energy> interfaceMinimumVirtuality
+ ("MinimumVirtuality",
+ "The minimum virtuality of the photon",
+ &IncomingPhotonEvolver::minVirtuality_, GeV, 1.0e-5*GeV,
+ 1.e-6*GeV, 1.0*GeV,
+ false, false, Interface::limited);
+
+ static Parameter<IncomingPhotonEvolver,unsigned int> interfaceVetoTries
+ ("VetoTries",
+ "Maximum number of attempts in the veto alogrithm loop",
+ &IncomingPhotonEvolver::vetoTries_, 5000, 1, 100000,
+ false, false, Interface::limited);
+
+ static Parameter<IncomingPhotonEvolver,unsigned int> interfaceVirtualityTries
+ ("VirtualityTries",
+ "Maximum number of attempts to generate the virtuality",
+ &IncomingPhotonEvolver::virtualityTries_, 5, 1, 100,
+ false, false, Interface::limited);
+
}
void IncomingPhotonEvolver::doinit() {
StepHandler::doinit();
photon_ = getParticleData(ParticleID::gamma);
for(int ix=1;ix<=5;++ix) {
partons_.push_back(getParticleData(ix));
partons_.push_back(partons_.back()->CC());
}
}
diff --git a/PDF/IncomingPhotonEvolver.h b/PDF/IncomingPhotonEvolver.h
--- a/PDF/IncomingPhotonEvolver.h
+++ b/PDF/IncomingPhotonEvolver.h
@@ -1,201 +1,221 @@
// -*- C++ -*-
#ifndef HERWIG_IncomingPhotonEvolver_H
#define HERWIG_IncomingPhotonEvolver_H
//
// This is the declaration of the IncomingPhotonEvolver class.
//
#include "ThePEG/Handlers/StepHandler.h"
namespace Herwig {
using namespace ThePEG;
/**
* The IncomingPhotonEvolver class performs the backward evolution
* of a photon in a partonic process to a quark or antiquark so that
* the event can be showered.
*
* @see \ref IncomingPhotonEvolverInterfaces "The interfaces"
* defined for IncomingPhotonEvolver.
*/
class IncomingPhotonEvolver: public StepHandler {
public:
/** @name Standard constructors and destructors. */
//@{
/**
* The default constructor.
*/
IncomingPhotonEvolver();
//@}
public:
/** @name Virtual functions required by the StepHandler class. */
//@{
/**
* The main function called by the EventHandler class to
* perform a step. Given the current state of an Event, this function
* performs the event generation step and includes the result in a new
* Step object int the Event record.
* @param eh the EventHandler in charge of the Event generation.
* @param tagged if not empty these are the only particles which should
* be considered by the StepHandler.
* @param hint a Hint object with possible information from previously
* performed steps.
* @throws Veto if the StepHandler requires the current step to be discarded.
* @throws Stop if the generation of the current Event should be stopped
* after this call.
* @throws Exception if something goes wrong.
*/
virtual void handle(EventHandler & eh, const tPVector & tagged,
const Hint & hint);
//@}
public:
/** @name Functions used by the persistent I/O system. */
//@{
/**
* Function used to write out object persistently.
* @param os the persistent output stream written to.
*/
void persistentOutput(PersistentOStream & os) const;
/**
* Function used to read in object persistently.
* @param is the persistent input stream read from.
* @param version the version number of the object when written.
*/
void persistentInput(PersistentIStream & is, int version);
//@}
/**
* The standard Init function used to initialize the interfaces.
* Called exactly once for each class by the class description system
* before the main function starts or
* when this class is dynamically loaded.
*/
static void Init();
protected:
/**
* Compute boost parameter along z axis to get (Ep, any perp, qp)
* from (E, same perp, q).
*/
inline double getBeta(const double E, const double q,
const double Ep, const double qp) const
{return (q*E-qp*Ep)/(sqr(qp)+sqr(E));}
protected:
/** @name Clone Methods. */
//@{
/**
* Make a simple clone of this object.
* @return a pointer to the new object.
*/
virtual IBPtr clone() const;
/** Make a clone of this object, possibly modifying the cloned object
* to make it sane.
* @return a pointer to the new object.
*/
virtual IBPtr fullclone() const;
//@}
protected:
/** @name Standard Interfaced functions. */
//@{
/**
* Initialize this object after the setup phase before saving an
* EventGenerator to disk.
* @throws InitException if object could not be initialized properly.
*/
virtual void doinit();
//@}
private:
/**
* The static object used to initialize the description of this class.
* Indicates that this is a concrete class with persistent data.
*/
static ClassDescription<IncomingPhotonEvolver> initIncomingPhotonEvolver;
/**
* The assignment operator is private and must never be called.
* In fact, it should not even be implemented.
*/
IncomingPhotonEvolver & operator=(const IncomingPhotonEvolver &);
private:
+ /**
+ * PDF set to use. Overrides the one that is associated with the beam particle.
+ */
+ PDFPtr PDF_;
/**
- * The maximum value of the PDF for the sample
+ * The maximum value of the PDF for the sample
*/
double PDFMax_;
/**
* The power for the sampling of the PDF
*/
double PDFPower_;
/**
* The minimum starting scale for the evolution
*/
Energy minpT_;
/**
+ * The minimum space-like virtuality of the photon
+ */
+ Energy minVirtuality_;
+
+ /**
+ * Maximum number of attempts to generate the scale of the
+ * branching
+ */
+ unsigned int vetoTries_;
+
+ /**
+ * Maximum number of attempts to regenerate the virtuality
+ */
+ unsigned int virtualityTries_;
+
+ /**
* Photon ParticleData object
*/
tcPDPtr photon_;
/**
* Partons to backward evolve to
*/
vector<tcPDPtr> partons_;
};
}
#include "ThePEG/Utilities/ClassTraits.h"
namespace ThePEG {
/** @cond TRAITSPECIALIZATIONS */
/** This template specialization informs ThePEG about the
* base classes of IncomingPhotonEvolver. */
template <>
struct BaseClassTrait<Herwig::IncomingPhotonEvolver,1> {
/** Typedef of the first base class of IncomingPhotonEvolver. */
typedef StepHandler NthBase;
};
/** This template specialization informs ThePEG about the name of
* the IncomingPhotonEvolver class and the shared object where it is defined. */
template <>
struct ClassTraits<Herwig::IncomingPhotonEvolver>
: public ClassTraitsBase<Herwig::IncomingPhotonEvolver> {
/** Return a platform-independent class name */
static string className() { return "Herwig::IncomingPhotonEvolver"; }
/**
* The name of a file containing the dynamic library where the class
* IncomingPhotonEvolver is implemented. It may also include several, space-separated,
* libraries if the class IncomingPhotonEvolver depends on other classes (base classes
* excepted). In this case the listed libraries will be dynamically
* linked in the order they are specified.
*/
static string library() { return "HwIncomingPhotonEvolver.so"; }
};
/** @endcond */
}
#endif /* HERWIG_IncomingPhotonEvolver_H */
diff --git a/PDF/mrst/2007/mrst2007lomod.dat b/PDF/mrst/2007/mrst2007lomod.dat
new file mode 100644
--- /dev/null
+++ b/PDF/mrst/2007/mrst2007lomod.dat
@@ -0,0 +1,1776 @@
+ 0.02366 0.01081 9.07020 0.83158 0.00000 0.00000 0.43256 0.83158
+ 0.02383 0.01095 12.48341 0.86348 0.00000 0.00000 0.46703 0.86348
+ 0.02408 0.01115 18.65619 0.93210 0.00000 0.00000 0.53938 0.93210
+ 0.02426 0.01129 23.97873 1.00041 0.06542 0.00000 0.61032 1.00041
+ 0.02445 0.01145 30.42459 1.09094 0.16238 0.00000 0.70356 1.09094
+ 0.02461 0.01158 36.72531 1.18593 0.26281 0.00000 0.80084 1.18593
+ 0.02476 0.01170 43.44030 1.29302 0.37502 0.00000 0.91008 1.29302
+ 0.02492 0.01184 51.31299 1.42510 0.51245 0.00000 1.04442 1.42510
+ 0.02506 0.01195 58.79745 1.55632 0.64823 0.00000 1.17756 1.55632
+ 0.02520 0.01207 66.60634 1.69841 0.79467 0.00000 1.32148 1.69841
+ 0.02531 0.01216 73.20739 1.82222 0.92187 0.00000 1.44672 1.82222
+ 0.02553 0.01234 88.53299 2.12126 1.22802 0.00172 1.74875 2.12126
+ 0.02573 0.01251 102.75306 2.41926 1.53204 0.30236 2.04929 2.41927
+ 0.02595 0.01269 120.16188 2.79906 1.91842 0.70038 2.43186 2.79906
+ 0.02617 0.01288 139.97977 3.24856 2.37463 1.16843 2.88419 3.24857
+ 0.02638 0.01305 159.48859 3.70700 2.83902 1.64333 3.34513 3.70700
+ 0.02658 0.01323 180.66284 4.22072 3.35864 2.17334 3.86133 4.22073
+ 0.02675 0.01337 199.37390 4.68746 3.83018 2.65335 4.33009 4.68747
+ 0.02696 0.01355 223.45438 5.30441 4.45286 3.28610 4.94945 5.30442
+ 0.02714 0.01371 246.03366 5.89830 5.05172 3.89372 5.54543 5.89830
+ 0.02731 0.01385 267.79172 6.48372 5.64164 4.49154 6.13274 6.48373
+ 0.02752 0.01403 296.84021 7.28408 6.44759 5.30734 6.93545 7.28408
+ 0.02772 0.01420 325.62436 8.09696 7.26566 6.13449 7.75051 8.09696
+ 0.02791 0.01436 353.88416 8.91304 8.08652 6.96373 8.56861 8.91305
+ 0.02810 0.01452 383.36743 9.78234 8.96051 7.84596 9.43988 9.78235
+ 0.02828 0.01468 413.42319 10.68644 9.86915 8.76253 10.34589 10.68645
+ 0.02845 0.01483 442.94604 11.59115 10.77809 9.67888 11.25238 11.59117
+ 0.02862 0.01497 471.72626 12.48836 11.67923 10.58689 12.15123 12.48837
+ 0.02878 0.01511 501.56931 13.43383 12.62861 11.54310 13.09835 13.43385
+ 0.02894 0.01525 531.82843 14.40778 13.60635 12.52746 14.07388 14.40779
+ 0.02910 0.01539 561.41571 15.37430 14.57644 13.50378 15.04191 15.37432
+ 0.02924 0.01551 590.14099 16.32567 15.53114 14.46430 15.99468 16.32568
+ 0.02939 0.01564 619.84021 17.32247 16.53127 15.47024 16.99288 17.32248
+ 0.02954 0.01577 649.84717 18.34259 17.55465 16.49930 18.01437 18.34261
+ 0.02968 0.01589 679.12280 19.35028 18.56542 17.51542 19.02335 19.35030
+ 0.02981 0.01600 707.48151 20.33768 19.55571 18.51075 20.01197 20.33770
+ 0.02994 0.01612 736.73621 21.36765 20.58858 19.54867 21.04315 21.36767
+ 0.02700 0.01348 7.96348 0.71306 0.00000 0.00000 0.37131 0.71306
+ 0.02720 0.01365 10.86776 0.74096 0.00000 0.00000 0.40142 0.74096
+ 0.02749 0.01390 16.03893 0.80013 0.00000 0.00000 0.46377 0.80013
+ 0.02771 0.01408 20.43001 0.85827 0.05570 0.00000 0.52417 0.85828
+ 0.02793 0.01427 25.68217 0.93452 0.13748 0.00000 0.60274 0.93453
+ 0.02812 0.01444 30.75863 1.01376 0.22139 0.00000 0.68394 1.01376
+ 0.02831 0.01460 36.11567 1.10233 0.31437 0.00000 0.77436 1.10234
+ 0.02850 0.01476 42.33580 1.21067 0.42730 0.00000 0.88463 1.21068
+ 0.02867 0.01491 48.19603 1.31747 0.53802 0.00000 0.99307 1.31747
+ 0.02883 0.01505 54.26094 1.43230 0.65659 0.00000 1.10947 1.43231
+ 0.02896 0.01516 59.35228 1.53176 0.75896 0.00000 1.21016 1.53177
+ 0.02924 0.01540 71.06065 1.77002 1.00334 0.00137 1.45098 1.77003
+ 0.02947 0.01560 81.78095 2.00507 1.24354 0.23937 1.68819 2.00508
+ 0.02974 0.01583 94.75594 2.30171 1.54584 0.55146 1.98721 2.30172
+ 0.03001 0.01607 109.35155 2.64921 1.89910 0.91466 2.33712 2.64922
+ 0.03026 0.01629 123.55772 3.00016 2.25517 1.27957 2.69022 3.00018
+ 0.03052 0.01650 138.81337 3.38985 2.64991 1.68304 3.08203 3.38987
+ 0.03072 0.01668 152.16571 3.74098 3.00517 2.04541 3.43489 3.74100
+ 0.03098 0.01690 169.18658 4.20131 3.47042 2.51912 3.89728 4.20134
+ 0.03120 0.01710 184.99269 4.64076 3.91414 2.97019 4.33852 4.64079
+ 0.03141 0.01728 200.09329 5.07076 4.34799 3.41067 4.77013 5.07078
+ 0.03167 0.01750 220.06784 5.65396 4.93600 4.00695 5.35535 5.65399
+ 0.03192 0.01772 239.66544 6.24129 5.52778 4.60635 5.94454 6.24132
+ 0.03215 0.01792 258.72931 6.82631 6.11690 5.20250 6.53128 6.82635
+ 0.03239 0.01812 278.44409 7.44481 6.73943 5.83194 7.15146 7.44485
+ 0.03261 0.01831 298.36728 8.08333 7.38184 6.48100 7.79161 8.08337
+ 0.03283 0.01850 317.77621 8.71782 8.01995 7.12532 8.42762 8.71786
+ 0.03303 0.01868 336.54990 9.34290 8.64841 7.75955 9.05411 9.34294
+ 0.03324 0.01885 355.87140 9.99745 9.30631 8.42317 9.71007 9.99751
+ 0.03344 0.01903 375.31610 10.66748 9.97959 9.10200 10.38146 10.66753
+ 0.03364 0.01919 394.19354 11.32841 10.64358 9.77122 11.04368 11.32847
+ 0.03382 0.01935 412.39755 11.97531 11.29334 10.42585 11.69177 11.97537
+ 0.03401 0.01951 431.09399 12.64933 11.97022 11.10760 12.36699 12.64939
+ 0.03419 0.01967 449.86148 13.33539 12.65907 11.80120 13.05421 13.33545
+ 0.03437 0.01982 468.05460 14.00947 13.33579 12.48241 13.72940 14.00954
+ 0.03454 0.01996 485.57220 14.66669 13.99549 13.14633 14.38766 14.66676
+ 0.03471 0.02010 503.53693 15.34889 14.68017 13.83524 15.07090 15.34897
+ 0.03069 0.01656 6.99648 0.61443 0.00000 0.00000 0.32026 0.61443
+ 0.03092 0.01677 9.46487 0.63885 0.00000 0.00000 0.34657 0.63885
+ 0.03126 0.01708 13.79128 0.68989 0.00000 0.00000 0.40035 0.68990
+ 0.03151 0.01730 17.40904 0.73940 0.04744 0.00000 0.45179 0.73941
+ 0.03177 0.01754 21.68345 0.80364 0.11643 0.00000 0.51802 0.80365
+ 0.03200 0.01774 25.76971 0.86976 0.18657 0.00000 0.58582 0.86977
+ 0.03222 0.01794 30.04086 0.94305 0.26365 0.00000 0.66070 0.94306
+ 0.03244 0.01814 34.95436 1.03198 0.35652 0.00000 0.75127 1.03199
+ 0.03264 0.01832 39.54406 1.11898 0.44690 0.00000 0.83968 1.11899
+ 0.03284 0.01849 44.25797 1.21190 0.54303 0.00000 0.93395 1.21192
+ 0.03299 0.01863 48.18958 1.29193 0.62556 0.00000 1.01502 1.29194
+ 0.03331 0.01892 57.15152 1.48213 0.82101 0.00109 1.20742 1.48215
+ 0.03359 0.01917 65.25593 1.66800 1.01131 0.19002 1.39514 1.66802
+ 0.03391 0.01945 74.96340 1.90046 1.24863 0.43556 1.62963 1.90048
+ 0.03424 0.01974 85.76724 2.17022 1.52334 0.71863 1.90146 2.17025
+ 0.03454 0.02001 96.17752 2.44026 1.79777 1.00048 2.17333 2.44029
+ 0.03484 0.02028 107.25268 2.73763 2.09948 1.30952 2.47252 2.73766
+ 0.03509 0.02050 116.86543 3.00361 2.36901 1.58502 2.73998 3.00365
+ 0.03539 0.02077 129.01874 3.34979 2.71941 1.94252 3.08793 3.34983
+ 0.03567 0.02101 140.21144 3.67786 3.05115 2.28043 3.41753 3.67791
+ 0.03591 0.02123 150.82655 3.99682 3.37341 2.60826 3.73787 3.99687
+ 0.03623 0.02150 164.75859 4.42647 3.80719 3.04898 4.16925 4.42652
+ 0.03653 0.02176 178.31473 4.85603 4.24057 3.48875 4.60040 4.85609
+ 0.03681 0.02201 191.40092 5.28105 4.66910 3.92318 5.02689 5.28111
+ 0.03710 0.02226 204.83585 5.72756 5.11907 4.37894 5.47485 5.72763
+ 0.03738 0.02250 218.31612 6.18567 5.58052 4.84598 5.93436 6.18575
+ 0.03764 0.02272 231.36015 6.63825 6.03621 5.30687 6.38823 6.63833
+ 0.03789 0.02294 243.89775 7.08170 6.48255 5.75805 6.83289 7.08178
+ 0.03814 0.02316 256.72339 7.54365 6.94738 6.22766 7.29604 7.54374
+ 0.03839 0.02337 269.55334 8.01408 7.42060 6.70554 7.76764 8.01418
+ 0.03863 0.02357 281.93805 8.47588 7.88502 7.17433 8.23053 8.47598
+ 0.03886 0.02376 293.81683 8.92579 8.33739 7.63079 8.68147 8.92590
+ 0.03909 0.02396 305.95276 9.39249 8.80654 8.10401 9.14919 9.39260
+ 0.03932 0.02415 318.07233 9.86545 9.28189 8.58335 9.62315 9.86556
+ 0.03953 0.02433 329.76175 10.32818 9.74689 9.05210 10.08683 10.32831
+ 0.03974 0.02451 340.96423 10.77755 10.19838 9.50713 10.53709 10.77768
+ 0.03995 0.02468 352.39966 11.24220 10.66516 9.97746 11.00263 11.24233
+ 0.03312 0.01871 6.48074 0.56323 0.00000 0.00000 0.29374 0.56323
+ 0.03338 0.01895 8.71949 0.58580 0.00000 0.00000 0.31805 0.58581
+ 0.03376 0.01930 12.60485 0.63256 0.00000 0.00000 0.36730 0.63257
+ 0.03404 0.01955 15.82258 0.67755 0.04310 0.00000 0.41404 0.67756
+ 0.03433 0.01981 19.59520 0.73552 0.10543 0.00000 0.47383 0.73553
+ 0.03458 0.02004 23.17697 0.79484 0.16841 0.00000 0.53468 0.79485
+ 0.03482 0.02026 26.89844 0.86025 0.23729 0.00000 0.60154 0.86026
+ 0.03508 0.02049 31.15475 0.93921 0.31985 0.00000 0.68200 0.93923
+ 0.03530 0.02070 35.10921 1.01610 0.39982 0.00000 0.76018 1.01612
+ 0.03552 0.02089 39.15126 1.09788 0.48453 0.00000 0.84318 1.09790
+ 0.03569 0.02104 42.50878 1.16805 0.55700 0.00000 0.91432 1.16808
+ 0.03606 0.02137 50.11974 1.33404 0.72779 0.00095 1.08231 1.33407
+ 0.03637 0.02166 56.94827 1.49530 0.89310 0.16527 1.24526 1.49534
+ 0.03673 0.02197 65.07397 1.69584 1.09808 0.37767 1.44765 1.69588
+ 0.03710 0.02230 74.05653 1.92721 1.33396 0.62108 1.68090 1.92725
+ 0.03744 0.02260 82.65697 2.15753 1.56829 0.86209 1.91290 2.15758
+ 0.03778 0.02290 91.75272 2.40987 1.82460 1.12500 2.16690 2.40993
+ 0.03807 0.02315 99.60578 2.63454 2.05251 1.35829 2.39292 2.63460
+ 0.03841 0.02346 109.48273 2.92564 2.34746 1.65963 2.68562 2.92570
+ 0.03872 0.02373 118.53139 3.20026 2.62542 1.94316 2.96164 3.20033
+ 0.03901 0.02397 127.07339 3.46618 2.89437 2.21712 3.22883 3.46626
+ 0.03937 0.02429 138.22931 3.82287 3.25483 2.58382 3.58709 3.82296
+ 0.03971 0.02458 149.02731 4.17788 3.61333 2.94807 3.94356 4.17798
+ 0.04004 0.02486 159.40056 4.52769 3.96634 3.30639 4.29470 4.52779
+ 0.04036 0.02513 170.00134 4.89374 4.33555 3.68081 4.66207 4.89384
+ 0.04068 0.02540 180.58994 5.26786 4.71272 4.06300 5.03746 5.26797
+ 0.04098 0.02566 190.79234 5.63612 5.08383 4.43879 5.40692 5.63625
+ 0.04127 0.02590 200.55952 5.99574 5.44609 4.80541 5.76764 5.99588
+ 0.04156 0.02615 210.51302 6.36917 5.82213 5.18576 6.14216 6.36930
+ 0.04185 0.02639 220.43213 6.74823 6.20375 5.57157 6.52229 6.74838
+ 0.04213 0.02662 229.97256 7.11922 6.57713 5.94888 6.89428 7.11937
+ 0.04239 0.02683 239.09229 7.47964 6.93979 6.31522 7.25563 7.47980
+ 0.04265 0.02705 248.37852 7.85247 7.31486 6.69395 7.62940 7.85264
+ 0.04291 0.02727 257.62228 8.22929 7.69387 7.07654 8.00713 8.22947
+ 0.04317 0.02747 266.50970 8.59700 8.06364 7.44970 8.37570 8.59719
+ 0.04341 0.02767 275.00174 8.95322 8.42180 7.81103 8.73273 8.95341
+ 0.04365 0.02787 283.64520 9.32067 8.79120 8.18361 9.10099 9.32086
+ 0.03498 0.02041 6.13536 0.52948 0.00000 0.00000 0.27625 0.52948
+ 0.03526 0.02067 8.22148 0.55082 0.00000 0.00000 0.29922 0.55083
+ 0.03568 0.02105 11.81531 0.59473 0.00000 0.00000 0.34546 0.59474
+ 0.03598 0.02132 14.77010 0.63672 0.04023 0.00000 0.38910 0.63673
+ 0.03630 0.02161 18.21447 0.69056 0.09814 0.00000 0.44464 0.69057
+ 0.03657 0.02186 21.46766 0.74539 0.15642 0.00000 0.50091 0.74541
+ 0.03683 0.02210 24.83249 0.80563 0.21990 0.00000 0.56250 0.80565
+ 0.03711 0.02235 28.66401 0.87806 0.29572 0.00000 0.63634 0.87809
+ 0.03736 0.02257 32.20930 0.94835 0.36890 0.00000 0.70784 0.94838
+ 0.03759 0.02279 35.81995 1.02288 0.44617 0.00000 0.78351 1.02292
+ 0.03778 0.02295 38.80980 1.08666 0.51210 0.00000 0.84819 1.08670
+ 0.03818 0.02331 45.55868 1.23698 0.66691 0.00086 1.00038 1.23702
+ 0.03853 0.02362 51.57695 1.38236 0.81609 0.14930 1.14734 1.38241
+ 0.03892 0.02396 58.70229 1.56239 1.00028 0.34036 1.32911 1.56245
+ 0.03933 0.02432 66.53792 1.76917 1.21129 0.55836 1.53766 1.76924
+ 0.03970 0.02465 74.00317 1.97416 1.42004 0.77330 1.74422 1.97423
+ 0.04008 0.02498 81.86190 2.19787 1.64746 1.00685 1.96947 2.19795
+ 0.04040 0.02525 88.61882 2.39635 1.84898 1.21335 2.16922 2.39644
+ 0.04078 0.02558 97.08227 2.65263 2.10886 1.47917 2.42700 2.65272
+ 0.04113 0.02587 104.80379 2.89356 2.35293 1.72838 2.66924 2.89366
+ 0.04144 0.02614 112.06613 3.12614 2.58835 1.96844 2.90301 3.12625
+ 0.04184 0.02648 121.51340 3.43708 2.90282 2.28871 3.21542 3.43720
+ 0.04222 0.02681 130.61909 3.74548 3.21449 2.60571 3.52519 3.74561
+ 0.04258 0.02711 139.33240 4.04838 3.52039 2.91652 3.82934 4.04852
+ 0.04294 0.02741 148.20369 4.36437 3.83934 3.24031 4.14656 4.36452
+ 0.04330 0.02770 157.03224 4.68636 4.16419 3.56981 4.46975 4.68652
+ 0.04363 0.02798 165.50919 5.00242 4.48290 3.89286 4.78691 5.00258
+ 0.04395 0.02824 173.59793 5.31023 4.79319 4.20718 5.09576 5.31041
+ 0.04428 0.02851 181.81505 5.62904 5.11447 4.53245 5.41560 5.62923
+ 0.04460 0.02877 189.97807 5.95187 5.43968 4.86154 5.73942 5.95206
+ 0.04490 0.02902 197.80595 6.26705 5.75710 5.18261 6.05554 6.26725
+ 0.04519 0.02925 205.26749 6.57256 6.06472 5.49363 6.36193 6.57278
+ 0.04549 0.02949 212.84416 6.88790 6.38215 5.81446 6.67815 6.88813
+ 0.04578 0.02972 220.36563 7.20593 6.70223 6.13786 6.99703 7.20616
+ 0.04606 0.02995 227.57787 7.51562 7.01386 6.45261 7.30753 7.51586
+ 0.04633 0.03016 234.45189 7.81503 7.31509 6.75679 7.60771 7.81529
+ 0.04660 0.03038 241.43127 8.12330 7.62519 7.06983 7.91674 8.12357
+ 0.03648 0.02180 5.88041 0.50498 0.00000 0.00000 0.26355 0.50498
+ 0.03678 0.02208 7.85486 0.52542 0.00000 0.00000 0.28554 0.52543
+ 0.03722 0.02248 11.23652 0.56724 0.00000 0.00000 0.32957 0.56725
+ 0.03754 0.02278 14.00105 0.60703 0.03813 0.00000 0.37093 0.60705
+ 0.03788 0.02309 17.20911 0.65786 0.09283 0.00000 0.42338 0.65788
+ 0.03817 0.02335 20.22689 0.70945 0.14769 0.00000 0.47633 0.70947
+ 0.03845 0.02361 23.33732 0.76594 0.20727 0.00000 0.53411 0.76597
+ 0.03875 0.02388 26.86715 0.83368 0.27822 0.00000 0.60319 0.83371
+ 0.03901 0.02411 30.12302 0.89923 0.34652 0.00000 0.66988 0.89927
+ 0.03926 0.02434 33.42966 0.96857 0.41847 0.00000 0.74031 0.96861
+ 0.03946 0.02452 36.16127 1.02779 0.47973 0.00000 0.80038 1.02783
+ 0.03989 0.02490 42.30732 1.16695 0.62317 0.00080 0.94132 1.16700
+ 0.04027 0.02523 47.76242 1.30109 0.76091 0.13797 1.07697 1.30115
+ 0.04069 0.02560 54.19625 1.46666 0.93044 0.31398 1.24419 1.46673
+ 0.04113 0.02598 61.24351 1.65619 1.12399 0.51412 1.43539 1.65627
+ 0.04153 0.02633 67.93269 1.84348 1.31486 0.71082 1.62418 1.84357
+ 0.04193 0.02668 74.94997 2.04727 1.52218 0.92392 1.82944 2.04737
+ 0.04227 0.02697 80.96469 2.22760 1.70540 1.11184 2.01098 2.22771
+ 0.04269 0.02732 88.47541 2.45984 1.94107 1.35310 2.24464 2.45995
+ 0.04306 0.02764 95.30652 2.67760 2.16181 1.57870 2.46365 2.67772
+ 0.04340 0.02792 101.71379 2.88733 2.37423 1.79550 2.67451 2.88747
+ 0.04383 0.02829 110.02437 3.16704 2.65730 2.08402 2.95561 3.16719
+ 0.04424 0.02863 118.00949 3.44374 2.93710 2.36885 3.23361 3.44389
+ 0.04463 0.02895 125.62845 3.71485 3.21107 2.64745 3.50591 3.71501
+ 0.04502 0.02927 133.36423 3.99704 3.49607 2.93701 3.78927 3.99721
+ 0.04540 0.02958 141.04193 4.28394 3.78569 3.23101 4.07731 4.28413
+ 0.04577 0.02988 148.39502 4.56497 4.06925 3.51866 4.35940 4.56518
+ 0.04612 0.03016 155.39447 4.83814 4.34477 3.79798 4.63355 4.83835
+ 0.04647 0.03044 162.48862 5.12054 4.62951 4.08649 4.91693 5.12077
+ 0.04681 0.03072 169.51987 5.40596 4.91720 4.37783 5.20329 5.40620
+ 0.04715 0.03099 176.24768 5.68414 5.19752 4.66158 5.48236 5.68439
+ 0.04746 0.03124 182.64737 5.95334 5.46872 4.93599 5.75240 5.95360
+ 0.04778 0.03149 189.13263 6.23075 5.74812 5.21859 6.03065 6.23102
+ 0.04810 0.03174 195.55785 6.51009 6.02941 5.50301 6.31080 6.51038
+ 0.04840 0.03198 201.70689 6.78169 6.30285 5.77939 6.58317 6.78198
+ 0.04869 0.03220 207.55687 7.04391 6.56680 6.04611 6.84611 7.04421
+ 0.04899 0.03243 213.48586 7.31350 6.83812 6.32022 7.11642 7.31381
+ 0.04163 0.02675 5.15040 0.43649 0.00000 0.00000 0.22804 0.43650
+ 0.04200 0.02709 6.80841 0.45436 0.00000 0.00000 0.24723 0.45438
+ 0.04255 0.02759 9.59410 0.49027 0.00000 0.00000 0.28502 0.49029
+ 0.04295 0.02795 11.82906 0.52388 0.03221 0.00000 0.31997 0.52391
+ 0.04337 0.02832 14.38445 0.56626 0.07790 0.00000 0.36373 0.56630
+ 0.04374 0.02865 16.75673 0.60879 0.12322 0.00000 0.40742 0.60883
+ 0.04409 0.02896 19.17403 0.65489 0.17195 0.00000 0.45462 0.65495
+ 0.04447 0.02929 21.88703 0.70964 0.22945 0.00000 0.51051 0.70971
+ 0.04480 0.02958 24.36397 0.76216 0.28431 0.00000 0.56401 0.76223
+ 0.04512 0.02986 26.85673 0.81727 0.34165 0.00000 0.62005 0.81735
+ 0.04537 0.03008 28.90009 0.86403 0.39014 0.00000 0.66753 0.86411
+ 0.04592 0.03054 33.44957 0.97291 0.50267 0.00062 0.77793 0.97301
+ 0.04639 0.03095 37.42582 1.07671 0.60955 0.10734 0.88302 1.07682
+ 0.04693 0.03140 42.05719 1.20349 0.73971 0.24289 1.01121 1.20362
+ 0.04749 0.03186 47.06540 1.34705 0.88671 0.39536 1.15620 1.34720
+ 0.04801 0.03229 51.76191 1.48747 1.03018 0.54368 1.29790 1.48764
+ 0.04853 0.03272 56.63353 1.63882 1.18454 0.70284 1.45050 1.63900
+ 0.04897 0.03307 60.76723 1.77161 1.31979 0.84200 1.58432 1.77181
+ 0.04951 0.03350 65.87799 1.94120 1.49232 1.01916 1.75514 1.94142
+ 0.04998 0.03389 70.47986 2.09890 1.65256 1.18344 1.91390 2.09913
+ 0.05043 0.03424 74.75804 2.24967 1.80563 1.34014 2.06563 2.24992
+ 0.05099 0.03468 80.25473 2.44917 2.00800 1.54704 2.26633 2.44944
+ 0.05152 0.03510 85.48305 2.64490 2.20638 1.74959 2.46316 2.64519
+ 0.05203 0.03549 90.42516 2.83520 2.39913 1.94619 2.65449 2.83551
+ 0.05254 0.03588 95.39863 3.03187 2.59820 2.14903 2.85216 3.03220
+ 0.05304 0.03626 100.29173 3.23041 2.79906 2.35353 3.05167 3.23076
+ 0.05351 0.03662 104.93932 3.42359 2.99441 2.55227 3.24577 3.42396
+ 0.05397 0.03697 109.32909 3.61021 3.18304 2.74405 3.43323 3.61060
+ 0.05442 0.03731 113.74519 3.80200 3.37683 2.94096 3.62585 3.80241
+ 0.05488 0.03765 118.08972 3.99471 3.57148 3.13864 3.81937 3.99514
+ 0.05531 0.03797 122.21742 4.18148 3.76008 3.33009 4.00691 4.18193
+ 0.05573 0.03827 126.11768 4.36129 3.94160 3.51427 4.18744 4.36176
+ 0.05614 0.03858 130.04422 4.54565 4.12766 3.70299 4.37251 4.54614
+ 0.05656 0.03888 133.90953 4.73037 4.31406 3.89197 4.55793 4.73088
+ 0.05696 0.03917 137.58543 4.90911 4.49437 4.07472 4.73733 4.90963
+ 0.05734 0.03945 141.06190 5.08089 4.66764 4.25029 4.90974 5.08144
+ 0.05773 0.03973 144.56499 5.25674 4.84497 4.42992 5.08621 5.25730
+ 0.04768 0.03277 4.50643 0.37823 0.00000 0.00000 0.19783 0.37825
+ 0.04815 0.03318 5.88895 0.39389 0.00000 0.00000 0.21461 0.39392
+ 0.04886 0.03379 8.16341 0.42468 0.00000 0.00000 0.24700 0.42473
+ 0.04938 0.03423 9.95090 0.45297 0.02712 0.00000 0.27644 0.45304
+ 0.04992 0.03469 11.96176 0.48814 0.06510 0.00000 0.31278 0.48822
+ 0.05040 0.03509 13.80173 0.52298 0.10231 0.00000 0.34861 0.52307
+ 0.05086 0.03547 15.65330 0.56034 0.14191 0.00000 0.38690 0.56045
+ 0.05136 0.03588 17.70631 0.60423 0.18814 0.00000 0.43178 0.60436
+ 0.05179 0.03623 19.55978 0.64594 0.23184 0.00000 0.47431 0.64608
+ 0.05221 0.03657 21.40660 0.68933 0.27712 0.00000 0.51850 0.68948
+ 0.05254 0.03684 22.90765 0.72587 0.31515 0.00000 0.55566 0.72604
+ 0.05326 0.03741 26.21148 0.81013 0.40252 0.00048 0.64122 0.81033
+ 0.05389 0.03790 29.04941 0.88951 0.48452 0.08262 0.72170 0.88973
+ 0.05460 0.03845 32.30956 0.98537 0.58326 0.18582 0.81877 0.98562
+ 0.05535 0.03903 35.78522 1.09265 0.69347 0.30054 0.92727 1.09293
+ 0.05603 0.03955 39.00108 1.19642 0.79985 0.41093 1.03214 1.19674
+ 0.05673 0.04007 42.29527 1.30713 0.91313 0.52818 1.14392 1.30747
+ 0.05731 0.04050 45.05922 1.40338 1.01148 0.62975 1.24106 1.40375
+ 0.05802 0.04103 48.43869 1.52521 1.13581 0.75792 1.36393 1.52561
+ 0.05866 0.04150 51.44758 1.63747 1.25025 0.87569 1.47711 1.63790
+ 0.05925 0.04192 54.21704 1.74394 1.35869 0.98713 1.58441 1.74440
+ 0.06000 0.04247 57.73747 1.88364 1.50085 1.13303 1.72514 1.88414
+ 0.06071 0.04297 61.04794 2.01948 1.63895 1.27457 1.86193 2.02001
+ 0.06139 0.04345 64.14410 2.15046 1.77202 1.41082 1.99380 2.15103
+ 0.06206 0.04393 67.22849 2.28476 1.90839 1.55031 2.12897 2.28536
+ 0.06273 0.04439 70.23277 2.41932 2.04493 1.68985 2.26436 2.41995
+ 0.06337 0.04483 73.05930 2.54930 2.17677 1.82449 2.39512 2.54997
+ 0.06398 0.04525 75.70518 2.67402 2.30322 1.95353 2.52057 2.67472
+ 0.06459 0.04567 78.34405 2.80137 2.43228 2.08518 2.64864 2.80210
+ 0.06519 0.04608 80.91782 2.92852 2.56110 2.21650 2.77650 2.92929
+ 0.06577 0.04647 83.34300 3.05101 2.68517 2.34291 2.89965 3.05181
+ 0.06633 0.04684 85.61670 3.16827 2.80389 2.46383 3.01753 3.16910
+ 0.06689 0.04721 87.88810 3.28783 2.92492 2.58705 3.13771 3.28869
+ 0.06744 0.04758 90.10722 3.40698 3.04551 2.70977 3.25746 3.40787
+ 0.06797 0.04793 92.20187 3.52166 3.16154 2.82782 3.37272 3.52258
+ 0.06848 0.04826 94.16901 3.63134 3.27250 2.94068 3.48294 3.63229
+ 0.06900 0.04860 96.13747 3.74307 3.38552 3.05559 3.59521 3.74406
+ 0.05176 0.03686 4.16730 0.34837 0.00000 0.00000 0.18235 0.34840
+ 0.05232 0.03732 5.40540 0.36289 0.00000 0.00000 0.19789 0.36294
+ 0.05315 0.03801 7.41548 0.39102 0.00000 0.00000 0.22749 0.39111
+ 0.05377 0.03851 8.97463 0.41658 0.02449 0.00000 0.25409 0.41668
+ 0.05442 0.03903 10.71075 0.44803 0.05850 0.00000 0.28662 0.44816
+ 0.05499 0.03948 12.28489 0.47894 0.09157 0.00000 0.31843 0.47909
+ 0.05554 0.03991 13.85649 0.51186 0.12652 0.00000 0.35220 0.51202
+ 0.05613 0.04037 15.58577 0.55027 0.16706 0.00000 0.39151 0.55047
+ 0.05664 0.04076 17.13596 0.58654 0.20515 0.00000 0.42854 0.58676
+ 0.05714 0.04115 18.67086 0.62408 0.24441 0.00000 0.46680 0.62432
+ 0.05754 0.04145 19.91170 0.65555 0.27723 0.00000 0.49883 0.65580
+ 0.05840 0.04209 22.62300 0.72766 0.35217 0.00041 0.57214 0.72795
+ 0.05915 0.04265 24.92589 0.79509 0.42199 0.07050 0.64057 0.79541
+ 0.06000 0.04327 27.54815 0.87594 0.50547 0.15795 0.72253 0.87631
+ 0.06090 0.04392 30.31849 0.96575 0.59795 0.25447 0.81346 0.96616
+ 0.06171 0.04450 32.85975 1.05204 0.68661 0.34671 0.90075 1.05249
+ 0.06255 0.04509 35.44203 1.14349 0.78042 0.44405 0.99320 1.14399
+ 0.06325 0.04558 37.59300 1.22255 0.86140 0.52791 1.07307 1.22308
+ 0.06410 0.04617 40.20416 1.32206 0.96320 0.63313 1.17354 1.32264
+ 0.06486 0.04670 42.51210 1.41324 1.05637 0.72927 1.26556 1.41386
+ 0.06557 0.04718 44.62263 1.49929 1.14422 0.81980 1.35237 1.49994
+ 0.06647 0.04779 47.28684 1.61160 1.25877 0.93769 1.46563 1.61230
+ 0.06732 0.04836 49.77347 1.72018 1.36943 1.05143 1.57509 1.72093
+ 0.06813 0.04889 52.08295 1.82435 1.47552 1.16034 1.68007 1.82515
+ 0.06894 0.04943 54.36831 1.93063 1.58369 1.27130 1.78715 1.93148
+ 0.06974 0.04995 56.57959 2.03660 1.69149 1.38178 1.89390 2.03750
+ 0.07050 0.05044 58.64695 2.13851 1.79510 1.48789 1.99653 2.13945
+ 0.07122 0.05091 60.57061 2.23588 1.89406 1.58916 2.09457 2.23687
+ 0.07196 0.05138 62.47810 2.33491 1.99467 1.69207 2.19427 2.33594
+ 0.07268 0.05184 64.32774 2.43338 2.09467 1.79430 2.29339 2.43445
+ 0.07337 0.05227 66.06090 2.52788 2.19062 1.89235 2.38851 2.52900
+ 0.07403 0.05269 67.67719 2.61803 2.28212 1.98581 2.47923 2.61919
+ 0.07470 0.05310 69.28337 2.70962 2.37507 2.08070 2.57140 2.71082
+ 0.07536 0.05351 70.84445 2.80059 2.46736 2.17490 2.66293 2.80183
+ 0.07599 0.05390 72.31041 2.88786 2.55588 2.26522 2.75073 2.88914
+ 0.07660 0.05428 73.68045 2.97106 2.64026 2.35129 2.83443 2.97238
+ 0.07721 0.05465 75.04483 3.05556 2.72594 2.43866 2.91944 3.05692
+ 0.05502 0.04007 3.94328 0.32887 0.00000 0.00000 0.17226 0.32892
+ 0.05565 0.04058 5.08547 0.34264 0.00000 0.00000 0.18699 0.34272
+ 0.05661 0.04132 6.92158 0.36904 0.00000 0.00000 0.21476 0.36916
+ 0.05731 0.04187 8.33185 0.39279 0.02276 0.00000 0.23949 0.39293
+ 0.05805 0.04244 9.89013 0.42182 0.05418 0.00000 0.26953 0.42200
+ 0.05870 0.04293 11.29336 0.45016 0.08455 0.00000 0.29872 0.45037
+ 0.05933 0.04340 12.68598 0.48019 0.11648 0.00000 0.32955 0.48042
+ 0.06001 0.04390 14.20950 0.51506 0.15334 0.00000 0.36525 0.51532
+ 0.06060 0.04433 15.56791 0.54782 0.18780 0.00000 0.39873 0.54811
+ 0.06117 0.04475 16.90650 0.58159 0.22319 0.00000 0.43319 0.58191
+ 0.06163 0.04508 17.98423 0.60980 0.25267 0.00000 0.46193 0.61015
+ 0.06262 0.04578 20.32610 0.67416 0.31968 0.00037 0.52741 0.67455
+ 0.06348 0.04639 22.29790 0.73399 0.38176 0.06279 0.58819 0.73443
+ 0.06445 0.04707 24.52796 0.80536 0.45558 0.14028 0.66059 0.80585
+ 0.06547 0.04777 26.86749 0.88419 0.53692 0.22534 0.74049 0.88473
+ 0.06641 0.04841 28.99929 0.95953 0.61450 0.30621 0.81677 0.96013
+ 0.06737 0.04905 31.15196 1.03900 0.69618 0.39115 0.89718 1.03965
+ 0.06817 0.04958 32.93495 1.10741 0.76639 0.46402 0.96635 1.10810
+ 0.06914 0.05023 35.08725 1.19313 0.85427 0.55505 1.05299 1.19389
+ 0.07001 0.05080 36.97872 1.27135 0.93436 0.63788 1.13200 1.27216
+ 0.07082 0.05132 38.69954 1.34489 1.00960 0.71558 1.20626 1.34574
+ 0.07185 0.05198 40.85984 1.44048 1.10731 0.81637 1.30275 1.44140
+ 0.07282 0.05260 42.86415 1.53251 1.20129 0.91319 1.39562 1.53349
+ 0.07374 0.05318 44.71528 1.62045 1.29104 1.00555 1.48432 1.62148
+ 0.07467 0.05376 46.53725 1.70983 1.38222 1.09929 1.57447 1.71093
+ 0.07558 0.05433 48.29073 1.79863 1.47274 1.19228 1.66401 1.79979
+ 0.07645 0.05487 49.92167 1.88373 1.55945 1.28129 1.74979 1.88494
+ 0.07728 0.05537 51.43184 1.96478 1.64200 1.36597 1.83148 1.96604
+ 0.07811 0.05588 52.92221 2.04695 1.72566 1.45175 1.91429 2.04827
+ 0.07893 0.05637 54.36046 2.12841 1.80857 1.53672 1.99636 2.12978
+ 0.07972 0.05684 55.70192 2.20635 1.88788 1.61797 2.07489 2.20778
+ 0.08046 0.05729 56.94738 2.28050 1.96331 1.69520 2.14959 2.28198
+ 0.08122 0.05774 58.17962 2.35563 2.03972 1.77341 2.22527 2.35716
+ 0.08197 0.05818 59.37204 2.43006 2.11540 1.85085 2.30023 2.43164
+ 0.08269 0.05861 60.48693 2.50127 2.18780 1.92490 2.37195 2.50290
+ 0.08338 0.05901 61.52457 2.56900 2.25665 1.99531 2.44016 2.57068
+ 0.08407 0.05941 62.55368 2.63763 2.32640 2.06662 2.50927 2.63935
+ 0.05772 0.04273 3.77879 0.31470 0.00000 0.00000 0.16494 0.31478
+ 0.05843 0.04327 4.85035 0.32794 0.00000 0.00000 0.17908 0.32804
+ 0.05949 0.04407 6.55933 0.35307 0.00000 0.00000 0.20552 0.35322
+ 0.06027 0.04465 7.86163 0.37551 0.02151 0.00000 0.22889 0.37569
+ 0.06110 0.04526 9.29176 0.40278 0.05104 0.00000 0.25712 0.40300
+ 0.06182 0.04579 10.57253 0.42926 0.07945 0.00000 0.28441 0.42952
+ 0.06252 0.04629 11.83758 0.45719 0.10920 0.00000 0.31311 0.45749
+ 0.06327 0.04683 13.21516 0.48950 0.14339 0.00000 0.34622 0.48983
+ 0.06393 0.04729 14.43820 0.51975 0.17526 0.00000 0.37715 0.52011
+ 0.06457 0.04774 15.63881 0.55082 0.20787 0.00000 0.40887 0.55122
+ 0.06508 0.04809 16.60230 0.57671 0.23496 0.00000 0.43527 0.57713
+ 0.06618 0.04884 18.68669 0.63554 0.29632 0.00034 0.49517 0.63603
+ 0.06713 0.04949 20.42936 0.68999 0.35291 0.05732 0.55053 0.69053
+ 0.06822 0.05022 22.38960 0.75466 0.41992 0.12777 0.61620 0.75526
+ 0.06935 0.05097 24.43460 0.82578 0.49344 0.20478 0.68833 0.82645
+ 0.07040 0.05165 26.28814 0.89347 0.56326 0.27769 0.75693 0.89420
+ 0.07146 0.05234 28.15049 0.96460 0.63650 0.35399 0.82896 0.96539
+ 0.07235 0.05291 29.68606 1.02561 0.69924 0.41922 0.89071 1.02646
+ 0.07343 0.05360 31.53139 1.10182 0.77751 0.50045 0.96779 1.10274
+ 0.07440 0.05421 33.14566 1.17112 0.84860 0.57411 1.03785 1.17210
+ 0.07530 0.05476 34.60829 1.23608 0.91518 0.64301 1.10351 1.23712
+ 0.07644 0.05547 36.43635 1.32026 1.00138 0.73210 1.18855 1.32137
+ 0.07752 0.05613 38.12432 1.40102 1.08402 0.81740 1.27011 1.40220
+ 0.07854 0.05675 39.67632 1.47796 1.16270 0.89852 1.34779 1.47921
+ 0.07957 0.05737 41.19726 1.55593 1.24238 0.98062 1.42650 1.55725
+ 0.08058 0.05797 42.65473 1.63317 1.32128 1.06183 1.50445 1.63456
+ 0.08154 0.05854 44.00474 1.70700 1.39665 1.13936 1.57894 1.70845
+ 0.08245 0.05907 45.24985 1.77713 1.46822 1.21293 1.64968 1.77864
+ 0.08337 0.05961 46.47392 1.84805 1.54058 1.28728 1.72122 1.84963
+ 0.08428 0.06014 47.65060 1.91820 1.61212 1.36075 1.79196 1.91984
+ 0.08515 0.06064 48.74395 1.98516 1.68040 1.43085 1.85950 1.98687
+ 0.08597 0.06112 49.75541 2.04873 1.74520 1.49734 1.92359 2.05050
+ 0.08681 0.06159 50.75253 2.11300 1.81071 1.56454 1.98840 2.11483
+ 0.08763 0.06206 51.71397 2.17654 1.87545 1.63093 2.05246 2.17843
+ 0.08843 0.06251 52.60968 2.23722 1.93727 1.69431 2.11362 2.23916
+ 0.08918 0.06294 53.44049 2.29482 1.99595 1.75445 2.17168 2.29681
+ 0.08995 0.06336 54.26169 2.35307 2.05528 1.81525 2.23040 2.35512
+ 0.06794 0.05219 3.32287 0.27537 0.00000 0.00000 0.14466 0.27557
+ 0.06896 0.05288 4.19249 0.28713 0.00000 0.00000 0.15721 0.28739
+ 0.07049 0.05388 5.54340 0.30872 0.00000 0.00000 0.17995 0.30908
+ 0.07162 0.05461 6.54571 0.32748 0.01801 0.00000 0.19953 0.32791
+ 0.07281 0.05537 7.62371 0.34982 0.04230 0.00000 0.22270 0.35032
+ 0.07386 0.05603 8.57133 0.37113 0.06528 0.00000 0.24473 0.37170
+ 0.07486 0.05666 9.49230 0.39328 0.08900 0.00000 0.26756 0.39392
+ 0.07594 0.05732 10.47950 0.41854 0.11590 0.00000 0.29352 0.41925
+ 0.07688 0.05790 11.34317 0.44189 0.14066 0.00000 0.31748 0.44266
+ 0.07780 0.05846 12.17996 0.46561 0.16572 0.00000 0.34177 0.46644
+ 0.07853 0.05890 12.84397 0.48519 0.18634 0.00000 0.36180 0.48607
+ 0.08010 0.05983 14.25869 0.52911 0.23247 0.00025 0.40667 0.53010
+ 0.08146 0.06064 15.41185 0.56914 0.27438 0.04267 0.44752 0.57023
+ 0.08300 0.06154 16.68438 0.61600 0.32330 0.09441 0.49526 0.61720
+ 0.08462 0.06247 17.98583 0.66677 0.37617 0.15015 0.54694 0.66808
+ 0.08609 0.06331 19.14318 0.71440 0.42569 0.20221 0.59539 0.71583
+ 0.08759 0.06416 20.28525 0.76381 0.47696 0.25600 0.64561 0.76535
+ 0.08885 0.06486 21.21159 0.80570 0.52038 0.30146 0.68816 0.80733
+ 0.09037 0.06571 22.30664 0.85742 0.57393 0.35744 0.74067 0.85916
+ 0.09173 0.06645 23.24849 0.90390 0.62201 0.40764 0.78785 0.90576
+ 0.09298 0.06714 24.08894 0.94704 0.66659 0.45412 0.83162 0.94899
+ 0.09457 0.06800 25.12208 1.00232 0.72369 0.51359 0.88769 1.00440
+ 0.09607 0.06880 26.05892 1.05476 0.77780 0.56989 0.94086 1.05695
+ 0.09748 0.06956 26.90561 1.10417 0.82878 0.62288 0.99095 1.10647
+ 0.09890 0.07030 27.72158 1.15375 0.87989 0.67598 1.04120 1.15616
+ 0.10029 0.07103 28.49040 1.20236 0.93000 0.72799 1.09046 1.20489
+ 0.10161 0.07172 29.19095 1.24839 0.97742 0.77719 1.13710 1.25102
+ 0.10286 0.07237 29.82691 1.29172 1.02206 0.82349 1.18100 1.29446
+ 0.10411 0.07301 30.44246 1.33518 1.06682 0.86988 1.22503 1.33802
+ 0.10535 0.07365 31.02482 1.37780 1.11070 0.91535 1.26820 1.38073
+ 0.10653 0.07425 31.55755 1.41815 1.15226 0.95840 1.30908 1.42119
+ 0.10764 0.07481 32.04296 1.45617 1.19139 0.99893 1.34758 1.45929
+ 0.10877 0.07538 32.51421 1.49432 1.23067 1.03960 1.38623 1.49754
+ 0.10989 0.07594 32.96166 1.53176 1.26922 1.07950 1.42415 1.53507
+ 0.11096 0.07647 33.37206 1.56725 1.30576 1.11732 1.46010 1.57065
+ 0.11197 0.07698 33.74701 1.60072 1.34021 1.15299 1.49400 1.60421
+ 0.11299 0.07748 34.11201 1.63435 1.37483 1.18881 1.52807 1.63792
+ 0.08231 0.06391 2.95777 0.24233 0.00000 0.00000 0.12778 0.24292
+ 0.08384 0.06478 3.64843 0.25286 0.00000 0.00000 0.13903 0.25357
+ 0.08612 0.06606 4.69052 0.27143 0.00000 0.00000 0.15864 0.27232
+ 0.08780 0.06699 5.44040 0.28704 0.01506 0.00000 0.17500 0.28806
+ 0.08958 0.06796 6.22800 0.30517 0.03495 0.00000 0.19391 0.30634
+ 0.09112 0.06879 6.90575 0.32211 0.05340 0.00000 0.21151 0.32340
+ 0.09260 0.06959 7.55226 0.33941 0.07212 0.00000 0.22943 0.34083
+ 0.09418 0.07044 8.23271 0.35882 0.09301 0.00000 0.24950 0.36037
+ 0.09557 0.07116 8.81788 0.37649 0.11196 0.00000 0.26773 0.37816
+ 0.09691 0.07187 9.37617 0.39421 0.13090 0.00000 0.28599 0.39599
+ 0.09797 0.07242 9.81333 0.40867 0.14632 0.00000 0.30087 0.41054
+ 0.10024 0.07360 10.72795 0.44065 0.18032 0.00018 0.33375 0.44271
+ 0.10222 0.07460 11.44966 0.46928 0.21067 0.03115 0.36314 0.47151
+ 0.10443 0.07573 12.22743 0.50223 0.24553 0.06833 0.39693 0.50466
+ 0.10674 0.07689 13.00342 0.53731 0.28256 0.10773 0.43288 0.53994
+ 0.10884 0.07793 13.67704 0.56970 0.31669 0.14397 0.46604 0.57251
+ 0.11097 0.07898 14.32654 0.60278 0.35151 0.18086 0.49989 0.60578
+ 0.11273 0.07984 14.84218 0.63044 0.38061 0.21165 0.52819 0.63360
+ 0.11487 0.08088 15.43860 0.66415 0.41603 0.24909 0.56266 0.66750
+ 0.11677 0.08179 15.93998 0.69403 0.44742 0.28222 0.59321 0.69756
+ 0.11851 0.08262 16.37811 0.72143 0.47618 0.31257 0.62122 0.72511
+ 0.12071 0.08366 16.90435 0.75610 0.51257 0.35092 0.65665 0.75998
+ 0.12278 0.08463 17.36934 0.78854 0.54660 0.38676 0.68979 0.79261
+ 0.12472 0.08554 17.77913 0.81872 0.57826 0.42010 0.72063 0.82296
+ 0.12665 0.08644 18.16429 0.84863 0.60964 0.45312 0.75120 0.85306
+ 0.12854 0.08731 18.51786 0.87762 0.64005 0.48511 0.78082 0.88221
+ 0.13033 0.08813 18.83179 0.90475 0.66852 0.51506 0.80855 0.90951
+ 0.13201 0.08889 19.10953 0.93002 0.69505 0.54295 0.83438 0.93494
+ 0.13369 0.08965 19.37145 0.95510 0.72138 0.57065 0.86002 0.96017
+ 0.13534 0.09040 19.61252 0.97945 0.74694 0.59753 0.88490 0.98467
+ 0.13691 0.09110 19.82699 1.00227 0.77092 0.62275 0.90824 1.00764
+ 0.13839 0.09176 20.01704 1.02357 0.79331 0.64629 0.93003 1.02908
+ 0.13989 0.09243 20.19625 1.04475 0.81558 0.66972 0.95169 1.05040
+ 0.14135 0.09307 20.36129 1.06535 0.83724 0.69252 0.97276 1.07113
+ 0.14275 0.09369 20.50790 1.08470 0.85761 0.71395 0.99257 1.09061
+ 0.14408 0.09427 20.63760 1.10280 0.87666 0.73400 1.01109 1.10883
+ 0.14541 0.09485 20.75964 1.12082 0.89565 0.75400 1.02954 1.12698
+ 0.09402 0.07221 2.79352 0.22537 0.00000 0.00000 0.11922 0.22648
+ 0.09598 0.07323 3.38785 0.23525 0.00000 0.00000 0.12981 0.23654
+ 0.09890 0.07472 4.26803 0.25222 0.00000 0.00000 0.14780 0.25376
+ 0.10103 0.07580 4.88859 0.26615 0.01355 0.00000 0.16248 0.26790
+ 0.10328 0.07693 5.53019 0.28208 0.03119 0.00000 0.17917 0.28403
+ 0.10523 0.07790 6.07452 0.29675 0.04732 0.00000 0.19449 0.29888
+ 0.10710 0.07882 6.58728 0.31155 0.06351 0.00000 0.20992 0.31386
+ 0.10909 0.07979 7.12031 0.32797 0.08138 0.00000 0.22699 0.33046
+ 0.11082 0.08063 7.57336 0.34277 0.09744 0.00000 0.24236 0.34543
+ 0.11249 0.08144 8.00101 0.35748 0.11335 0.00000 0.25761 0.36030
+ 0.11382 0.08208 8.33279 0.36940 0.12622 0.00000 0.26995 0.37234
+ 0.11664 0.08342 9.01814 0.39550 0.15431 0.00015 0.29694 0.39871
+ 0.11908 0.08457 9.54571 0.41858 0.17909 0.02560 0.32079 0.42203
+ 0.12181 0.08585 10.10441 0.44485 0.20724 0.05585 0.34790 0.44856
+ 0.12465 0.08716 10.65160 0.47249 0.23681 0.08756 0.37641 0.47646
+ 0.12722 0.08834 11.11793 0.49771 0.26378 0.11642 0.40242 0.50194
+ 0.12980 0.08952 11.55952 0.52322 0.29102 0.14553 0.42870 0.52769
+ 0.13194 0.09049 11.90416 0.54435 0.31358 0.16961 0.45048 0.54903
+ 0.13453 0.09165 12.29578 0.56985 0.34080 0.19865 0.47676 0.57479
+ 0.13681 0.09266 12.61879 0.59226 0.36471 0.22414 0.49984 0.59742
+ 0.13889 0.09359 12.89603 0.61263 0.38645 0.24730 0.52083 0.61799
+ 0.14152 0.09474 13.22230 0.63818 0.41371 0.27635 0.54715 0.64380
+ 0.14399 0.09582 13.50389 0.66185 0.43899 0.30326 0.57154 0.66771
+ 0.14628 0.09681 13.74624 0.68368 0.46231 0.32809 0.59404 0.68977
+ 0.14857 0.09780 13.96850 0.70513 0.48524 0.35250 0.61616 0.71144
+ 0.15079 0.09875 14.16720 0.72574 0.50728 0.37598 0.63741 0.73227
+ 0.15288 0.09964 14.33884 0.74487 0.52776 0.39779 0.65715 0.75160
+ 0.15485 0.10047 14.48640 0.76255 0.54671 0.41798 0.67540 0.76948
+ 0.15681 0.10129 14.62139 0.77997 0.56539 0.43789 0.69339 0.78709
+ 0.15873 0.10210 14.74151 0.79675 0.58340 0.45709 0.71072 0.80405
+ 0.16054 0.10285 14.84458 0.81237 0.60019 0.47500 0.72686 0.81985
+ 0.16225 0.10356 14.93246 0.82684 0.61576 0.49162 0.74182 0.83449
+ 0.16397 0.10427 15.01185 0.84113 0.63115 0.50805 0.75661 0.84894
+ 0.16565 0.10496 15.08153 0.85493 0.64603 0.52396 0.77090 0.86291
+ 0.16725 0.10561 15.14013 0.86781 0.65994 0.53883 0.78424 0.87594
+ 0.16876 0.10622 15.18895 0.87977 0.67287 0.55267 0.79663 0.88805
+ 0.17028 0.10684 15.23181 0.89161 0.68569 0.56640 0.80891 0.90004
+ 0.10465 0.07901 2.70233 0.21414 0.00000 0.00000 0.11364 0.21589
+ 0.10700 0.08016 3.23114 0.22356 0.00000 0.00000 0.12377 0.22554
+ 0.11046 0.08183 4.00325 0.23941 0.00000 0.00000 0.14066 0.24173
+ 0.11299 0.08303 4.53893 0.25220 0.01255 0.00000 0.15420 0.25478
+ 0.11565 0.08429 5.08598 0.26663 0.02870 0.00000 0.16941 0.26947
+ 0.11795 0.08537 5.54494 0.27978 0.04331 0.00000 0.18323 0.28285
+ 0.12014 0.08639 5.97300 0.29293 0.05785 0.00000 0.19701 0.29622
+ 0.12247 0.08747 6.41359 0.30738 0.07378 0.00000 0.21213 0.31091
+ 0.12450 0.08839 6.78453 0.32031 0.08797 0.00000 0.22563 0.32405
+ 0.12645 0.08928 7.13165 0.33307 0.10194 0.00000 0.23894 0.33701
+ 0.12799 0.08998 7.39892 0.34335 0.11317 0.00000 0.24966 0.34744
+ 0.13127 0.09146 7.94522 0.36568 0.13752 0.00013 0.27290 0.37010
+ 0.13409 0.09272 8.35658 0.38525 0.15880 0.02212 0.29325 0.38996
+ 0.13724 0.09411 8.78565 0.40731 0.18277 0.04805 0.31618 0.41234
+ 0.14049 0.09554 9.19906 0.43030 0.20773 0.07500 0.34006 0.43567
+ 0.14343 0.09682 9.54558 0.45110 0.23030 0.09934 0.36167 0.45677
+ 0.14638 0.09809 9.86830 0.47196 0.25292 0.12371 0.38332 0.47793
+ 0.14881 0.09914 10.11614 0.48911 0.27152 0.14374 0.40113 0.49532
+ 0.15174 0.10038 10.39297 0.50965 0.29381 0.16772 0.42247 0.51617
+ 0.15431 0.10147 10.61702 0.52756 0.31325 0.18864 0.44108 0.53434
+ 0.15666 0.10246 10.80583 0.54374 0.33082 0.20754 0.45788 0.55076
+ 0.15961 0.10369 11.02331 0.56387 0.35271 0.23109 0.47881 0.57119
+ 0.16236 0.10483 11.20622 0.58238 0.37285 0.25276 0.49806 0.58998
+ 0.16492 0.10588 11.35943 0.59932 0.39131 0.27263 0.51569 0.60718
+ 0.16746 0.10691 11.49586 0.61585 0.40935 0.29205 0.53290 0.62397
+ 0.16992 0.10791 11.61383 0.63161 0.42658 0.31062 0.54932 0.63998
+ 0.17223 0.10885 11.71203 0.64614 0.44249 0.32777 0.56448 0.65474
+ 0.17439 0.10971 11.79309 0.65948 0.45712 0.34356 0.57840 0.66830
+ 0.17655 0.11057 11.86387 0.67254 0.47147 0.35906 0.59204 0.68157
+ 0.17865 0.11140 11.92343 0.68503 0.48522 0.37392 0.60510 0.69428
+ 0.18063 0.11218 11.97128 0.69658 0.49796 0.38772 0.61719 0.70603
+ 0.18249 0.11291 12.00902 0.70723 0.50973 0.40046 0.62834 0.71686
+ 0.18435 0.11364 12.03991 0.71767 0.52130 0.41300 0.63929 0.72748
+ 0.18618 0.11435 12.06372 0.72769 0.53242 0.42508 0.64981 0.73769
+ 0.18791 0.11501 12.08043 0.73698 0.54277 0.43632 0.65957 0.74715
+ 0.18953 0.11564 12.09115 0.74556 0.55234 0.44674 0.66860 0.75589
+ 0.19117 0.11626 12.09709 0.75401 0.56179 0.45703 0.67749 0.76450
+ 0.11466 0.08495 2.64712 0.20575 0.00000 0.00000 0.10953 0.20824
+ 0.11735 0.08620 3.12633 0.21481 0.00000 0.00000 0.11931 0.21757
+ 0.12131 0.08803 3.81792 0.22978 0.00000 0.00000 0.13535 0.23296
+ 0.12419 0.08934 4.29118 0.24170 0.01180 0.00000 0.14804 0.24519
+ 0.12721 0.09071 4.76946 0.25500 0.02685 0.00000 0.16214 0.25881
+ 0.12980 0.09188 5.16694 0.26700 0.04035 0.00000 0.17483 0.27109
+ 0.13229 0.09298 5.53451 0.27892 0.05368 0.00000 0.18739 0.28327
+ 0.13491 0.09415 5.90960 0.29192 0.06818 0.00000 0.20109 0.29656
+ 0.13719 0.09515 6.22280 0.30348 0.08102 0.00000 0.21323 0.30835
+ 0.13937 0.09610 6.51367 0.31481 0.09359 0.00000 0.22513 0.31992
+ 0.14110 0.09686 6.73612 0.32390 0.10365 0.00000 0.23467 0.32919
+ 0.14476 0.09844 7.18655 0.34351 0.12532 0.00012 0.25522 0.34919
+ 0.14790 0.09979 7.51867 0.36056 0.14413 0.01965 0.27307 0.36658
+ 0.15140 0.10127 7.86016 0.37963 0.16515 0.04254 0.29304 0.38602
+ 0.15500 0.10279 8.18410 0.39935 0.18687 0.06616 0.31367 0.40612
+ 0.15823 0.10414 8.45125 0.41705 0.20638 0.08736 0.33220 0.42416
+ 0.16147 0.10548 8.69593 0.43466 0.22580 0.10844 0.35064 0.44212
+ 0.16414 0.10658 8.88076 0.44906 0.24168 0.12568 0.36571 0.45680
+ 0.16734 0.10789 9.08351 0.46619 0.26060 0.14621 0.38366 0.47427
+ 0.17014 0.10903 9.24425 0.48102 0.27700 0.16402 0.39921 0.48939
+ 0.17269 0.11005 9.37694 0.49434 0.29175 0.18002 0.41317 0.50298
+ 0.17589 0.11133 9.52597 0.51080 0.31001 0.19986 0.43046 0.51978
+ 0.17886 0.11251 9.64741 0.52583 0.32671 0.21802 0.44625 0.53512
+ 0.18162 0.11360 9.74561 0.53950 0.34193 0.23458 0.46062 0.54907
+ 0.18434 0.11467 9.82957 0.55274 0.35672 0.25069 0.47456 0.56259
+ 0.18698 0.11569 9.89863 0.56528 0.37077 0.26601 0.48779 0.57541
+ 0.18944 0.11664 9.95279 0.57678 0.38367 0.28009 0.49992 0.58716
+ 0.19174 0.11753 9.99432 0.58726 0.39548 0.29300 0.51100 0.59788
+ 0.19403 0.11840 10.02729 0.59746 0.40700 0.30561 0.52180 0.60831
+ 0.19626 0.11924 10.05153 0.60716 0.41799 0.31765 0.53208 0.61824
+ 0.19835 0.12003 10.06749 0.61608 0.42812 0.32878 0.54154 0.62736
+ 0.20031 0.12077 10.07655 0.62424 0.43743 0.33902 0.55022 0.63572
+ 0.20227 0.12150 10.07997 0.63220 0.44654 0.34906 0.55870 0.64388
+ 0.20419 0.12221 10.07808 0.63979 0.45527 0.35868 0.56680 0.65167
+ 0.20599 0.12287 10.07156 0.64679 0.46334 0.36761 0.57428 0.65885
+ 0.20769 0.12349 10.06137 0.65322 0.47078 0.37585 0.58116 0.66544
+ 0.20940 0.12412 10.04726 0.65950 0.47809 0.38396 0.58790 0.67189
+ 0.13362 0.09532 2.59019 0.19337 0.00000 0.00000 0.10359 0.19757
+ 0.13689 0.09676 2.99594 0.20181 0.00000 0.00000 0.11282 0.20639
+ 0.14170 0.09884 3.57047 0.21542 0.00000 0.00000 0.12756 0.22055
+ 0.14517 0.10033 3.95441 0.22601 0.01070 0.00000 0.13897 0.23154
+ 0.14879 0.10187 4.33560 0.23762 0.02415 0.00000 0.15144 0.24357
+ 0.15189 0.10318 4.64727 0.24795 0.03604 0.00000 0.16249 0.25425
+ 0.15484 0.10442 4.93126 0.25807 0.04765 0.00000 0.17330 0.26470
+ 0.15795 0.10572 5.21673 0.26898 0.06013 0.00000 0.18494 0.27597
+ 0.16064 0.10683 5.45162 0.27857 0.07107 0.00000 0.19516 0.28586
+ 0.16321 0.10789 5.66679 0.28788 0.08169 0.00000 0.20508 0.29547
+ 0.16523 0.10871 5.82935 0.29529 0.09012 0.00000 0.21296 0.30310
+ 0.16950 0.11045 6.15285 0.31110 0.10809 0.00010 0.22977 0.31939
+ 0.17314 0.11192 6.38137 0.32465 0.12349 0.01628 0.24417 0.33335
+ 0.17717 0.11353 6.60971 0.33961 0.14050 0.03503 0.26008 0.34876
+ 0.18129 0.11517 6.81942 0.35487 0.15787 0.05417 0.27631 0.36448
+ 0.18498 0.11662 6.98645 0.36838 0.17328 0.07115 0.29070 0.37840
+ 0.18865 0.11805 7.13380 0.38166 0.18846 0.08788 0.30485 0.39208
+ 0.19165 0.11921 7.24084 0.39239 0.20075 0.10143 0.31630 0.40313
+ 0.19524 0.12059 7.35309 0.40501 0.21524 0.11742 0.32977 0.41614
+ 0.19837 0.12178 7.43736 0.41580 0.22768 0.13117 0.34132 0.42728
+ 0.20120 0.12285 7.50293 0.42539 0.23876 0.14343 0.35159 0.43716
+ 0.20473 0.12418 7.57103 0.43710 0.25236 0.15849 0.36416 0.44925
+ 0.20800 0.12539 7.62069 0.44765 0.26466 0.17214 0.37551 0.46015
+ 0.21100 0.12650 7.65544 0.45712 0.27576 0.18449 0.38572 0.46994
+ 0.21396 0.12758 7.67961 0.46619 0.28644 0.19639 0.39552 0.47931
+ 0.21681 0.12861 7.69367 0.47467 0.29649 0.20761 0.40471 0.48809
+ 0.21946 0.12957 7.69889 0.48234 0.30564 0.21785 0.41304 0.49603
+ 0.22192 0.13045 7.69707 0.48926 0.31393 0.22716 0.42058 0.50320
+ 0.22436 0.13131 7.68912 0.49591 0.32195 0.23619 0.42784 0.51009
+ 0.22672 0.13214 7.67565 0.50215 0.32953 0.24475 0.43469 0.51657
+ 0.22893 0.13291 7.65803 0.50781 0.33646 0.25260 0.44092 0.52246
+ 0.23099 0.13362 7.63731 0.51293 0.34278 0.25977 0.44657 0.52778
+ 0.23304 0.13433 7.61264 0.51786 0.34890 0.26675 0.45204 0.53292
+ 0.23503 0.13501 7.58487 0.52251 0.35472 0.27341 0.45721 0.53776
+ 0.23691 0.13564 7.55535 0.52673 0.36006 0.27953 0.46193 0.54217
+ 0.23866 0.13623 7.52480 0.53056 0.36493 0.28514 0.46622 0.54616
+ 0.24042 0.13682 7.49154 0.53425 0.36968 0.29063 0.47038 0.55002
+ 0.16049 0.10878 2.56212 0.18004 0.00000 0.00000 0.09746 0.18729
+ 0.16447 0.11042 2.89068 0.18774 0.00000 0.00000 0.10602 0.19548
+ 0.17027 0.11278 3.34528 0.19978 0.00000 0.00000 0.11931 0.20823
+ 0.17443 0.11446 3.63972 0.20891 0.00955 0.00000 0.12933 0.21786
+ 0.17874 0.11619 3.92535 0.21872 0.02134 0.00000 0.14008 0.22820
+ 0.18240 0.11765 4.15396 0.22730 0.03160 0.00000 0.14944 0.23721
+ 0.18588 0.11902 4.35817 0.23557 0.04148 0.00000 0.15847 0.24589
+ 0.18951 0.12044 4.55924 0.24436 0.05196 0.00000 0.16805 0.25512
+ 0.19263 0.12166 4.72131 0.25198 0.06103 0.00000 0.17635 0.26310
+ 0.19561 0.12281 4.86689 0.25930 0.06975 0.00000 0.18432 0.27077
+ 0.19794 0.12370 4.97491 0.26505 0.07660 0.00000 0.19059 0.27680
+ 0.20284 0.12557 5.18430 0.27717 0.09104 0.00008 0.20379 0.28948
+ 0.20698 0.12714 5.32146 0.28738 0.10324 0.01310 0.21492 0.30017
+ 0.21152 0.12884 5.45166 0.29847 0.11652 0.02800 0.22702 0.31177
+ 0.21614 0.13056 5.56407 0.30956 0.12987 0.04300 0.23915 0.32338
+ 0.22025 0.13206 5.64727 0.31922 0.14155 0.05614 0.24974 0.33349
+ 0.22429 0.13353 5.71450 0.32856 0.15290 0.06893 0.26000 0.34327
+ 0.22758 0.13471 5.75853 0.33597 0.16198 0.07918 0.26818 0.35104
+ 0.23149 0.13610 5.79865 0.34456 0.17256 0.09115 0.27767 0.36005
+ 0.23487 0.13730 5.82300 0.35179 0.18153 0.10133 0.28569 0.36763
+ 0.23790 0.13836 5.83683 0.35810 0.18942 0.11031 0.29272 0.37426
+ 0.24167 0.13966 5.84366 0.36568 0.19899 0.12124 0.30120 0.38224
+ 0.24512 0.14084 5.84007 0.37238 0.20754 0.13103 0.30873 0.38929
+ 0.24828 0.14190 5.82871 0.37827 0.21515 0.13979 0.31540 0.39550
+ 0.25136 0.14293 5.81033 0.38381 0.22238 0.14814 0.32169 0.40135
+ 0.25430 0.14391 5.78611 0.38888 0.22909 0.15594 0.32750 0.40671
+ 0.25703 0.14480 5.75805 0.39338 0.23513 0.16299 0.33269 0.41148
+ 0.25954 0.14561 5.72743 0.39735 0.24054 0.16933 0.33730 0.41569
+ 0.26200 0.14639 5.69295 0.40109 0.24571 0.17542 0.34167 0.41966
+ 0.26438 0.14714 5.65569 0.40452 0.25053 0.18114 0.34571 0.42331
+ 0.26659 0.14783 5.61748 0.40756 0.25489 0.18634 0.34934 0.42655
+ 0.26863 0.14847 5.57905 0.41024 0.25881 0.19104 0.35257 0.42942
+ 0.27065 0.14908 5.53820 0.41276 0.26257 0.19558 0.35563 0.43213
+ 0.27261 0.14967 5.49605 0.41507 0.26610 0.19987 0.35848 0.43461
+ 0.27443 0.15022 5.45426 0.41711 0.26929 0.20378 0.36102 0.43682
+ 0.27613 0.15072 5.41332 0.41891 0.27217 0.20733 0.36329 0.43876
+ 0.27782 0.15121 5.37074 0.42059 0.27494 0.21077 0.36545 0.44059
+ 0.20278 0.12836 2.55725 0.16360 0.00000 0.00000 0.09033 0.17669
+ 0.20758 0.13021 2.79742 0.17025 0.00000 0.00000 0.09795 0.18394
+ 0.21450 0.13284 3.11885 0.18029 0.00000 0.00000 0.10939 0.19485
+ 0.21940 0.13468 3.31664 0.18766 0.00819 0.00000 0.11776 0.20282
+ 0.22444 0.13656 3.50144 0.19538 0.01810 0.00000 0.12650 0.21114
+ 0.22868 0.13813 3.64420 0.20196 0.02654 0.00000 0.13396 0.21822
+ 0.23268 0.13958 3.76741 0.20818 0.03453 0.00000 0.14100 0.22491
+ 0.23682 0.14109 3.88430 0.21466 0.04287 0.00000 0.14835 0.23187
+ 0.24035 0.14236 3.97492 0.22017 0.04998 0.00000 0.15461 0.23779
+ 0.24369 0.14355 4.05321 0.22538 0.05671 0.00000 0.16052 0.24337
+ 0.24629 0.14447 4.10916 0.22941 0.06195 0.00000 0.16511 0.24770
+ 0.25171 0.14637 4.21151 0.23774 0.07280 0.00006 0.17460 0.25662
+ 0.25624 0.14793 4.26515 0.24458 0.08179 0.00991 0.18242 0.26395
+ 0.26115 0.14961 4.30770 0.25181 0.09139 0.02101 0.19073 0.27170
+ 0.26609 0.15126 4.33535 0.25885 0.10086 0.03198 0.19887 0.27925
+ 0.27042 0.15270 4.34732 0.26480 0.10898 0.04144 0.20580 0.28564
+ 0.27464 0.15407 4.34812 0.27039 0.11673 0.05050 0.21236 0.29165
+ 0.27803 0.15516 4.34110 0.27471 0.12282 0.05766 0.21748 0.29630
+ 0.28202 0.15642 4.32420 0.27958 0.12980 0.06591 0.22329 0.30154
+ 0.28543 0.15748 4.30242 0.28355 0.13561 0.07282 0.22808 0.30583
+ 0.28845 0.15840 4.27743 0.28692 0.14064 0.07884 0.23218 0.30947
+ 0.29216 0.15952 4.23961 0.29082 0.14664 0.08606 0.23701 0.31370
+ 0.29552 0.16051 4.19856 0.29414 0.15189 0.09243 0.24117 0.31730
+ 0.29855 0.16138 4.15589 0.29693 0.15647 0.09804 0.24475 0.32035
+ 0.30148 0.16221 4.10973 0.29944 0.16074 0.10332 0.24802 0.32309
+ 0.30423 0.16297 4.06158 0.30163 0.16463 0.10818 0.25095 0.32550
+ 0.30675 0.16365 4.01368 0.30346 0.16806 0.11251 0.25347 0.32752
+ 0.30904 0.16425 3.96674 0.30499 0.17107 0.11635 0.25564 0.32922
+ 0.31127 0.16482 3.91809 0.30634 0.17389 0.11999 0.25761 0.33073
+ 0.31338 0.16535 3.86896 0.30749 0.17647 0.12337 0.25937 0.33202
+ 0.31533 0.16583 3.82129 0.30842 0.17875 0.12639 0.26088 0.33308
+ 0.31711 0.16625 3.77544 0.30916 0.18076 0.12909 0.26216 0.33394
+ 0.31884 0.16665 3.72859 0.30978 0.18264 0.13166 0.26331 0.33466
+ 0.32050 0.16702 3.68186 0.31027 0.18436 0.13405 0.26432 0.33525
+ 0.32203 0.16735 3.63693 0.31063 0.18588 0.13620 0.26517 0.33569
+ 0.32343 0.16765 3.59403 0.31087 0.18722 0.13812 0.26587 0.33601
+ 0.32481 0.16793 3.55046 0.31103 0.18847 0.13996 0.26648 0.33623
+ 0.24275 0.14588 2.55219 0.15029 0.00000 0.00000 0.08487 0.16963
+ 0.24803 0.14780 2.72880 0.15605 0.00000 0.00000 0.09167 0.17602
+ 0.25555 0.15050 2.95737 0.16451 0.00000 0.00000 0.10161 0.18536
+ 0.26083 0.15236 3.08975 0.17056 0.00717 0.00000 0.10872 0.19201
+ 0.26621 0.15424 3.20793 0.17675 0.01570 0.00000 0.11599 0.19880
+ 0.27072 0.15579 3.29521 0.18193 0.02286 0.00000 0.12208 0.20446
+ 0.27491 0.15722 3.36709 0.18673 0.02955 0.00000 0.12775 0.20971
+ 0.27924 0.15868 3.43166 0.19165 0.03643 0.00000 0.13357 0.21508
+ 0.28289 0.15989 3.47866 0.19576 0.04223 0.00000 0.13845 0.21956
+ 0.28633 0.16102 3.51655 0.19958 0.04766 0.00000 0.14300 0.22373
+ 0.28899 0.16189 3.54169 0.20250 0.05184 0.00000 0.14649 0.22691
+ 0.29447 0.16364 3.58196 0.20842 0.06041 0.00005 0.15359 0.23334
+ 0.29901 0.16507 3.58875 0.21315 0.06738 0.00790 0.15933 0.23849
+ 0.30387 0.16656 3.58349 0.21802 0.07472 0.01662 0.16529 0.24379
+ 0.30870 0.16801 3.56631 0.22262 0.08183 0.02513 0.17100 0.24880
+ 0.31288 0.16924 3.54182 0.22638 0.08783 0.03237 0.17574 0.25290
+ 0.31691 0.17039 3.50972 0.22980 0.09346 0.03922 0.18012 0.25663
+ 0.32011 0.17128 3.47821 0.23236 0.09783 0.04456 0.18346 0.25942
+ 0.32382 0.17228 3.43492 0.23512 0.10276 0.05065 0.18716 0.26245
+ 0.32695 0.17311 3.39265 0.23728 0.10679 0.05569 0.19012 0.26481
+ 0.32969 0.17381 3.35110 0.23904 0.11024 0.06004 0.19260 0.26674
+ 0.33301 0.17462 3.29517 0.24096 0.11427 0.06519 0.19541 0.26885
+ 0.33597 0.17532 3.23986 0.24247 0.11773 0.06967 0.19775 0.27052
+ 0.33860 0.17591 3.18614 0.24364 0.12070 0.07358 0.19967 0.27183
+ 0.34110 0.17645 3.13097 0.24459 0.12342 0.07720 0.20135 0.27288
+ 0.34342 0.17692 3.07588 0.24530 0.12584 0.08050 0.20278 0.27370
+ 0.34550 0.17732 3.02300 0.24580 0.12793 0.08340 0.20393 0.27427
+ 0.34736 0.17765 2.97269 0.24612 0.12972 0.08594 0.20486 0.27465
+ 0.34915 0.17795 2.92184 0.24631 0.13136 0.08832 0.20564 0.27487
+ 0.35081 0.17820 2.87168 0.24635 0.13283 0.09050 0.20626 0.27495
+ 0.35230 0.17841 2.82396 0.24628 0.13409 0.09242 0.20674 0.27491
+ 0.35365 0.17858 2.77887 0.24612 0.13517 0.09412 0.20707 0.27475
+ 0.35494 0.17872 2.73351 0.24586 0.13615 0.09571 0.20731 0.27450
+ 0.35615 0.17884 2.68894 0.24552 0.13702 0.09717 0.20746 0.27416
+ 0.35724 0.17892 2.64665 0.24512 0.13775 0.09847 0.20751 0.27374
+ 0.35822 0.17898 2.60676 0.24467 0.13838 0.09962 0.20749 0.27328
+ 0.35916 0.17901 2.56670 0.24416 0.13893 0.10069 0.20740 0.27274
+ 0.31642 0.17671 2.49090 0.12805 0.00000 0.00000 0.07606 0.15947
+ 0.32189 0.17846 2.57836 0.13237 0.00000 0.00000 0.08143 0.16426
+ 0.32955 0.18085 2.68105 0.13843 0.00000 0.00000 0.08898 0.17092
+ 0.33482 0.18245 2.72793 0.14256 0.00562 0.00000 0.09416 0.17544
+ 0.34009 0.18401 2.76152 0.14663 0.01215 0.00000 0.09930 0.17987
+ 0.34442 0.18526 2.78021 0.14990 0.01750 0.00000 0.10347 0.18343
+ 0.34839 0.18638 2.79015 0.15283 0.02238 0.00000 0.10724 0.18660
+ 0.35241 0.18748 2.79306 0.15573 0.02731 0.00000 0.11100 0.18971
+ 0.35575 0.18837 2.78986 0.15807 0.03138 0.00000 0.11407 0.19222
+ 0.35884 0.18917 2.78223 0.16017 0.03513 0.00000 0.11686 0.19446
+ 0.36119 0.18977 2.77333 0.16172 0.03797 0.00000 0.11896 0.19611
+ 0.36595 0.19092 2.74684 0.16473 0.04366 0.00003 0.12308 0.19929
+ 0.36978 0.19180 2.70576 0.16699 0.04818 0.00538 0.12626 0.20166
+ 0.37378 0.19265 2.65369 0.16915 0.05280 0.01120 0.12943 0.20389
+ 0.37761 0.19341 2.59473 0.17100 0.05716 0.01676 0.13229 0.20579
+ 0.38082 0.19398 2.53801 0.17236 0.06073 0.02138 0.13453 0.20715
+ 0.38380 0.19446 2.47847 0.17344 0.06398 0.02567 0.13648 0.20819
+ 0.38609 0.19477 2.42779 0.17413 0.06644 0.02896 0.13786 0.20883
+ 0.38864 0.19507 2.36532 0.17473 0.06913 0.03263 0.13927 0.20935
+ 0.39071 0.19525 2.30951 0.17505 0.07127 0.03561 0.14030 0.20958
+ 0.39245 0.19536 2.25814 0.17520 0.07304 0.03813 0.14107 0.20962
+ 0.39446 0.19541 2.19306 0.17518 0.07504 0.04106 0.14182 0.20944
+ 0.39614 0.19538 2.13223 0.17497 0.07669 0.04356 0.14232 0.20907
+ 0.39754 0.19529 2.07578 0.17463 0.07805 0.04568 0.14262 0.20855
+ 0.39879 0.19514 2.02006 0.17415 0.07923 0.04761 0.14276 0.20788
+ 0.39985 0.19493 1.96632 0.17355 0.08023 0.04933 0.14275 0.20709
+ 0.40073 0.19468 1.91629 0.17289 0.08105 0.05080 0.14263 0.20623
+ 0.40144 0.19440 1.86995 0.17217 0.08170 0.05207 0.14242 0.20532
+ 0.40205 0.19408 1.82421 0.17138 0.08226 0.05322 0.14212 0.20432
+ 0.40255 0.19373 1.78008 0.17053 0.08272 0.05425 0.14175 0.20326
+ 0.40293 0.19336 1.73894 0.16966 0.08308 0.05514 0.14132 0.20218
+ 0.40321 0.19298 1.70076 0.16879 0.08334 0.05590 0.14086 0.20111
+ 0.40342 0.19257 1.66301 0.16786 0.08355 0.05659 0.14033 0.19997
+ 0.40355 0.19214 1.62648 0.16691 0.08369 0.05721 0.13977 0.19881
+ 0.40361 0.19171 1.59233 0.16596 0.08378 0.05774 0.13919 0.19765
+ 0.40361 0.19128 1.56055 0.16503 0.08382 0.05819 0.13860 0.19652
+ 0.40355 0.19082 1.52903 0.16406 0.08382 0.05859 0.13797 0.19535
+ 0.38186 0.20276 2.36148 0.10954 0.00000 0.00000 0.06862 0.15087
+ 0.38681 0.20405 2.38967 0.11276 0.00000 0.00000 0.07279 0.15420
+ 0.39357 0.20571 2.41196 0.11708 0.00000 0.00000 0.07846 0.15861
+ 0.39809 0.20676 2.40678 0.11991 0.00445 0.00000 0.08222 0.16144
+ 0.40252 0.20771 2.39080 0.12258 0.00952 0.00000 0.08583 0.16408
+ 0.40606 0.20842 2.37069 0.12464 0.01360 0.00000 0.08868 0.16607
+ 0.40924 0.20901 2.34673 0.12642 0.01727 0.00000 0.09119 0.16776
+ 0.41238 0.20954 2.31704 0.12810 0.02090 0.00000 0.09361 0.16931
+ 0.41491 0.20992 2.28820 0.12939 0.02386 0.00000 0.09554 0.17047
+ 0.41720 0.21022 2.25810 0.13050 0.02654 0.00000 0.09723 0.17143
+ 0.41891 0.21042 2.23290 0.13128 0.02854 0.00000 0.09847 0.17209
+ 0.42223 0.21071 2.17585 0.13269 0.03250 0.00002 0.10082 0.17319
+ 0.42478 0.21084 2.11512 0.13362 0.03556 0.00384 0.10253 0.17383
+ 0.42728 0.21085 2.04549 0.13437 0.03862 0.00792 0.10411 0.17422
+ 0.42953 0.21071 1.97262 0.13484 0.04144 0.01175 0.10542 0.17429
+ 0.43125 0.21047 1.90670 0.13503 0.04368 0.01489 0.10633 0.17408
+ 0.43272 0.21012 1.84083 0.13501 0.04567 0.01775 0.10701 0.17364
+ 0.43373 0.20976 1.78692 0.13484 0.04713 0.01990 0.10741 0.17311
+ 0.43471 0.20923 1.72271 0.13447 0.04869 0.02228 0.10770 0.17229
+ 0.43538 0.20868 1.66713 0.13401 0.04988 0.02417 0.10780 0.17141
+ 0.43582 0.20812 1.61729 0.13348 0.05084 0.02575 0.10777 0.17049
+ 0.43617 0.20734 1.55572 0.13269 0.05188 0.02755 0.10758 0.16919
+ 0.43628 0.20652 1.49962 0.13182 0.05269 0.02906 0.10727 0.16784
+ 0.43622 0.20570 1.44868 0.13091 0.05332 0.03031 0.10687 0.16647
+ 0.43599 0.20482 1.39936 0.12993 0.05383 0.03143 0.10637 0.16502
+ 0.43561 0.20391 1.35266 0.12889 0.05423 0.03240 0.10579 0.16352
+ 0.43512 0.20300 1.30988 0.12786 0.05452 0.03322 0.10518 0.16204
+ 0.43455 0.20211 1.27082 0.12683 0.05471 0.03391 0.10455 0.16059
+ 0.43387 0.20118 1.23279 0.12576 0.05485 0.03452 0.10386 0.15910
+ 0.43311 0.20023 1.19656 0.12468 0.05492 0.03505 0.10314 0.15759
+ 0.43229 0.19930 1.16318 0.12362 0.05494 0.03549 0.10241 0.15613
+ 0.43144 0.19839 1.13252 0.12259 0.05491 0.03585 0.10170 0.15472
+ 0.43051 0.19746 1.10250 0.12153 0.05485 0.03618 0.10095 0.15327
+ 0.42953 0.19652 1.07374 0.12047 0.05475 0.03645 0.10018 0.15183
+ 0.42853 0.19560 1.04709 0.11944 0.05463 0.03668 0.09943 0.15044
+ 0.42752 0.19471 1.02249 0.11845 0.05449 0.03686 0.09870 0.14911
+ 0.42646 0.19380 0.99828 0.11744 0.05432 0.03701 0.09794 0.14775
+ 0.43903 0.22430 2.18378 0.09402 0.00000 0.00000 0.06197 0.14216
+ 0.44294 0.22492 2.17208 0.09640 0.00000 0.00000 0.06513 0.14421
+ 0.44810 0.22559 2.14227 0.09947 0.00000 0.00000 0.06931 0.14673
+ 0.45140 0.22589 2.10511 0.10138 0.00353 0.00000 0.07198 0.14820
+ 0.45450 0.22606 2.05990 0.10310 0.00749 0.00000 0.07447 0.14942
+ 0.45687 0.22609 2.01783 0.10437 0.01063 0.00000 0.07636 0.15023
+ 0.45890 0.22602 1.97543 0.10539 0.01340 0.00000 0.07797 0.15081
+ 0.46079 0.22585 1.92878 0.10631 0.01612 0.00000 0.07948 0.15122
+ 0.46224 0.22563 1.88722 0.10695 0.01830 0.00000 0.08063 0.15143
+ 0.46346 0.22535 1.84650 0.10746 0.02025 0.00000 0.08160 0.15150
+ 0.46431 0.22508 1.81397 0.10778 0.02169 0.00000 0.08228 0.15146
+ 0.46579 0.22440 1.74422 0.10826 0.02449 0.00002 0.08349 0.15117
+ 0.46673 0.22368 1.67723 0.10844 0.02662 0.00280 0.08428 0.15067
+ 0.46743 0.22275 1.60345 0.10842 0.02870 0.00574 0.08491 0.14988
+ 0.46778 0.22166 1.52892 0.10818 0.03056 0.00845 0.08530 0.14881
+ 0.46779 0.22055 1.46352 0.10777 0.03201 0.01064 0.08546 0.14766
+ 0.46752 0.21935 1.39985 0.10721 0.03326 0.01261 0.08543 0.14634
+ 0.46710 0.21828 1.34884 0.10665 0.03415 0.01408 0.08530 0.14514
+ 0.46635 0.21691 1.28928 0.10585 0.03507 0.01567 0.08500 0.14357
+ 0.46548 0.21563 1.23870 0.10505 0.03575 0.01692 0.08463 0.14209
+ 0.46454 0.21441 1.19406 0.10425 0.03628 0.01795 0.08421 0.14067
+ 0.46313 0.21280 1.13979 0.10316 0.03681 0.01911 0.08358 0.13879
+ 0.46161 0.21123 1.09114 0.10207 0.03720 0.02006 0.08290 0.13695
+ 0.46003 0.20970 1.04759 0.10098 0.03747 0.02083 0.08219 0.13518
+ 0.45829 0.20814 1.00597 0.09985 0.03766 0.02151 0.08143 0.13337
+ 0.45646 0.20657 0.96704 0.09871 0.03777 0.02209 0.08063 0.13156
+ 0.45461 0.20505 0.93177 0.09760 0.03783 0.02257 0.07984 0.12983
+ 0.45277 0.20360 0.89990 0.09653 0.03782 0.02295 0.07906 0.12818
+ 0.45083 0.20211 0.86914 0.09544 0.03778 0.02329 0.07825 0.12651
+ 0.44884 0.20062 0.84011 0.09435 0.03770 0.02357 0.07743 0.12485
+ 0.44687 0.19919 0.81357 0.09330 0.03760 0.02380 0.07664 0.12327
+ 0.44495 0.19783 0.78938 0.09230 0.03747 0.02398 0.07587 0.12177
+ 0.44294 0.19643 0.76587 0.09128 0.03732 0.02413 0.07508 0.12026
+ 0.44091 0.19504 0.74348 0.09027 0.03714 0.02425 0.07429 0.11876
+ 0.43892 0.19371 0.72288 0.08931 0.03696 0.02434 0.07353 0.11733
+ 0.43699 0.19243 0.70397 0.08839 0.03677 0.02440 0.07281 0.11598
+ 0.43500 0.19113 0.68546 0.08745 0.03657 0.02444 0.07206 0.11461
+ 0.49905 0.24513 1.92477 0.07835 0.00000 0.00000 0.05446 0.13038
+ 0.50119 0.24475 1.88218 0.07995 0.00000 0.00000 0.05662 0.13110
+ 0.50369 0.24394 1.81399 0.08189 0.00000 0.00000 0.05934 0.13172
+ 0.50504 0.24318 1.75509 0.08302 0.00263 0.00000 0.06099 0.13187
+ 0.50606 0.24224 1.69130 0.08395 0.00554 0.00000 0.06245 0.13178
+ 0.50663 0.24133 1.63624 0.08457 0.00780 0.00000 0.06351 0.13151
+ 0.50693 0.24036 1.58374 0.08501 0.00978 0.00000 0.06434 0.13110
+ 0.50699 0.23925 1.52866 0.08533 0.01168 0.00000 0.06507 0.13052
+ 0.50684 0.23822 1.48151 0.08549 0.01318 0.00000 0.06558 0.12991
+ 0.50653 0.23717 1.43676 0.08556 0.01451 0.00000 0.06596 0.12923
+ 0.50617 0.23630 1.40191 0.08555 0.01548 0.00000 0.06620 0.12863
+ 0.50508 0.23435 1.32954 0.08538 0.01732 0.00001 0.06652 0.12721
+ 0.50381 0.23256 1.26421 0.08507 0.01869 0.00192 0.06662 0.12583
+ 0.50206 0.23046 1.19431 0.08456 0.02000 0.00390 0.06655 0.12414
+ 0.49990 0.22818 1.12560 0.08388 0.02114 0.00571 0.06630 0.12225
+ 0.49766 0.22603 1.06674 0.08314 0.02199 0.00714 0.06594 0.12043
+ 0.49515 0.22379 1.01062 0.08230 0.02270 0.00841 0.06546 0.11852
+ 0.49289 0.22189 0.96648 0.08153 0.02319 0.00934 0.06499 0.11688
+ 0.48996 0.21954 0.91581 0.08054 0.02367 0.01034 0.06433 0.11485
+ 0.48719 0.21741 0.87348 0.07961 0.02400 0.01111 0.06369 0.11302
+ 0.48453 0.21543 0.83663 0.07873 0.02424 0.01174 0.06306 0.11132
+ 0.48098 0.21289 0.79247 0.07756 0.02445 0.01243 0.06221 0.10914
+ 0.47749 0.21047 0.75345 0.07642 0.02458 0.01298 0.06136 0.10708
+ 0.47410 0.20817 0.71898 0.07534 0.02464 0.01342 0.06054 0.10514
+ 0.47059 0.20586 0.68643 0.07423 0.02466 0.01380 0.05968 0.10320
+ 0.46706 0.20358 0.65631 0.07313 0.02462 0.01412 0.05883 0.10131
+ 0.46364 0.20141 0.62931 0.07209 0.02456 0.01437 0.05800 0.09952
+ 0.46034 0.19936 0.60513 0.07109 0.02446 0.01456 0.05721 0.09784
+ 0.45697 0.19728 0.58199 0.07009 0.02435 0.01473 0.05641 0.09617
+ 0.45359 0.19524 0.56033 0.06910 0.02421 0.01486 0.05561 0.09453
+ 0.45033 0.19330 0.54068 0.06816 0.02406 0.01496 0.05485 0.09299
+ 0.44721 0.19145 0.52289 0.06727 0.02391 0.01503 0.05413 0.09153
+ 0.44402 0.18959 0.50570 0.06638 0.02374 0.01508 0.05339 0.09008
+ 0.44084 0.18776 0.48945 0.06550 0.02356 0.01512 0.05267 0.08866
+ 0.43778 0.18601 0.47457 0.06466 0.02338 0.01513 0.05199 0.08732
+ 0.43485 0.18434 0.46100 0.06387 0.02321 0.01514 0.05133 0.08606
+ 0.43186 0.18266 0.44777 0.06307 0.02302 0.01513 0.05067 0.08479
+ 0.54669 0.25948 1.65278 0.06629 0.00000 0.00000 0.04771 0.11751
+ 0.54673 0.25801 1.59415 0.06732 0.00000 0.00000 0.04909 0.11722
+ 0.54614 0.25563 1.50772 0.06848 0.00000 0.00000 0.05072 0.11644
+ 0.54526 0.25376 1.44030 0.06907 0.00195 0.00000 0.05164 0.11566
+ 0.54397 0.25168 1.37052 0.06948 0.00408 0.00000 0.05239 0.11465
+ 0.54256 0.24980 1.31228 0.06969 0.00571 0.00000 0.05286 0.11366
+ 0.54098 0.24793 1.25825 0.06976 0.00711 0.00000 0.05319 0.11260
+ 0.53907 0.24589 1.20295 0.06973 0.00845 0.00000 0.05342 0.11139
+ 0.53723 0.24406 1.15662 0.06962 0.00949 0.00000 0.05352 0.11027
+ 0.53530 0.24226 1.11347 0.06944 0.01039 0.00000 0.05354 0.10914
+ 0.53368 0.24081 1.08036 0.06925 0.01105 0.00000 0.05351 0.10821
+ 0.52994 0.23765 1.01293 0.06874 0.01228 0.00001 0.05331 0.10615
+ 0.52643 0.23486 0.95425 0.06818 0.01317 0.00132 0.05302 0.10430
+ 0.52223 0.23168 0.89268 0.06745 0.01400 0.00268 0.05258 0.10215
+ 0.51759 0.22831 0.83330 0.06658 0.01470 0.00390 0.05200 0.09987
+ 0.51316 0.22522 0.78330 0.06572 0.01521 0.00485 0.05139 0.09776
+ 0.50849 0.22207 0.73636 0.06479 0.01561 0.00569 0.05070 0.09561
+ 0.50449 0.21943 0.69992 0.06398 0.01588 0.00629 0.05009 0.09382
+ 0.49949 0.21622 0.65861 0.06296 0.01613 0.00693 0.04931 0.09165
+ 0.49495 0.21338 0.62451 0.06203 0.01628 0.00742 0.04859 0.08973
+ 0.49070 0.21076 0.59514 0.06117 0.01638 0.00781 0.04790 0.08798
+ 0.48520 0.20743 0.56032 0.06005 0.01645 0.00823 0.04701 0.08578
+ 0.47994 0.20431 0.52989 0.05898 0.01646 0.00856 0.04615 0.08373
+ 0.47493 0.20139 0.50327 0.05797 0.01644 0.00883 0.04533 0.08183
+ 0.46986 0.19847 0.47835 0.05696 0.01638 0.00904 0.04450 0.07995
+ 0.46484 0.19563 0.45549 0.05596 0.01630 0.00922 0.04369 0.07814
+ 0.46005 0.19295 0.43514 0.05503 0.01620 0.00935 0.04292 0.07645
+ 0.45550 0.19043 0.41705 0.05414 0.01609 0.00946 0.04219 0.07488
+ 0.45091 0.18792 0.39985 0.05326 0.01597 0.00954 0.04146 0.07332
+ 0.44636 0.18545 0.38385 0.05240 0.01584 0.00960 0.04075 0.07182
+ 0.44203 0.18312 0.36941 0.05158 0.01570 0.00964 0.04007 0.07041
+ 0.43791 0.18093 0.35641 0.05081 0.01556 0.00966 0.03944 0.06909
+ 0.43375 0.17873 0.34391 0.05005 0.01541 0.00967 0.03880 0.06779
+ 0.42963 0.17657 0.33213 0.04929 0.01526 0.00968 0.03818 0.06651
+ 0.42570 0.17452 0.32140 0.04858 0.01511 0.00967 0.03759 0.06532
+ 0.42196 0.17259 0.31165 0.04791 0.01496 0.00965 0.03703 0.06420
+ 0.41818 0.17064 0.30218 0.04724 0.01481 0.00963 0.03647 0.06309
+ 0.58259 0.26783 1.38817 0.05721 0.00000 0.00000 0.04162 0.10392
+ 0.58037 0.26527 1.32357 0.05781 0.00000 0.00000 0.04241 0.10290
+ 0.57651 0.26134 1.23208 0.05838 0.00000 0.00000 0.04325 0.10117
+ 0.57330 0.25839 1.16434 0.05859 0.00144 0.00000 0.04365 0.09977
+ 0.56961 0.25522 1.09612 0.05865 0.00298 0.00000 0.04390 0.09818
+ 0.56618 0.25243 1.04040 0.05858 0.00415 0.00000 0.04399 0.09675
+ 0.56270 0.24971 0.98961 0.05842 0.00515 0.00000 0.04399 0.09531
+ 0.55882 0.24680 0.93848 0.05817 0.00608 0.00000 0.04389 0.09375
+ 0.55530 0.24425 0.89630 0.05788 0.00680 0.00000 0.04375 0.09235
+ 0.55178 0.24176 0.85751 0.05756 0.00743 0.00000 0.04355 0.09099
+ 0.54892 0.23979 0.82807 0.05727 0.00787 0.00000 0.04336 0.08989
+ 0.54261 0.23555 0.76895 0.05657 0.00869 0.00001 0.04288 0.08754
+ 0.53697 0.23187 0.71880 0.05588 0.00927 0.00092 0.04238 0.08549
+ 0.53046 0.22774 0.66696 0.05505 0.00980 0.00185 0.04175 0.08318
+ 0.52350 0.22345 0.61768 0.05411 0.01024 0.00268 0.04102 0.08079
+ 0.51704 0.21956 0.57675 0.05322 0.01054 0.00332 0.04031 0.07863
+ 0.51040 0.21565 0.53877 0.05228 0.01077 0.00388 0.03956 0.07647
+ 0.50483 0.21241 0.50960 0.05148 0.01092 0.00427 0.03892 0.07469
+ 0.49799 0.20851 0.47685 0.05050 0.01104 0.00469 0.03812 0.07258
+ 0.49188 0.20508 0.45008 0.04962 0.01110 0.00500 0.03740 0.07073
+ 0.48624 0.20196 0.42721 0.04880 0.01113 0.00525 0.03673 0.06907
+ 0.47905 0.19803 0.40032 0.04776 0.01114 0.00552 0.03588 0.06699
+ 0.47226 0.19437 0.37702 0.04678 0.01111 0.00572 0.03508 0.06508
+ 0.46588 0.19097 0.35679 0.04587 0.01105 0.00588 0.03433 0.06334
+ 0.45949 0.18761 0.33799 0.04496 0.01098 0.00601 0.03358 0.06162
+ 0.45324 0.18435 0.32085 0.04407 0.01089 0.00611 0.03285 0.05999
+ 0.44732 0.18130 0.30569 0.04324 0.01080 0.00618 0.03217 0.05847
+ 0.44176 0.17846 0.29228 0.04246 0.01070 0.00623 0.03153 0.05707
+ 0.43617 0.17563 0.27959 0.04169 0.01059 0.00627 0.03090 0.05570
+ 0.43070 0.17287 0.26784 0.04094 0.01047 0.00630 0.03028 0.05437
+ 0.42550 0.17028 0.25728 0.04023 0.01036 0.00631 0.02970 0.05314
+ 0.42061 0.16785 0.24780 0.03956 0.01025 0.00632 0.02916 0.05200
+ 0.41568 0.16543 0.23873 0.03890 0.01013 0.00632 0.02862 0.05087
+ 0.41084 0.16306 0.23021 0.03826 0.01001 0.00631 0.02809 0.04978
+ 0.40625 0.16082 0.22247 0.03765 0.00989 0.00629 0.02760 0.04875
+ 0.40190 0.15872 0.21545 0.03708 0.00978 0.00627 0.02713 0.04780
+ 0.39752 0.15661 0.20865 0.03651 0.00967 0.00625 0.02667 0.04686
+ 0.60752 0.27074 1.14340 0.05046 0.00000 0.00000 0.03614 0.09007
+ 0.60300 0.26716 1.07941 0.05071 0.00000 0.00000 0.03649 0.08859
+ 0.59585 0.26179 0.99112 0.05083 0.00000 0.00000 0.03677 0.08628
+ 0.59034 0.25785 0.92796 0.05075 0.00105 0.00000 0.03681 0.08453
+ 0.58429 0.25369 0.86556 0.05055 0.00216 0.00000 0.03673 0.08264
+ 0.57890 0.25008 0.81539 0.05028 0.00300 0.00000 0.03657 0.08098
+ 0.57359 0.24662 0.77028 0.04996 0.00370 0.00000 0.03636 0.07937
+ 0.56783 0.24294 0.72545 0.04955 0.00436 0.00000 0.03607 0.07766
+ 0.56272 0.23976 0.68888 0.04915 0.00486 0.00000 0.03578 0.07616
+ 0.55771 0.23668 0.65560 0.04873 0.00528 0.00000 0.03546 0.07472
+ 0.55370 0.23426 0.63055 0.04838 0.00558 0.00000 0.03519 0.07359
+ 0.54502 0.22911 0.58081 0.04757 0.00613 0.00000 0.03455 0.07118
+ 0.53742 0.22470 0.53940 0.04682 0.00651 0.00064 0.03396 0.06912
+ 0.52881 0.21980 0.49713 0.04594 0.00685 0.00128 0.03326 0.06685
+ 0.51978 0.21475 0.45742 0.04498 0.00712 0.00185 0.03249 0.06454
+ 0.51153 0.21023 0.42479 0.04408 0.00730 0.00228 0.03177 0.06248
+ 0.50318 0.20573 0.39482 0.04317 0.00744 0.00265 0.03102 0.06045
+ 0.49624 0.20203 0.37198 0.04240 0.00751 0.00292 0.03040 0.05880
+ 0.48783 0.19761 0.34655 0.04146 0.00757 0.00319 0.02965 0.05685
+ 0.48040 0.19375 0.32593 0.04063 0.00759 0.00340 0.02898 0.05517
+ 0.47359 0.19025 0.30842 0.03987 0.00759 0.00356 0.02836 0.05366
+ 0.46500 0.18589 0.28798 0.03891 0.00756 0.00372 0.02759 0.05180
+ 0.45696 0.18185 0.27039 0.03801 0.00752 0.00385 0.02687 0.05011
+ 0.44947 0.17813 0.25521 0.03718 0.00747 0.00395 0.02621 0.04857
+ 0.44203 0.17447 0.24117 0.03636 0.00740 0.00403 0.02555 0.04707
+ 0.43480 0.17094 0.22844 0.03556 0.00732 0.00409 0.02492 0.04565
+ 0.42801 0.16766 0.21723 0.03482 0.00724 0.00413 0.02433 0.04434
+ 0.42165 0.16461 0.20735 0.03413 0.00716 0.00416 0.02378 0.04315
+ 0.41532 0.16159 0.19804 0.03345 0.00707 0.00417 0.02324 0.04197
+ 0.40913 0.15866 0.18944 0.03279 0.00698 0.00419 0.02272 0.04085
+ 0.40330 0.15592 0.18174 0.03217 0.00689 0.00419 0.02224 0.03981
+ 0.39783 0.15336 0.17485 0.03159 0.00680 0.00419 0.02178 0.03884
+ 0.39236 0.15082 0.16826 0.03101 0.00671 0.00418 0.02133 0.03790
+ 0.38700 0.14834 0.16209 0.03045 0.00662 0.00417 0.02090 0.03699
+ 0.38192 0.14601 0.15650 0.02992 0.00654 0.00415 0.02049 0.03614
+ 0.37715 0.14382 0.15143 0.02943 0.00645 0.00413 0.02011 0.03535
+ 0.37236 0.14164 0.14654 0.02894 0.00637 0.00411 0.01973 0.03457
+ 0.62231 0.26885 0.92518 0.04540 0.00000 0.00000 0.03121 0.07648
+ 0.61555 0.26434 0.86585 0.04536 0.00000 0.00000 0.03126 0.07476
+ 0.60523 0.25771 0.78558 0.04512 0.00000 0.00000 0.03114 0.07218
+ 0.59753 0.25291 0.72959 0.04482 0.00076 0.00000 0.03095 0.07029
+ 0.58927 0.24789 0.67510 0.04441 0.00156 0.00000 0.03066 0.06829
+ 0.58205 0.24359 0.63185 0.04399 0.00215 0.00000 0.03035 0.06658
+ 0.57505 0.23950 0.59338 0.04355 0.00264 0.00000 0.03002 0.06495
+ 0.56756 0.23519 0.55554 0.04303 0.00310 0.00000 0.02962 0.06324
+ 0.56101 0.23148 0.52497 0.04255 0.00344 0.00000 0.02925 0.06177
+ 0.55465 0.22794 0.49738 0.04206 0.00373 0.00000 0.02887 0.06036
+ 0.54960 0.22515 0.47676 0.04166 0.00394 0.00000 0.02856 0.05927
+ 0.53882 0.21928 0.43618 0.04077 0.00431 0.00000 0.02787 0.05697
+ 0.52950 0.21429 0.40292 0.03998 0.00456 0.00044 0.02725 0.05504
+ 0.51907 0.20881 0.36929 0.03907 0.00478 0.00089 0.02654 0.05293
+ 0.50826 0.20320 0.33803 0.03811 0.00494 0.00128 0.02579 0.05081
+ 0.49850 0.19822 0.31256 0.03723 0.00505 0.00157 0.02510 0.04895
+ 0.48872 0.19329 0.28936 0.03633 0.00513 0.00182 0.02441 0.04712
+ 0.48065 0.18927 0.27181 0.03559 0.00516 0.00200 0.02384 0.04566
+ 0.47095 0.18449 0.25239 0.03470 0.00519 0.00218 0.02315 0.04394
+ 0.46245 0.18035 0.23674 0.03392 0.00519 0.00232 0.02254 0.04247
+ 0.45472 0.17662 0.22353 0.03321 0.00518 0.00242 0.02200 0.04116
+ 0.44502 0.17198 0.20818 0.03231 0.00515 0.00253 0.02132 0.03956
+ 0.43601 0.16772 0.19504 0.03149 0.00510 0.00261 0.02069 0.03811
+ 0.42768 0.16381 0.18375 0.03073 0.00505 0.00267 0.02012 0.03680
+ 0.41945 0.15998 0.17336 0.02998 0.00500 0.00272 0.01955 0.03554
+ 0.41149 0.15631 0.16397 0.02926 0.00493 0.00275 0.01902 0.03434
+ 0.40406 0.15291 0.15572 0.02859 0.00487 0.00278 0.01852 0.03325
+ 0.39714 0.14976 0.14848 0.02797 0.00481 0.00279 0.01806 0.03225
+ 0.39027 0.14666 0.14167 0.02736 0.00474 0.00280 0.01761 0.03128
+ 0.38360 0.14367 0.13539 0.02676 0.00467 0.00280 0.01717 0.03035
+ 0.37734 0.14087 0.12978 0.02621 0.00461 0.00280 0.01677 0.02950
+ 0.37148 0.13827 0.12477 0.02570 0.00454 0.00280 0.01639 0.02871
+ 0.36564 0.13570 0.11999 0.02519 0.00448 0.00279 0.01602 0.02794
+ 0.35994 0.13320 0.11552 0.02470 0.00441 0.00278 0.01566 0.02720
+ 0.35457 0.13085 0.11147 0.02423 0.00435 0.00277 0.01533 0.02651
+ 0.34953 0.12866 0.10780 0.02380 0.00429 0.00275 0.01502 0.02588
+ 0.34449 0.12647 0.10427 0.02337 0.00422 0.00274 0.01471 0.02525
+ 0.62785 0.26280 0.73626 0.04149 0.00000 0.00000 0.02681 0.06358
+ 0.61898 0.25751 0.68380 0.04121 0.00000 0.00000 0.02664 0.06180
+ 0.60573 0.24981 0.61393 0.04066 0.00000 0.00000 0.02628 0.05918
+ 0.59602 0.24430 0.56616 0.04018 0.00054 0.00000 0.02594 0.05731
+ 0.58575 0.23859 0.52025 0.03961 0.00111 0.00000 0.02552 0.05536
+ 0.57688 0.23374 0.48420 0.03907 0.00153 0.00000 0.02513 0.05372
+ 0.56837 0.22915 0.45242 0.03853 0.00187 0.00000 0.02473 0.05217
+ 0.55935 0.22436 0.42145 0.03792 0.00219 0.00000 0.02429 0.05057
+ 0.55153 0.22025 0.39663 0.03738 0.00243 0.00000 0.02389 0.04920
+ 0.54401 0.21635 0.37438 0.03684 0.00262 0.00000 0.02349 0.04791
+ 0.53807 0.21329 0.35785 0.03641 0.00276 0.00000 0.02317 0.04690
+ 0.52548 0.20689 0.32558 0.03547 0.00301 0.00000 0.02248 0.04482
+ 0.51471 0.20150 0.29945 0.03465 0.00317 0.00031 0.02188 0.04309
+ 0.50278 0.19561 0.27326 0.03372 0.00331 0.00062 0.02120 0.04122
+ 0.49051 0.18963 0.24911 0.03276 0.00342 0.00088 0.02050 0.03936
+ 0.47953 0.18435 0.22960 0.03189 0.00348 0.00108 0.01987 0.03774
+ 0.46860 0.17916 0.21193 0.03103 0.00352 0.00125 0.01924 0.03617
+ 0.45965 0.17495 0.19864 0.03031 0.00354 0.00137 0.01873 0.03491
+ 0.44896 0.16997 0.18402 0.02946 0.00355 0.00149 0.01812 0.03345
+ 0.43965 0.16567 0.17229 0.02872 0.00354 0.00158 0.01759 0.03221
+ 0.43123 0.16182 0.16243 0.02805 0.00353 0.00165 0.01711 0.03111
+ 0.42072 0.15706 0.15102 0.02721 0.00350 0.00172 0.01653 0.02977
+ 0.41102 0.15271 0.14129 0.02644 0.00346 0.00178 0.01599 0.02857
+ 0.40209 0.14873 0.13297 0.02574 0.00342 0.00181 0.01550 0.02749
+ 0.39331 0.14485 0.12532 0.02505 0.00338 0.00184 0.01502 0.02645
+ 0.38487 0.14115 0.11843 0.02439 0.00333 0.00187 0.01457 0.02547
+ 0.37702 0.13774 0.11239 0.02378 0.00328 0.00188 0.01415 0.02458
+ 0.36975 0.13459 0.10710 0.02322 0.00324 0.00189 0.01377 0.02378
+ 0.36255 0.13150 0.10213 0.02267 0.00319 0.00189 0.01339 0.02299
+ 0.35559 0.12852 0.09755 0.02213 0.00314 0.00189 0.01304 0.02225
+ 0.34907 0.12575 0.09347 0.02164 0.00309 0.00189 0.01270 0.02157
+ 0.34300 0.12319 0.08983 0.02118 0.00304 0.00188 0.01239 0.02094
+ 0.33696 0.12065 0.08635 0.02072 0.00299 0.00188 0.01209 0.02033
+ 0.33110 0.11819 0.08310 0.02028 0.00295 0.00187 0.01180 0.01974
+ 0.32558 0.11590 0.08016 0.01987 0.00290 0.00186 0.01153 0.01920
+ 0.32042 0.11376 0.07750 0.01949 0.00286 0.00185 0.01128 0.01870
+ 0.31527 0.11163 0.07493 0.01910 0.00281 0.00183 0.01103 0.01821
+ 0.62509 0.25327 0.57655 0.03829 0.00000 0.00000 0.02289 0.05172
+ 0.61432 0.24735 0.53187 0.03781 0.00000 0.00000 0.02259 0.04999
+ 0.59843 0.23882 0.47317 0.03701 0.00000 0.00000 0.02207 0.04752
+ 0.58693 0.23276 0.43369 0.03638 0.00039 0.00000 0.02165 0.04577
+ 0.57490 0.22653 0.39615 0.03567 0.00078 0.00000 0.02117 0.04398
+ 0.56460 0.22127 0.36695 0.03504 0.00108 0.00000 0.02075 0.04248
+ 0.55479 0.21632 0.34142 0.03442 0.00132 0.00000 0.02032 0.04108
+ 0.54448 0.21118 0.31672 0.03374 0.00153 0.00000 0.01987 0.03965
+ 0.53559 0.20680 0.29707 0.03315 0.00170 0.00000 0.01947 0.03843
+ 0.52709 0.20265 0.27956 0.03258 0.00183 0.00000 0.01908 0.03730
+ 0.52042 0.19942 0.26662 0.03212 0.00192 0.00000 0.01877 0.03642
+ 0.50635 0.19268 0.24152 0.03114 0.00209 0.00000 0.01811 0.03461
+ 0.49442 0.18705 0.22140 0.03031 0.00220 0.00021 0.01755 0.03312
+ 0.48129 0.18092 0.20138 0.02938 0.00229 0.00043 0.01693 0.03152
+ 0.46789 0.17474 0.18304 0.02842 0.00235 0.00061 0.01629 0.02994
+ 0.45598 0.16932 0.16832 0.02757 0.00239 0.00075 0.01573 0.02858
+ 0.44420 0.16401 0.15506 0.02673 0.00242 0.00086 0.01517 0.02727
+ 0.43461 0.15973 0.14514 0.02604 0.00243 0.00094 0.01472 0.02623
+ 0.42321 0.15469 0.13425 0.02522 0.00242 0.00103 0.01419 0.02503
+ 0.41333 0.15036 0.12556 0.02452 0.00242 0.00109 0.01374 0.02401
+ 0.40445 0.14649 0.11828 0.02389 0.00240 0.00113 0.01333 0.02311
+ 0.39341 0.14173 0.10987 0.02310 0.00238 0.00118 0.01283 0.02203
+ 0.38326 0.13740 0.10272 0.02239 0.00235 0.00121 0.01238 0.02106
+ 0.37397 0.13346 0.09662 0.02173 0.00232 0.00124 0.01197 0.02019
+ 0.36488 0.12963 0.09102 0.02110 0.00229 0.00126 0.01157 0.01937
+ 0.35618 0.12600 0.08598 0.02049 0.00225 0.00127 0.01119 0.01859
+ 0.34811 0.12265 0.08158 0.01993 0.00222 0.00128 0.01084 0.01789
+ 0.34066 0.11958 0.07771 0.01942 0.00218 0.00128 0.01053 0.01725
+ 0.33331 0.11657 0.07409 0.01892 0.00215 0.00128 0.01022 0.01664
+ 0.32623 0.11368 0.07076 0.01843 0.00211 0.00128 0.00992 0.01606
+ 0.31962 0.11100 0.06778 0.01798 0.00207 0.00128 0.00965 0.01552
+ 0.31349 0.10853 0.06513 0.01757 0.00204 0.00128 0.00940 0.01504
+ 0.30740 0.10609 0.06260 0.01716 0.00201 0.00127 0.00915 0.01456
+ 0.30150 0.10373 0.06023 0.01677 0.00197 0.00126 0.00892 0.01411
+ 0.29597 0.10153 0.05809 0.01640 0.00194 0.00125 0.00870 0.01369
+ 0.29081 0.09949 0.05615 0.01606 0.00191 0.00125 0.00849 0.01331
+ 0.28567 0.09746 0.05428 0.01572 0.00188 0.00124 0.00829 0.01293
+ 0.61497 0.24090 0.44444 0.03546 0.00000 0.00000 0.01942 0.04112
+ 0.60252 0.23452 0.40759 0.03482 0.00000 0.00000 0.01904 0.03954
+ 0.58435 0.22538 0.35974 0.03382 0.00000 0.00000 0.01845 0.03731
+ 0.57132 0.21894 0.32801 0.03306 0.00027 0.00000 0.01799 0.03576
+ 0.55781 0.21236 0.29813 0.03225 0.00055 0.00000 0.01749 0.03419
+ 0.54632 0.20683 0.27508 0.03155 0.00075 0.00000 0.01706 0.03288
+ 0.53544 0.20166 0.25506 0.03087 0.00092 0.00000 0.01665 0.03167
+ 0.52407 0.19631 0.23582 0.03014 0.00107 0.00000 0.01620 0.03044
+ 0.51433 0.19178 0.22061 0.02952 0.00118 0.00000 0.01582 0.02941
+ 0.50506 0.18750 0.20713 0.02892 0.00127 0.00000 0.01546 0.02844
+ 0.49781 0.18417 0.19721 0.02845 0.00133 0.00000 0.01517 0.02770
+ 0.48261 0.17728 0.17807 0.02745 0.00144 0.00000 0.01456 0.02618
+ 0.46980 0.17154 0.16285 0.02661 0.00151 0.00015 0.01405 0.02494
+ 0.45579 0.16534 0.14780 0.02568 0.00157 0.00029 0.01350 0.02363
+ 0.44159 0.15912 0.13410 0.02474 0.00161 0.00042 0.01293 0.02234
+ 0.42903 0.15369 0.12314 0.02391 0.00164 0.00051 0.01244 0.02123
+ 0.41669 0.14839 0.11333 0.02310 0.00165 0.00059 0.01196 0.02017
+ 0.40668 0.14414 0.10600 0.02244 0.00165 0.00065 0.01157 0.01933
+ 0.39484 0.13916 0.09799 0.02166 0.00165 0.00070 0.01112 0.01837
+ 0.38463 0.13490 0.09161 0.02100 0.00164 0.00074 0.01073 0.01756
+ 0.37548 0.13111 0.08627 0.02040 0.00163 0.00078 0.01039 0.01685
+ 0.36416 0.12646 0.08012 0.01967 0.00161 0.00081 0.00996 0.01600
+ 0.35381 0.12224 0.07489 0.01900 0.00159 0.00083 0.00958 0.01524
+ 0.34437 0.11843 0.07044 0.01839 0.00157 0.00085 0.00924 0.01457
+ 0.33517 0.11473 0.06636 0.01781 0.00155 0.00086 0.00891 0.01392
+ 0.32639 0.11123 0.06269 0.01725 0.00152 0.00087 0.00860 0.01332
+ 0.31828 0.10802 0.05947 0.01674 0.00150 0.00087 0.00831 0.01278
+ 0.31081 0.10509 0.05666 0.01627 0.00147 0.00087 0.00805 0.01229
+ 0.30348 0.10222 0.05402 0.01581 0.00145 0.00087 0.00780 0.01182
+ 0.29643 0.09947 0.05159 0.01538 0.00142 0.00087 0.00756 0.01138
+ 0.28987 0.09694 0.04942 0.01497 0.00140 0.00087 0.00734 0.01098
+ 0.28380 0.09459 0.04748 0.01460 0.00137 0.00087 0.00714 0.01061
+ 0.27779 0.09229 0.04563 0.01423 0.00135 0.00086 0.00694 0.01025
+ 0.27198 0.09008 0.04390 0.01388 0.00133 0.00086 0.00675 0.00991
+ 0.26655 0.08801 0.04234 0.01355 0.00130 0.00085 0.00657 0.00959
+ 0.26148 0.08610 0.04092 0.01324 0.00128 0.00085 0.00641 0.00931
+ 0.25646 0.08421 0.03955 0.01294 0.00126 0.00084 0.00625 0.00902
+ 0.59841 0.22632 0.33728 0.03277 0.00000 0.00000 0.01637 0.03192
+ 0.58454 0.21963 0.30776 0.03200 0.00000 0.00000 0.01595 0.03055
+ 0.56448 0.21012 0.26982 0.03084 0.00000 0.00000 0.01533 0.02862
+ 0.55021 0.20347 0.24496 0.03000 0.00019 0.00000 0.01487 0.02730
+ 0.53550 0.19670 0.22176 0.02912 0.00038 0.00000 0.01439 0.02597
+ 0.52307 0.19104 0.20398 0.02836 0.00052 0.00000 0.01397 0.02488
+ 0.51138 0.18578 0.18864 0.02765 0.00063 0.00000 0.01358 0.02387
+ 0.49920 0.18035 0.17398 0.02689 0.00074 0.00000 0.01316 0.02285
+ 0.48882 0.17577 0.16245 0.02625 0.00081 0.00000 0.01281 0.02200
+ 0.47898 0.17146 0.15228 0.02564 0.00087 0.00000 0.01248 0.02121
+ 0.47131 0.16812 0.14482 0.02516 0.00091 0.00000 0.01222 0.02061
+ 0.45531 0.16123 0.13050 0.02417 0.00099 0.00000 0.01167 0.01938
+ 0.44191 0.15553 0.11918 0.02333 0.00104 0.00010 0.01122 0.01838
+ 0.42732 0.14938 0.10804 0.02242 0.00107 0.00020 0.01073 0.01733
+ 0.41262 0.14326 0.09795 0.02151 0.00110 0.00029 0.01025 0.01631
+ 0.39970 0.13794 0.08991 0.02071 0.00112 0.00035 0.00982 0.01543
+ 0.38705 0.13277 0.08272 0.01993 0.00112 0.00041 0.00941 0.01460
+ 0.37684 0.12864 0.07736 0.01931 0.00113 0.00045 0.00908 0.01395
+ 0.36481 0.12382 0.07152 0.01857 0.00112 0.00048 0.00869 0.01320
+ 0.35447 0.11971 0.06688 0.01794 0.00112 0.00051 0.00837 0.01258
+ 0.34525 0.11606 0.06299 0.01739 0.00111 0.00053 0.00808 0.01203
+ 0.33389 0.11161 0.05852 0.01671 0.00109 0.00055 0.00773 0.01138
+ 0.32354 0.10759 0.05472 0.01609 0.00108 0.00057 0.00741 0.01080
+ 0.31413 0.10396 0.05148 0.01553 0.00106 0.00058 0.00713 0.01029
+ 0.30500 0.10046 0.04851 0.01499 0.00105 0.00059 0.00686 0.00980
+ 0.29631 0.09716 0.04584 0.01449 0.00103 0.00059 0.00660 0.00935
+ 0.28832 0.09414 0.04350 0.01402 0.00101 0.00060 0.00637 0.00895
+ 0.28098 0.09138 0.04145 0.01360 0.00099 0.00060 0.00616 0.00858
+ 0.27379 0.08869 0.03952 0.01318 0.00097 0.00060 0.00595 0.00823
+ 0.26690 0.08613 0.03775 0.01279 0.00096 0.00060 0.00576 0.00790
+ 0.26050 0.08377 0.03616 0.01243 0.00094 0.00059 0.00558 0.00760
+ 0.25459 0.08160 0.03474 0.01209 0.00092 0.00059 0.00541 0.00733
+ 0.24877 0.07947 0.03339 0.01176 0.00091 0.00059 0.00525 0.00707
+ 0.24314 0.07742 0.03212 0.01145 0.00089 0.00058 0.00510 0.00682
+ 0.23790 0.07551 0.03097 0.01116 0.00088 0.00058 0.00496 0.00659
+ 0.23302 0.07375 0.02993 0.01089 0.00086 0.00058 0.00483 0.00638
+ 0.22819 0.07201 0.02893 0.01062 0.00085 0.00057 0.00470 0.00617
+ 0.57634 0.21010 0.25194 0.03007 0.00000 0.00000 0.01369 0.02414
+ 0.56133 0.20327 0.22893 0.02921 0.00000 0.00000 0.01327 0.02300
+ 0.53978 0.19361 0.19963 0.02796 0.00000 0.00000 0.01266 0.02141
+ 0.52456 0.18689 0.18065 0.02706 0.00013 0.00000 0.01222 0.02032
+ 0.50896 0.18009 0.16305 0.02613 0.00026 0.00000 0.01176 0.01924
+ 0.49585 0.17443 0.14965 0.02535 0.00036 0.00000 0.01138 0.01836
+ 0.48356 0.16918 0.13815 0.02462 0.00043 0.00000 0.01102 0.01755
+ 0.47084 0.16380 0.12722 0.02386 0.00050 0.00000 0.01064 0.01673
+ 0.46003 0.15926 0.11866 0.02321 0.00055 0.00000 0.01033 0.01606
+ 0.44982 0.15502 0.11113 0.02260 0.00059 0.00000 0.01003 0.01544
+ 0.44188 0.15174 0.10563 0.02213 0.00062 0.00000 0.00980 0.01496
+ 0.42541 0.14499 0.09511 0.02115 0.00067 0.00000 0.00932 0.01400
+ 0.41167 0.13943 0.08683 0.02034 0.00070 0.00007 0.00893 0.01322
+ 0.39680 0.13347 0.07870 0.01946 0.00073 0.00014 0.00851 0.01241
+ 0.38189 0.12755 0.07136 0.01859 0.00075 0.00020 0.00809 0.01162
+ 0.36884 0.12243 0.06553 0.01783 0.00076 0.00024 0.00773 0.01095
+ 0.35613 0.11749 0.06032 0.01710 0.00076 0.00028 0.00738 0.01032
+ 0.34591 0.11355 0.05645 0.01651 0.00076 0.00031 0.00710 0.00983
+ 0.33391 0.10896 0.05222 0.01583 0.00076 0.00033 0.00678 0.00927
+ 0.32365 0.10507 0.04886 0.01525 0.00076 0.00035 0.00651 0.00880
+ 0.31452 0.10163 0.04605 0.01473 0.00075 0.00037 0.00627 0.00840
+ 0.30331 0.09745 0.04281 0.01410 0.00074 0.00038 0.00598 0.00791
+ 0.29314 0.09368 0.04006 0.01354 0.00073 0.00039 0.00572 0.00748
+ 0.28393 0.09029 0.03771 0.01303 0.00072 0.00040 0.00549 0.00710
+ 0.27501 0.08703 0.03555 0.01255 0.00071 0.00040 0.00526 0.00675
+ 0.26656 0.08397 0.03361 0.01209 0.00069 0.00041 0.00506 0.00642
+ 0.25881 0.08117 0.03190 0.01167 0.00068 0.00041 0.00487 0.00612
+ 0.25171 0.07863 0.03040 0.01129 0.00067 0.00041 0.00470 0.00586
+ 0.24478 0.07615 0.02900 0.01092 0.00066 0.00041 0.00453 0.00561
+ 0.23815 0.07380 0.02770 0.01057 0.00064 0.00041 0.00437 0.00537
+ 0.23202 0.07164 0.02653 0.01025 0.00063 0.00041 0.00423 0.00515
+ 0.22636 0.06965 0.02549 0.00995 0.00062 0.00040 0.00410 0.00496
+ 0.22080 0.06771 0.02450 0.00966 0.00061 0.00040 0.00397 0.00477
+ 0.21544 0.06585 0.02357 0.00938 0.00060 0.00040 0.00385 0.00459
+ 0.21045 0.06412 0.02272 0.00913 0.00059 0.00040 0.00374 0.00443
+ 0.20582 0.06253 0.02195 0.00889 0.00058 0.00039 0.00363 0.00428
+ 0.20124 0.06095 0.02121 0.00865 0.00057 0.00039 0.00353 0.00413
+ 0.54964 0.19280 0.18518 0.02731 0.00000 0.00000 0.01136 0.01776
+ 0.53379 0.18597 0.16772 0.02639 0.00000 0.00000 0.01096 0.01684
+ 0.51117 0.17637 0.14568 0.02508 0.00000 0.00000 0.01038 0.01557
+ 0.49529 0.16972 0.13153 0.02416 0.00009 0.00000 0.00997 0.01472
+ 0.47910 0.16302 0.11850 0.02323 0.00018 0.00000 0.00956 0.01387
+ 0.46555 0.15747 0.10863 0.02244 0.00024 0.00000 0.00921 0.01318
+ 0.45291 0.15234 0.10020 0.02172 0.00029 0.00000 0.00889 0.01256
+ 0.43986 0.14710 0.09222 0.02097 0.00034 0.00000 0.00856 0.01193
+ 0.42883 0.14270 0.08599 0.02034 0.00037 0.00000 0.00828 0.01141
+ 0.41844 0.13859 0.08052 0.01974 0.00040 0.00000 0.00802 0.01093
+ 0.41039 0.13543 0.07654 0.01929 0.00042 0.00000 0.00782 0.01057
+ 0.39374 0.12894 0.06894 0.01835 0.00046 0.00000 0.00741 0.00984
+ 0.37993 0.12362 0.06298 0.01757 0.00048 0.00005 0.00707 0.00926
+ 0.36504 0.11794 0.05713 0.01674 0.00049 0.00010 0.00671 0.00865
+ 0.35018 0.11233 0.05186 0.01592 0.00051 0.00014 0.00636 0.00807
+ 0.33723 0.10749 0.04768 0.01521 0.00051 0.00017 0.00605 0.00757
+ 0.32467 0.10284 0.04394 0.01453 0.00052 0.00019 0.00576 0.00711
+ 0.31461 0.09915 0.04116 0.01399 0.00052 0.00021 0.00553 0.00675
+ 0.30284 0.09486 0.03812 0.01336 0.00051 0.00023 0.00526 0.00634
+ 0.29281 0.09124 0.03570 0.01283 0.00051 0.00024 0.00504 0.00600
+ 0.28392 0.08805 0.03368 0.01236 0.00051 0.00025 0.00484 0.00571
+ 0.27304 0.08417 0.03134 0.01180 0.00050 0.00026 0.00461 0.00536
+ 0.26320 0.08070 0.02935 0.01129 0.00049 0.00027 0.00439 0.00505
+ 0.25432 0.07758 0.02765 0.01083 0.00048 0.00027 0.00420 0.00478
+ 0.24575 0.07460 0.02608 0.01040 0.00048 0.00028 0.00402 0.00453
+ 0.23766 0.07180 0.02467 0.00999 0.00047 0.00028 0.00386 0.00429
+ 0.23025 0.06925 0.02342 0.00962 0.00046 0.00028 0.00370 0.00408
+ 0.22349 0.06694 0.02233 0.00928 0.00045 0.00028 0.00357 0.00390
+ 0.21690 0.06470 0.02130 0.00896 0.00044 0.00028 0.00344 0.00372
+ 0.21062 0.06258 0.02034 0.00865 0.00043 0.00028 0.00331 0.00355
+ 0.20482 0.06063 0.01949 0.00837 0.00043 0.00028 0.00320 0.00340
+ 0.19948 0.05884 0.01872 0.00811 0.00042 0.00028 0.00309 0.00327
+ 0.19424 0.05709 0.01799 0.00785 0.00041 0.00028 0.00299 0.00314
+ 0.18921 0.05543 0.01730 0.00761 0.00040 0.00027 0.00289 0.00301
+ 0.18453 0.05388 0.01668 0.00739 0.00040 0.00027 0.00280 0.00290
+ 0.18021 0.05246 0.01611 0.00719 0.00039 0.00027 0.00272 0.00280
+ 0.17593 0.05106 0.01556 0.00698 0.00038 0.00027 0.00264 0.00270
+ 0.51918 0.17490 0.13387 0.02446 0.00000 0.00000 0.00934 0.01267
+ 0.50277 0.16820 0.12099 0.02353 0.00000 0.00000 0.00897 0.01196
+ 0.47948 0.15883 0.10485 0.02222 0.00000 0.00000 0.00845 0.01099
+ 0.46323 0.15237 0.09457 0.02131 0.00006 0.00000 0.00808 0.01034
+ 0.44674 0.14589 0.08515 0.02039 0.00012 0.00000 0.00771 0.00970
+ 0.43299 0.14055 0.07805 0.01962 0.00016 0.00000 0.00740 0.00918
+ 0.42022 0.13563 0.07200 0.01892 0.00020 0.00000 0.00712 0.00871
+ 0.40709 0.13062 0.06629 0.01820 0.00023 0.00000 0.00683 0.00825
+ 0.39602 0.12642 0.06185 0.01760 0.00025 0.00000 0.00659 0.00786
+ 0.38563 0.12252 0.05796 0.01704 0.00027 0.00000 0.00637 0.00751
+ 0.37760 0.11952 0.05513 0.01660 0.00028 0.00000 0.00620 0.00725
+ 0.36106 0.11339 0.04973 0.01572 0.00031 0.00000 0.00585 0.00672
+ 0.34739 0.10838 0.04550 0.01500 0.00032 0.00003 0.00556 0.00629
+ 0.33272 0.10306 0.04135 0.01423 0.00033 0.00007 0.00526 0.00586
+ 0.31814 0.09783 0.03761 0.01347 0.00034 0.00009 0.00497 0.00543
+ 0.30550 0.09333 0.03464 0.01283 0.00034 0.00012 0.00471 0.00508
+ 0.29328 0.08903 0.03198 0.01221 0.00035 0.00013 0.00447 0.00475
+ 0.28352 0.08562 0.02999 0.01172 0.00035 0.00014 0.00428 0.00450
+ 0.27215 0.08168 0.02782 0.01115 0.00035 0.00016 0.00406 0.00421
+ 0.26250 0.07835 0.02609 0.01067 0.00034 0.00017 0.00388 0.00397
+ 0.25396 0.07544 0.02463 0.01025 0.00034 0.00017 0.00372 0.00377
+ 0.24355 0.07191 0.02295 0.00975 0.00034 0.00018 0.00353 0.00352
+ 0.23417 0.06876 0.02151 0.00930 0.00033 0.00018 0.00336 0.00331
+ 0.22573 0.06594 0.02028 0.00890 0.00033 0.00019 0.00321 0.00312
+ 0.21762 0.06325 0.01914 0.00851 0.00032 0.00019 0.00306 0.00295
+ 0.20997 0.06073 0.01811 0.00816 0.00031 0.00019 0.00293 0.00279
+ 0.20299 0.05844 0.01720 0.00783 0.00031 0.00019 0.00281 0.00265
+ 0.19664 0.05638 0.01640 0.00754 0.00030 0.00019 0.00270 0.00252
+ 0.19047 0.05438 0.01564 0.00726 0.00030 0.00019 0.00259 0.00240
+ 0.18459 0.05249 0.01494 0.00699 0.00029 0.00019 0.00249 0.00229
+ 0.17918 0.05075 0.01431 0.00675 0.00029 0.00019 0.00240 0.00219
+ 0.17422 0.04917 0.01375 0.00652 0.00028 0.00019 0.00232 0.00209
+ 0.16935 0.04763 0.01320 0.00631 0.00028 0.00019 0.00224 0.00201
+ 0.16469 0.04615 0.01270 0.00610 0.00027 0.00019 0.00216 0.00192
+ 0.16036 0.04479 0.01223 0.00591 0.00027 0.00018 0.00209 0.00185
+ 0.15637 0.04354 0.01181 0.00574 0.00026 0.00018 0.00203 0.00178
+ 0.15243 0.04231 0.01140 0.00557 0.00026 0.00018 0.00197 0.00171
+ 0.48578 0.15684 0.09513 0.02157 0.00000 0.00000 0.00761 0.00873
+ 0.46909 0.15038 0.08590 0.02066 0.00000 0.00000 0.00728 0.00820
+ 0.44554 0.14139 0.07442 0.01938 0.00000 0.00000 0.00681 0.00749
+ 0.42918 0.13523 0.06715 0.01850 0.00004 0.00000 0.00649 0.00701
+ 0.41266 0.12907 0.06051 0.01763 0.00008 0.00000 0.00617 0.00655
+ 0.39895 0.12402 0.05552 0.01691 0.00011 0.00000 0.00590 0.00618
+ 0.38625 0.11937 0.05129 0.01624 0.00013 0.00000 0.00566 0.00584
+ 0.37324 0.11466 0.04730 0.01557 0.00015 0.00000 0.00542 0.00551
+ 0.36231 0.11073 0.04419 0.01501 0.00017 0.00000 0.00521 0.00524
+ 0.35208 0.10708 0.04148 0.01449 0.00018 0.00000 0.00502 0.00499
+ 0.34419 0.10428 0.03950 0.01409 0.00019 0.00000 0.00488 0.00480
+ 0.32800 0.09858 0.03573 0.01328 0.00020 0.00000 0.00458 0.00443
+ 0.31468 0.09395 0.03277 0.01262 0.00021 0.00002 0.00435 0.00413
+ 0.30044 0.08904 0.02986 0.01192 0.00022 0.00005 0.00410 0.00383
+ 0.28635 0.08423 0.02723 0.01124 0.00023 0.00006 0.00385 0.00354
+ 0.27418 0.08012 0.02513 0.01066 0.00023 0.00008 0.00365 0.00330
+ 0.26246 0.07620 0.02325 0.01011 0.00023 0.00009 0.00345 0.00307
+ 0.25314 0.07310 0.02184 0.00967 0.00023 0.00010 0.00329 0.00290
+ 0.24231 0.06953 0.02030 0.00917 0.00023 0.00011 0.00312 0.00270
+ 0.23314 0.06653 0.01906 0.00875 0.00023 0.00011 0.00297 0.00254
+ 0.22506 0.06391 0.01801 0.00838 0.00023 0.00012 0.00284 0.00240
+ 0.21524 0.06074 0.01680 0.00794 0.00023 0.00012 0.00269 0.00224
+ 0.20642 0.05792 0.01576 0.00755 0.00022 0.00013 0.00255 0.00210
+ 0.19851 0.05541 0.01486 0.00720 0.00022 0.00013 0.00243 0.00198
+ 0.19092 0.05302 0.01404 0.00687 0.00022 0.00013 0.00231 0.00186
+ 0.18380 0.05079 0.01328 0.00656 0.00021 0.00013 0.00221 0.00176
+ 0.17731 0.04877 0.01262 0.00629 0.00021 0.00013 0.00211 0.00166
+ 0.17142 0.04695 0.01203 0.00604 0.00020 0.00013 0.00202 0.00158
+ 0.16571 0.04519 0.01147 0.00580 0.00020 0.00013 0.00194 0.00150
+ 0.16029 0.04353 0.01096 0.00557 0.00020 0.00013 0.00186 0.00143
+ 0.15531 0.04201 0.01049 0.00536 0.00019 0.00013 0.00179 0.00136
+ 0.15075 0.04063 0.01007 0.00518 0.00019 0.00013 0.00173 0.00130
+ 0.14629 0.03928 0.00967 0.00499 0.00018 0.00013 0.00167 0.00124
+ 0.14202 0.03800 0.00930 0.00482 0.00018 0.00013 0.00161 0.00119
+ 0.13807 0.03682 0.00895 0.00466 0.00018 0.00013 0.00155 0.00114
+ 0.13443 0.03573 0.00864 0.00452 0.00017 0.00012 0.00150 0.00110
+ 0.13084 0.03467 0.00834 0.00437 0.00017 0.00012 0.00145 0.00105
+ 0.45024 0.13899 0.06639 0.01869 0.00000 0.00000 0.00614 0.00578
+ 0.43354 0.13288 0.05999 0.01782 0.00000 0.00000 0.00585 0.00540
+ 0.41009 0.12440 0.05207 0.01662 0.00000 0.00000 0.00544 0.00490
+ 0.39389 0.11862 0.04707 0.01580 0.00003 0.00000 0.00517 0.00457
+ 0.37759 0.11287 0.04253 0.01499 0.00005 0.00000 0.00489 0.00425
+ 0.36411 0.10816 0.03911 0.01432 0.00007 0.00000 0.00467 0.00399
+ 0.35168 0.10385 0.03622 0.01371 0.00009 0.00000 0.00446 0.00376
+ 0.33898 0.09948 0.03349 0.01310 0.00010 0.00000 0.00425 0.00354
+ 0.32834 0.09586 0.03137 0.01259 0.00011 0.00000 0.00408 0.00335
+ 0.31842 0.09250 0.02951 0.01212 0.00012 0.00000 0.00393 0.00318
+ 0.31078 0.08993 0.02815 0.01176 0.00013 0.00000 0.00381 0.00306
+ 0.29516 0.08472 0.02556 0.01103 0.00014 0.00000 0.00356 0.00281
+ 0.28236 0.08049 0.02351 0.01045 0.00014 0.00002 0.00337 0.00261
+ 0.26874 0.07603 0.02150 0.00983 0.00015 0.00003 0.00316 0.00241
+ 0.25531 0.07169 0.01966 0.00923 0.00015 0.00004 0.00296 0.00222
+ 0.24375 0.06798 0.01820 0.00872 0.00015 0.00005 0.00280 0.00206
+ 0.23267 0.06446 0.01687 0.00823 0.00016 0.00006 0.00264 0.00191
+ 0.22388 0.06169 0.01588 0.00785 0.00016 0.00007 0.00251 0.00180
+ 0.21370 0.05851 0.01478 0.00742 0.00016 0.00007 0.00237 0.00167
+ 0.20511 0.05584 0.01389 0.00706 0.00015 0.00008 0.00225 0.00157
+ 0.19757 0.05352 0.01315 0.00674 0.00015 0.00008 0.00215 0.00148
+ 0.18842 0.05072 0.01227 0.00637 0.00015 0.00008 0.00203 0.00137
+ 0.18024 0.04823 0.01152 0.00603 0.00015 0.00009 0.00192 0.00128
+ 0.17291 0.04603 0.01087 0.00574 0.00015 0.00009 0.00182 0.00120
+ 0.16591 0.04393 0.01027 0.00546 0.00014 0.00009 0.00173 0.00113
+ 0.15936 0.04198 0.00972 0.00520 0.00014 0.00009 0.00165 0.00106
+ 0.15340 0.04022 0.00923 0.00497 0.00014 0.00009 0.00157 0.00100
+ 0.14801 0.03864 0.00880 0.00476 0.00014 0.00009 0.00151 0.00095
+ 0.14280 0.03711 0.00839 0.00456 0.00013 0.00009 0.00144 0.00090
+ 0.13786 0.03568 0.00801 0.00437 0.00013 0.00009 0.00138 0.00086
+ 0.13333 0.03437 0.00766 0.00420 0.00013 0.00009 0.00133 0.00082
+ 0.12919 0.03318 0.00735 0.00404 0.00013 0.00009 0.00128 0.00078
+ 0.12516 0.03202 0.00706 0.00389 0.00012 0.00009 0.00123 0.00074
+ 0.12130 0.03092 0.00678 0.00375 0.00012 0.00009 0.00118 0.00071
+ 0.11774 0.02991 0.00652 0.00362 0.00012 0.00009 0.00114 0.00068
+ 0.11446 0.02899 0.00629 0.00350 0.00012 0.00008 0.00110 0.00065
+ 0.11124 0.02808 0.00607 0.00338 0.00011 0.00008 0.00107 0.00063
+ 0.41326 0.12168 0.04549 0.01588 0.00000 0.00000 0.00490 0.00365
+ 0.39680 0.11598 0.04122 0.01508 0.00000 0.00000 0.00465 0.00340
+ 0.37380 0.10812 0.03594 0.01399 0.00000 0.00000 0.00430 0.00307
+ 0.35798 0.10278 0.03262 0.01324 0.00002 0.00000 0.00407 0.00285
+ 0.34213 0.09749 0.02959 0.01251 0.00003 0.00000 0.00384 0.00263
+ 0.32908 0.09317 0.02732 0.01191 0.00005 0.00000 0.00365 0.00247
+ 0.31707 0.08923 0.02539 0.01137 0.00006 0.00000 0.00348 0.00232
+ 0.30485 0.08526 0.02357 0.01082 0.00007 0.00000 0.00331 0.00217
+ 0.29465 0.08196 0.02215 0.01037 0.00007 0.00000 0.00317 0.00205
+ 0.28515 0.07892 0.02090 0.00995 0.00008 0.00000 0.00304 0.00194
+ 0.27787 0.07660 0.01999 0.00964 0.00008 0.00000 0.00294 0.00186
+ 0.26300 0.07191 0.01823 0.00900 0.00009 0.00000 0.00274 0.00170
+ 0.25087 0.06811 0.01683 0.00849 0.00009 0.00001 0.00258 0.00158
+ 0.23801 0.06413 0.01545 0.00795 0.00010 0.00002 0.00242 0.00145
+ 0.22538 0.06026 0.01418 0.00744 0.00010 0.00003 0.00226 0.00133
+ 0.21456 0.05697 0.01315 0.00700 0.00010 0.00004 0.00212 0.00123
+ 0.20421 0.05386 0.01222 0.00659 0.00010 0.00004 0.00200 0.00114
+ 0.19603 0.05142 0.01152 0.00627 0.00010 0.00005 0.00190 0.00107
+ 0.18659 0.04862 0.01074 0.00590 0.00010 0.00005 0.00179 0.00099
+ 0.17866 0.04629 0.01011 0.00559 0.00010 0.00005 0.00169 0.00092
+ 0.17170 0.04426 0.00957 0.00533 0.00010 0.00006 0.00161 0.00087
+ 0.16329 0.04182 0.00894 0.00501 0.00010 0.00006 0.00152 0.00081
+ 0.15579 0.03966 0.00840 0.00474 0.00010 0.00006 0.00143 0.00075
+ 0.14911 0.03776 0.00793 0.00449 0.00010 0.00006 0.00136 0.00070
+ 0.14273 0.03595 0.00749 0.00426 0.00010 0.00006 0.00129 0.00066
+ 0.13677 0.03427 0.00708 0.00405 0.00009 0.00006 0.00122 0.00062
+ 0.13138 0.03276 0.00673 0.00385 0.00009 0.00006 0.00116 0.00058
+ 0.12651 0.03141 0.00641 0.00368 0.00009 0.00006 0.00111 0.00055
+ 0.12181 0.03010 0.00611 0.00352 0.00009 0.00006 0.00106 0.00052
+ 0.11737 0.02888 0.00583 0.00336 0.00009 0.00006 0.00101 0.00050
+ 0.11330 0.02777 0.00557 0.00323 0.00009 0.00006 0.00097 0.00047
+ 0.10960 0.02676 0.00534 0.00310 0.00008 0.00006 0.00093 0.00045
+ 0.10599 0.02578 0.00513 0.00298 0.00008 0.00006 0.00090 0.00043
+ 0.10255 0.02485 0.00492 0.00286 0.00008 0.00006 0.00086 0.00041
+ 0.09938 0.02400 0.00473 0.00276 0.00008 0.00006 0.00083 0.00039
+ 0.09646 0.02322 0.00456 0.00266 0.00008 0.00006 0.00080 0.00037
+ 0.09361 0.02246 0.00439 0.00257 0.00008 0.00006 0.00077 0.00036
+ 0.37554 0.10518 0.03056 0.01323 0.00000 0.00000 0.00386 0.00218
+ 0.35956 0.09996 0.02783 0.01251 0.00000 0.00000 0.00365 0.00202
+ 0.33732 0.09278 0.02447 0.01153 0.00000 0.00000 0.00336 0.00181
+ 0.32210 0.08793 0.02234 0.01088 0.00001 0.00000 0.00317 0.00167
+ 0.30690 0.08314 0.02039 0.01023 0.00002 0.00000 0.00298 0.00154
+ 0.29443 0.07924 0.01893 0.00971 0.00003 0.00000 0.00282 0.00144
+ 0.28300 0.07570 0.01768 0.00924 0.00004 0.00000 0.00268 0.00135
+ 0.27140 0.07214 0.01649 0.00876 0.00004 0.00000 0.00254 0.00126
+ 0.26174 0.06919 0.01556 0.00837 0.00005 0.00000 0.00243 0.00119
+ 0.25278 0.06648 0.01474 0.00802 0.00005 0.00000 0.00233 0.00112
+ 0.24591 0.06442 0.01413 0.00775 0.00005 0.00000 0.00225 0.00107
+ 0.23196 0.06025 0.01296 0.00720 0.00006 0.00000 0.00209 0.00098
+ 0.22062 0.05690 0.01201 0.00677 0.00006 0.00001 0.00196 0.00090
+ 0.20864 0.05339 0.01107 0.00631 0.00007 0.00001 0.00183 0.00083
+ 0.19692 0.05000 0.01019 0.00588 0.00007 0.00002 0.00170 0.00075
+ 0.18692 0.04713 0.00948 0.00551 0.00007 0.00003 0.00160 0.00070
+ 0.17738 0.04442 0.00883 0.00517 0.00007 0.00003 0.00150 0.00064
+ 0.16987 0.04230 0.00834 0.00490 0.00007 0.00003 0.00142 0.00060
+ 0.16123 0.03988 0.00778 0.00460 0.00007 0.00003 0.00133 0.00056
+ 0.15399 0.03787 0.00733 0.00435 0.00007 0.00004 0.00126 0.00052
+ 0.14766 0.03612 0.00694 0.00413 0.00007 0.00004 0.00120 0.00049
+ 0.14003 0.03403 0.00649 0.00387 0.00007 0.00004 0.00112 0.00045
+ 0.13325 0.03219 0.00609 0.00364 0.00007 0.00004 0.00106 0.00042
+ 0.12722 0.03057 0.00575 0.00345 0.00006 0.00004 0.00100 0.00039
+ 0.12149 0.02903 0.00543 0.00326 0.00006 0.00004 0.00094 0.00037
+ 0.11615 0.02761 0.00513 0.00309 0.00006 0.00004 0.00089 0.00034
+ 0.11133 0.02633 0.00487 0.00293 0.00006 0.00004 0.00085 0.00032
+ 0.10699 0.02519 0.00464 0.00279 0.00006 0.00004 0.00081 0.00031
+ 0.10280 0.02409 0.00442 0.00266 0.00006 0.00004 0.00077 0.00029
+ 0.09886 0.02307 0.00421 0.00254 0.00006 0.00004 0.00074 0.00027
+ 0.09526 0.02214 0.00402 0.00243 0.00006 0.00004 0.00070 0.00026
+ 0.09198 0.02129 0.00386 0.00233 0.00006 0.00004 0.00068 0.00025
+ 0.08879 0.02048 0.00369 0.00223 0.00005 0.00004 0.00065 0.00024
+ 0.08577 0.01970 0.00354 0.00214 0.00005 0.00004 0.00062 0.00023
+ 0.08298 0.01900 0.00340 0.00206 0.00005 0.00004 0.00060 0.00022
+ 0.08042 0.01835 0.00328 0.00198 0.00005 0.00004 0.00058 0.00021
+ 0.07792 0.01772 0.00315 0.00191 0.00005 0.00004 0.00055 0.00020
+ 0.33773 0.08971 0.02011 0.01077 0.00000 0.00000 0.00300 0.00121
+ 0.32242 0.08500 0.01847 0.01015 0.00000 0.00000 0.00283 0.00112
+ 0.30121 0.07855 0.01643 0.00931 0.00000 0.00000 0.00259 0.00100
+ 0.28677 0.07422 0.01513 0.00874 0.00001 0.00000 0.00243 0.00092
+ 0.27240 0.06995 0.01393 0.00819 0.00001 0.00000 0.00228 0.00084
+ 0.26065 0.06649 0.01301 0.00775 0.00002 0.00000 0.00215 0.00078
+ 0.24991 0.06335 0.01223 0.00734 0.00002 0.00000 0.00204 0.00073
+ 0.23905 0.06021 0.01147 0.00695 0.00003 0.00000 0.00193 0.00068
+ 0.23003 0.05762 0.01088 0.00662 0.00003 0.00000 0.00184 0.00064
+ 0.22168 0.05524 0.01035 0.00632 0.00003 0.00000 0.00176 0.00060
+ 0.21531 0.05343 0.00995 0.00609 0.00004 0.00000 0.00169 0.00058
+ 0.20239 0.04980 0.00918 0.00564 0.00004 0.00000 0.00157 0.00052
+ 0.19192 0.04688 0.00854 0.00528 0.00004 0.00000 0.00147 0.00048
+ 0.18091 0.04385 0.00790 0.00491 0.00004 0.00001 0.00137 0.00044
+ 0.17018 0.04092 0.00730 0.00455 0.00004 0.00001 0.00127 0.00040
+ 0.16106 0.03845 0.00681 0.00425 0.00004 0.00002 0.00118 0.00037
+ 0.15239 0.03613 0.00635 0.00397 0.00005 0.00002 0.00111 0.00034
+ 0.14559 0.03432 0.00600 0.00375 0.00005 0.00002 0.00105 0.00032
+ 0.13779 0.03226 0.00561 0.00351 0.00005 0.00002 0.00098 0.00030
+ 0.13126 0.03055 0.00528 0.00331 0.00005 0.00002 0.00092 0.00028
+ 0.12558 0.02907 0.00501 0.00313 0.00004 0.00003 0.00087 0.00026
+ 0.11875 0.02731 0.00468 0.00293 0.00004 0.00003 0.00082 0.00024
+ 0.11270 0.02576 0.00439 0.00275 0.00004 0.00003 0.00077 0.00022
+ 0.10734 0.02440 0.00414 0.00259 0.00004 0.00003 0.00072 0.00021
+ 0.10225 0.02311 0.00391 0.00244 0.00004 0.00003 0.00068 0.00020
+ 0.09753 0.02193 0.00369 0.00230 0.00004 0.00003 0.00065 0.00018
+ 0.09327 0.02087 0.00350 0.00218 0.00004 0.00003 0.00061 0.00017
+ 0.08945 0.01992 0.00333 0.00208 0.00004 0.00003 0.00058 0.00016
+ 0.08577 0.01901 0.00317 0.00197 0.00004 0.00003 0.00055 0.00015
+ 0.08231 0.01816 0.00302 0.00188 0.00004 0.00003 0.00053 0.00015
+ 0.07917 0.01740 0.00288 0.00179 0.00004 0.00003 0.00050 0.00014
+ 0.07631 0.01670 0.00276 0.00172 0.00004 0.00003 0.00048 0.00013
+ 0.07353 0.01603 0.00264 0.00164 0.00004 0.00003 0.00046 0.00013
+ 0.07090 0.01540 0.00253 0.00157 0.00003 0.00003 0.00044 0.00012
+ 0.06848 0.01482 0.00242 0.00151 0.00003 0.00003 0.00042 0.00012
+ 0.06627 0.01429 0.00233 0.00145 0.00003 0.00003 0.00041 0.00011
+ 0.06411 0.01378 0.00224 0.00139 0.00003 0.00002 0.00039 0.00011
+ 0.30037 0.07542 0.01297 0.00857 0.00000 0.00000 0.00230 0.00061
+ 0.28591 0.07124 0.01205 0.00804 0.00000 0.00000 0.00216 0.00057
+ 0.26597 0.06555 0.01091 0.00733 0.00000 0.00000 0.00197 0.00050
+ 0.25245 0.06173 0.01015 0.00686 0.00000 0.00000 0.00184 0.00046
+ 0.23905 0.05799 0.00944 0.00640 0.00001 0.00000 0.00172 0.00042
+ 0.22813 0.05498 0.00890 0.00604 0.00001 0.00000 0.00162 0.00039
+ 0.21818 0.05225 0.00842 0.00571 0.00002 0.00000 0.00153 0.00037
+ 0.20815 0.04952 0.00795 0.00538 0.00002 0.00000 0.00144 0.00034
+ 0.19985 0.04728 0.00758 0.00511 0.00002 0.00000 0.00137 0.00032
+ 0.19218 0.04522 0.00724 0.00487 0.00002 0.00000 0.00131 0.00030
+ 0.18634 0.04367 0.00698 0.00468 0.00002 0.00000 0.00126 0.00029
+ 0.17454 0.04055 0.00648 0.00431 0.00003 0.00000 0.00116 0.00026
+ 0.16502 0.03806 0.00606 0.00402 0.00003 0.00000 0.00108 0.00024
+ 0.15503 0.03547 0.00562 0.00372 0.00003 0.00001 0.00100 0.00022
+ 0.14535 0.03299 0.00521 0.00344 0.00003 0.00001 0.00093 0.00020
+ 0.13714 0.03090 0.00486 0.00320 0.00003 0.00001 0.00086 0.00019
+ 0.12937 0.02894 0.00454 0.00298 0.00003 0.00001 0.00081 0.00017
+ 0.12329 0.02742 0.00429 0.00281 0.00003 0.00001 0.00076 0.00016
+ 0.11634 0.02570 0.00401 0.00262 0.00003 0.00002 0.00071 0.00015
+ 0.11055 0.02427 0.00378 0.00246 0.00003 0.00002 0.00067 0.00014
+ 0.10551 0.02304 0.00358 0.00232 0.00003 0.00002 0.00063 0.00013
+ 0.09948 0.02158 0.00335 0.00216 0.00003 0.00002 0.00059 0.00012
+ 0.09416 0.02030 0.00314 0.00202 0.00003 0.00002 0.00055 0.00011
+ 0.08945 0.01917 0.00296 0.00190 0.00003 0.00002 0.00052 0.00011
+ 0.08500 0.01812 0.00279 0.00179 0.00003 0.00002 0.00049 0.00010
+ 0.08088 0.01715 0.00263 0.00168 0.00003 0.00002 0.00046 0.00009
+ 0.07718 0.01628 0.00249 0.00159 0.00003 0.00002 0.00043 0.00009
+ 0.07385 0.01550 0.00237 0.00151 0.00003 0.00002 0.00041 0.00008
+ 0.07067 0.01477 0.00225 0.00143 0.00002 0.00002 0.00039 0.00008
+ 0.06769 0.01408 0.00214 0.00136 0.00002 0.00002 0.00037 0.00008
+ 0.06497 0.01346 0.00204 0.00129 0.00002 0.00002 0.00035 0.00007
+ 0.06251 0.01290 0.00195 0.00123 0.00002 0.00002 0.00034 0.00007
+ 0.06013 0.01236 0.00186 0.00118 0.00002 0.00002 0.00032 0.00007
+ 0.05787 0.01185 0.00178 0.00113 0.00002 0.00002 0.00031 0.00006
+ 0.05581 0.01138 0.00171 0.00108 0.00002 0.00002 0.00030 0.00006
+ 0.05392 0.01096 0.00164 0.00103 0.00002 0.00002 0.00028 0.00006
+ 0.05207 0.01055 0.00158 0.00099 0.00002 0.00002 0.00027 0.00006
+ 0.26400 0.06243 0.00818 0.00665 0.00000 0.00000 0.00173 0.00028
+ 0.25054 0.05879 0.00774 0.00621 0.00000 0.00000 0.00162 0.00025
+ 0.23205 0.05385 0.00715 0.00564 0.00000 0.00000 0.00147 0.00022
+ 0.21957 0.05055 0.00675 0.00525 0.00000 0.00000 0.00137 0.00021
+ 0.20726 0.04733 0.00636 0.00488 0.00001 0.00000 0.00128 0.00019
+ 0.19725 0.04474 0.00605 0.00459 0.00001 0.00000 0.00120 0.00018
+ 0.18817 0.04241 0.00577 0.00432 0.00001 0.00000 0.00113 0.00017
+ 0.17904 0.04009 0.00549 0.00406 0.00001 0.00000 0.00106 0.00015
+ 0.17150 0.03818 0.00526 0.00385 0.00001 0.00000 0.00101 0.00015
+ 0.16456 0.03644 0.00504 0.00365 0.00001 0.00000 0.00096 0.00014
+ 0.15928 0.03512 0.00488 0.00351 0.00001 0.00000 0.00092 0.00013
+ 0.14865 0.03249 0.00455 0.00322 0.00002 0.00000 0.00085 0.00012
+ 0.14011 0.03040 0.00427 0.00299 0.00002 0.00000 0.00079 0.00011
+ 0.13119 0.02823 0.00397 0.00276 0.00002 0.00000 0.00073 0.00010
+ 0.12257 0.02616 0.00369 0.00254 0.00002 0.00001 0.00067 0.00010
+ 0.11529 0.02443 0.00345 0.00235 0.00002 0.00001 0.00062 0.00009
+ 0.10842 0.02281 0.00322 0.00218 0.00002 0.00001 0.00058 0.00008
+ 0.10307 0.02155 0.00305 0.00205 0.00002 0.00001 0.00054 0.00008
+ 0.09696 0.02014 0.00285 0.00190 0.00002 0.00001 0.00051 0.00007
+ 0.09189 0.01897 0.00268 0.00178 0.00002 0.00001 0.00047 0.00007
+ 0.08750 0.01796 0.00254 0.00168 0.00002 0.00001 0.00045 0.00007
+ 0.08225 0.01677 0.00237 0.00156 0.00002 0.00001 0.00042 0.00006
+ 0.07763 0.01573 0.00222 0.00145 0.00002 0.00001 0.00039 0.00006
+ 0.07356 0.01482 0.00209 0.00136 0.00002 0.00001 0.00036 0.00005
+ 0.06972 0.01396 0.00197 0.00127 0.00002 0.00001 0.00034 0.00005
+ 0.06618 0.01318 0.00185 0.00120 0.00002 0.00001 0.00032 0.00005
+ 0.06300 0.01248 0.00175 0.00113 0.00002 0.00001 0.00030 0.00005
+ 0.06016 0.01186 0.00166 0.00107 0.00002 0.00001 0.00029 0.00004
+ 0.05745 0.01128 0.00158 0.00101 0.00002 0.00001 0.00027 0.00004
+ 0.05490 0.01073 0.00150 0.00096 0.00002 0.00001 0.00026 0.00004
+ 0.05260 0.01023 0.00143 0.00091 0.00002 0.00001 0.00025 0.00004
+ 0.05051 0.00979 0.00136 0.00086 0.00001 0.00001 0.00023 0.00004
+ 0.04850 0.00936 0.00130 0.00082 0.00001 0.00001 0.00022 0.00004
+ 0.04659 0.00896 0.00124 0.00079 0.00001 0.00001 0.00021 0.00003
+ 0.04485 0.00859 0.00119 0.00075 0.00001 0.00001 0.00020 0.00003
+ 0.04326 0.00826 0.00114 0.00072 0.00001 0.00001 0.00020 0.00003
+ 0.04171 0.00793 0.00109 0.00069 0.00001 0.00001 0.00019 0.00003
+ 0.22909 0.05081 0.00505 0.00502 0.00000 0.00000 0.00128 0.00010
+ 0.21674 0.04770 0.00488 0.00467 0.00000 0.00000 0.00119 0.00010
+ 0.19985 0.04349 0.00464 0.00421 0.00000 0.00000 0.00108 0.00009
+ 0.18851 0.04070 0.00445 0.00391 0.00000 0.00000 0.00100 0.00008
+ 0.17735 0.03798 0.00426 0.00362 0.00000 0.00000 0.00093 0.00008
+ 0.16832 0.03579 0.00409 0.00339 0.00001 0.00000 0.00087 0.00007
+ 0.16014 0.03384 0.00393 0.00319 0.00001 0.00000 0.00082 0.00007
+ 0.15195 0.03189 0.00376 0.00298 0.00001 0.00000 0.00077 0.00007
+ 0.14521 0.03030 0.00362 0.00282 0.00001 0.00000 0.00073 0.00006
+ 0.13902 0.02885 0.00349 0.00267 0.00001 0.00000 0.00069 0.00006
+ 0.13433 0.02776 0.00339 0.00256 0.00001 0.00000 0.00066 0.00006
+ 0.12489 0.02558 0.00317 0.00234 0.00001 0.00000 0.00060 0.00005
+ 0.11735 0.02385 0.00298 0.00216 0.00001 0.00000 0.00056 0.00005
+ 0.10949 0.02207 0.00278 0.00199 0.00001 0.00000 0.00052 0.00005
+ 0.10193 0.02038 0.00259 0.00182 0.00001 0.00000 0.00047 0.00005
+ 0.09557 0.01897 0.00242 0.00168 0.00001 0.00000 0.00044 0.00004
+ 0.08960 0.01765 0.00226 0.00155 0.00001 0.00001 0.00041 0.00004
+ 0.08495 0.01664 0.00214 0.00145 0.00001 0.00001 0.00038 0.00004
+ 0.07967 0.01549 0.00200 0.00134 0.00001 0.00001 0.00035 0.00004
+ 0.07530 0.01455 0.00188 0.00126 0.00001 0.00001 0.00033 0.00004
+ 0.07152 0.01375 0.00178 0.00118 0.00001 0.00001 0.00031 0.00003
+ 0.06703 0.01279 0.00165 0.00109 0.00001 0.00001 0.00029 0.00003
+ 0.06308 0.01196 0.00155 0.00101 0.00001 0.00001 0.00027 0.00003
+ 0.05962 0.01124 0.00145 0.00095 0.00001 0.00001 0.00025 0.00003
+ 0.05636 0.01056 0.00137 0.00088 0.00001 0.00001 0.00023 0.00003
+ 0.05336 0.00995 0.00129 0.00083 0.00001 0.00001 0.00022 0.00003
+ 0.05068 0.00940 0.00121 0.00078 0.00001 0.00001 0.00021 0.00003
+ 0.04828 0.00891 0.00115 0.00073 0.00001 0.00001 0.00020 0.00003
+ 0.04600 0.00845 0.00109 0.00069 0.00001 0.00001 0.00018 0.00002
+ 0.04387 0.00802 0.00103 0.00065 0.00001 0.00001 0.00017 0.00002
+ 0.04194 0.00763 0.00098 0.00062 0.00001 0.00001 0.00017 0.00002
+ 0.04020 0.00729 0.00093 0.00059 0.00001 0.00001 0.00016 0.00002
+ 0.03852 0.00695 0.00089 0.00056 0.00001 0.00001 0.00015 0.00002
+ 0.03694 0.00664 0.00085 0.00053 0.00001 0.00001 0.00014 0.00002
+ 0.03550 0.00636 0.00081 0.00051 0.00001 0.00001 0.00014 0.00002
+ 0.03418 0.00610 0.00078 0.00049 0.00001 0.00001 0.00013 0.00002
+ 0.03290 0.00585 0.00074 0.00046 0.00001 0.00001 0.00013 0.00002
+ 0.16510 0.03176 0.00181 0.00260 0.00000 0.00000 0.00066 0.00002
+ 0.15519 0.02962 0.00187 0.00241 0.00000 0.00000 0.00061 0.00002
+ 0.14177 0.02675 0.00191 0.00215 0.00000 0.00000 0.00054 0.00002
+ 0.13283 0.02486 0.00191 0.00198 0.00000 0.00000 0.00050 0.00002
+ 0.12411 0.02303 0.00188 0.00182 0.00000 0.00000 0.00046 0.00002
+ 0.11710 0.02158 0.00184 0.00169 0.00000 0.00000 0.00043 0.00002
+ 0.11080 0.02028 0.00179 0.00158 0.00000 0.00000 0.00040 0.00002
+ 0.10452 0.01900 0.00174 0.00147 0.00000 0.00000 0.00037 0.00002
+ 0.09939 0.01796 0.00169 0.00138 0.00000 0.00000 0.00035 0.00002
+ 0.09470 0.01702 0.00163 0.00130 0.00000 0.00000 0.00033 0.00002
+ 0.09117 0.01631 0.00159 0.00124 0.00000 0.00000 0.00032 0.00002
+ 0.08410 0.01491 0.00150 0.00112 0.00000 0.00000 0.00029 0.00002
+ 0.07850 0.01381 0.00141 0.00103 0.00000 0.00000 0.00027 0.00002
+ 0.07271 0.01268 0.00132 0.00094 0.00000 0.00000 0.00024 0.00002
+ 0.06718 0.01162 0.00122 0.00085 0.00000 0.00000 0.00022 0.00002
+ 0.06257 0.01074 0.00114 0.00078 0.00000 0.00000 0.00020 0.00002
+ 0.05827 0.00993 0.00107 0.00072 0.00000 0.00000 0.00019 0.00002
+ 0.05494 0.00930 0.00101 0.00067 0.00000 0.00000 0.00017 0.00002
+ 0.05119 0.00861 0.00094 0.00061 0.00000 0.00000 0.00016 0.00002
+ 0.04811 0.00804 0.00088 0.00057 0.00000 0.00000 0.00015 0.00002
+ 0.04546 0.00755 0.00083 0.00053 0.00000 0.00000 0.00014 0.00002
+ 0.04233 0.00698 0.00077 0.00049 0.00000 0.00000 0.00013 0.00002
+ 0.03960 0.00649 0.00071 0.00045 0.00000 0.00000 0.00012 0.00002
+ 0.03721 0.00606 0.00067 0.00042 0.00000 0.00000 0.00011 0.00002
+ 0.03498 0.00566 0.00062 0.00039 0.00000 0.00000 0.00010 0.00002
+ 0.03294 0.00530 0.00059 0.00036 0.00000 0.00000 0.00010 0.00002
+ 0.03113 0.00499 0.00055 0.00034 0.00000 0.00000 0.00009 0.00001
+ 0.02952 0.00470 0.00052 0.00032 0.00000 0.00000 0.00008 0.00001
+ 0.02800 0.00444 0.00049 0.00030 0.00000 0.00000 0.00008 0.00001
+ 0.02658 0.00419 0.00046 0.00028 0.00000 0.00000 0.00007 0.00001
+ 0.02530 0.00397 0.00044 0.00026 0.00000 0.00000 0.00007 0.00001
+ 0.02415 0.00378 0.00042 0.00025 0.00000 0.00000 0.00007 0.00001
+ 0.02305 0.00359 0.00039 0.00024 0.00000 0.00000 0.00006 0.00001
+ 0.02202 0.00342 0.00038 0.00022 0.00000 0.00000 0.00006 0.00001
+ 0.02108 0.00326 0.00036 0.00021 0.00000 0.00000 0.00006 0.00001
+ 0.02022 0.00311 0.00034 0.00020 0.00000 0.00000 0.00005 0.00001
+ 0.01940 0.00298 0.00033 0.00019 0.00000 0.00000 0.00005 0.00001
+ 0.11086 0.01806 0.00060 0.00117 0.00000 0.00000 0.00030 0.00004
+ 0.10348 0.01672 0.00069 0.00107 0.00000 0.00000 0.00028 0.00004
+ 0.09357 0.01495 0.00077 0.00095 0.00000 0.00000 0.00025 0.00003
+ 0.08704 0.01379 0.00079 0.00086 0.00000 0.00000 0.00022 0.00003
+ 0.08072 0.01268 0.00080 0.00079 0.00000 0.00000 0.00021 0.00003
+ 0.07568 0.01180 0.00079 0.00073 0.00000 0.00000 0.00019 0.00003
+ 0.07117 0.01102 0.00078 0.00067 0.00000 0.00000 0.00018 0.00003
+ 0.06672 0.01026 0.00076 0.00062 0.00000 0.00000 0.00016 0.00003
+ 0.06310 0.00964 0.00074 0.00058 0.00000 0.00000 0.00015 0.00003
+ 0.05981 0.00909 0.00072 0.00054 0.00000 0.00000 0.00014 0.00003
+ 0.05734 0.00868 0.00070 0.00052 0.00000 0.00000 0.00014 0.00003
+ 0.05245 0.00786 0.00066 0.00046 0.00000 0.00000 0.00012 0.00002
+ 0.04860 0.00723 0.00062 0.00042 0.00000 0.00000 0.00011 0.00002
+ 0.04466 0.00658 0.00058 0.00038 0.00000 0.00000 0.00010 0.00002
+ 0.04093 0.00598 0.00053 0.00034 0.00000 0.00000 0.00009 0.00002
+ 0.03784 0.00549 0.00050 0.00031 0.00000 0.00000 0.00008 0.00002
+ 0.03498 0.00503 0.00046 0.00028 0.00000 0.00000 0.00008 0.00002
+ 0.03279 0.00469 0.00043 0.00026 0.00000 0.00000 0.00007 0.00002
+ 0.03033 0.00431 0.00040 0.00024 0.00000 0.00000 0.00006 0.00002
+ 0.02833 0.00400 0.00037 0.00022 0.00000 0.00000 0.00006 0.00002
+ 0.02662 0.00373 0.00035 0.00020 0.00000 0.00000 0.00006 0.00001
+ 0.02461 0.00343 0.00032 0.00019 0.00000 0.00000 0.00005 0.00001
+ 0.02287 0.00316 0.00030 0.00017 0.00000 0.00000 0.00005 0.00001
+ 0.02136 0.00294 0.00028 0.00016 0.00000 0.00000 0.00004 0.00001
+ 0.01996 0.00273 0.00026 0.00015 0.00000 0.00000 0.00004 0.00001
+ 0.01869 0.00254 0.00024 0.00013 0.00000 0.00000 0.00004 0.00001
+ 0.01756 0.00237 0.00022 0.00012 0.00000 0.00000 0.00003 0.00001
+ 0.01657 0.00223 0.00021 0.00012 0.00000 0.00000 0.00003 0.00001
+ 0.01563 0.00209 0.00020 0.00011 0.00000 0.00000 0.00003 0.00001
+ 0.01477 0.00197 0.00019 0.00010 0.00000 0.00000 0.00003 0.00001
+ 0.01399 0.00185 0.00018 0.00010 0.00000 0.00000 0.00003 0.00001
+ 0.01330 0.00175 0.00017 0.00009 0.00000 0.00000 0.00003 0.00001
+ 0.01264 0.00166 0.00016 0.00008 0.00000 0.00000 0.00002 0.00001
+ 0.01202 0.00157 0.00015 0.00008 0.00000 0.00000 0.00002 0.00001
+ 0.01146 0.00149 0.00014 0.00008 0.00000 0.00000 0.00002 0.00001
+ 0.01095 0.00142 0.00013 0.00007 0.00000 0.00000 0.00002 0.00001
+ 0.01046 0.00135 0.00013 0.00007 0.00000 0.00000 0.00002 0.00001
+ 0.06781 0.00906 0.00019 0.00043 0.00000 0.00000 0.00012 0.00004
+ 0.06280 0.00832 0.00024 0.00040 0.00000 0.00000 0.00011 0.00004
+ 0.05614 0.00735 0.00029 0.00034 0.00000 0.00000 0.00010 0.00004
+ 0.05180 0.00672 0.00031 0.00031 0.00000 0.00000 0.00009 0.00003
+ 0.04763 0.00613 0.00031 0.00028 0.00000 0.00000 0.00008 0.00003
+ 0.04434 0.00566 0.00031 0.00026 0.00000 0.00000 0.00007 0.00003
+ 0.04142 0.00525 0.00031 0.00024 0.00000 0.00000 0.00007 0.00003
+ 0.03856 0.00486 0.00030 0.00022 0.00000 0.00000 0.00006 0.00002
+ 0.03624 0.00454 0.00029 0.00020 0.00000 0.00000 0.00006 0.00002
+ 0.03416 0.00425 0.00028 0.00019 0.00000 0.00000 0.00005 0.00002
+ 0.03260 0.00404 0.00027 0.00018 0.00000 0.00000 0.00005 0.00002
+ 0.02953 0.00362 0.00025 0.00016 0.00000 0.00000 0.00004 0.00002
+ 0.02714 0.00330 0.00024 0.00014 0.00000 0.00000 0.00004 0.00002
+ 0.02472 0.00298 0.00022 0.00013 0.00000 0.00000 0.00004 0.00002
+ 0.02245 0.00268 0.00020 0.00011 0.00000 0.00000 0.00003 0.00002
+ 0.02058 0.00244 0.00018 0.00010 0.00000 0.00000 0.00003 0.00001
+ 0.01887 0.00222 0.00017 0.00009 0.00000 0.00000 0.00003 0.00001
+ 0.01757 0.00206 0.00016 0.00009 0.00000 0.00000 0.00002 0.00001
+ 0.01613 0.00187 0.00015 0.00008 0.00000 0.00000 0.00002 0.00001
+ 0.01495 0.00172 0.00013 0.00007 0.00000 0.00000 0.00002 0.00001
+ 0.01396 0.00160 0.00013 0.00006 0.00000 0.00000 0.00002 0.00001
+ 0.01280 0.00146 0.00012 0.00006 0.00000 0.00000 0.00002 0.00001
+ 0.01181 0.00134 0.00011 0.00005 0.00000 0.00000 0.00002 0.00001
+ 0.01096 0.00123 0.00010 0.00005 0.00000 0.00000 0.00001 0.00001
+ 0.01017 0.00114 0.00009 0.00004 0.00000 0.00000 0.00001 0.00001
+ 0.00946 0.00105 0.00008 0.00004 0.00000 0.00000 0.00001 0.00001
+ 0.00883 0.00098 0.00008 0.00004 0.00000 0.00000 0.00001 0.00001
+ 0.00829 0.00091 0.00007 0.00004 0.00000 0.00000 0.00001 0.00001
+ 0.00777 0.00085 0.00007 0.00003 0.00000 0.00000 0.00001 0.00001
+ 0.00730 0.00079 0.00006 0.00003 0.00000 0.00000 0.00001 0.00000
+ 0.00688 0.00074 0.00006 0.00003 0.00000 0.00000 0.00001 0.00000
+ 0.00651 0.00070 0.00006 0.00003 0.00000 0.00000 0.00001 0.00000
+ 0.00615 0.00066 0.00005 0.00003 0.00000 0.00000 0.00001 0.00000
+ 0.00582 0.00062 0.00005 0.00002 0.00000 0.00000 0.00001 0.00000
+ 0.00553 0.00059 0.00005 0.00002 0.00000 0.00000 0.00001 0.00000
+ 0.00526 0.00056 0.00004 0.00002 0.00000 0.00000 0.00001 0.00000
+ 0.00500 0.00053 0.00004 0.00002 0.00000 0.00000 0.00001 0.00000
+ 0.03634 0.00380 0.00005 0.00013 0.00000 0.00000 0.00004 0.00003
+ 0.03335 0.00346 0.00007 0.00011 0.00000 0.00000 0.00003 0.00002
+ 0.02942 0.00301 0.00008 0.00010 0.00000 0.00000 0.00003 0.00002
+ 0.02689 0.00273 0.00008 0.00009 0.00000 0.00000 0.00003 0.00002
+ 0.02449 0.00246 0.00008 0.00008 0.00000 0.00000 0.00002 0.00002
+ 0.02261 0.00226 0.00008 0.00007 0.00000 0.00000 0.00002 0.00002
+ 0.02095 0.00208 0.00008 0.00006 0.00000 0.00000 0.00002 0.00001
+ 0.01934 0.00191 0.00008 0.00006 0.00000 0.00000 0.00002 0.00001
+ 0.01806 0.00177 0.00007 0.00005 0.00000 0.00000 0.00002 0.00001
+ 0.01690 0.00164 0.00007 0.00005 0.00000 0.00000 0.00002 0.00001
+ 0.01605 0.00155 0.00007 0.00005 0.00000 0.00000 0.00001 0.00001
+ 0.01437 0.00138 0.00007 0.00004 0.00000 0.00000 0.00001 0.00001
+ 0.01309 0.00125 0.00006 0.00004 0.00000 0.00000 0.00001 0.00001
+ 0.01179 0.00111 0.00006 0.00003 0.00000 0.00000 0.00001 0.00001
+ 0.01060 0.00099 0.00005 0.00003 0.00000 0.00000 0.00001 0.00001
+ 0.00962 0.00089 0.00005 0.00003 0.00000 0.00000 0.00001 0.00001
+ 0.00874 0.00080 0.00004 0.00002 0.00000 0.00000 0.00001 0.00001
+ 0.00807 0.00074 0.00004 0.00002 0.00000 0.00000 0.00001 0.00001
+ 0.00734 0.00067 0.00004 0.00002 0.00000 0.00000 0.00001 0.00000
+ 0.00675 0.00061 0.00004 0.00002 0.00000 0.00000 0.00001 0.00000
+ 0.00626 0.00056 0.00003 0.00002 0.00000 0.00000 0.00000 0.00000
+ 0.00569 0.00051 0.00003 0.00001 0.00000 0.00000 0.00000 0.00000
+ 0.00520 0.00046 0.00003 0.00001 0.00000 0.00000 0.00000 0.00000
+ 0.00478 0.00042 0.00003 0.00001 0.00000 0.00000 0.00000 0.00000
+ 0.00441 0.00038 0.00002 0.00001 0.00000 0.00000 0.00000 0.00000
+ 0.00407 0.00035 0.00002 0.00001 0.00000 0.00000 0.00000 0.00000
+ 0.00377 0.00033 0.00002 0.00001 0.00000 0.00000 0.00000 0.00000
+ 0.00351 0.00030 0.00002 0.00001 0.00000 0.00000 0.00000 0.00000
+ 0.00327 0.00028 0.00002 0.00001 0.00000 0.00000 0.00000 0.00000
+ 0.00305 0.00026 0.00002 0.00001 0.00000 0.00000 0.00000 0.00000
+ 0.00286 0.00024 0.00002 0.00001 0.00000 0.00000 0.00000 0.00000
+ 0.00269 0.00023 0.00001 0.00001 0.00000 0.00000 0.00000 0.00000
+ 0.00253 0.00021 0.00001 0.00001 0.00000 0.00000 0.00000 0.00000
+ 0.00238 0.00020 0.00001 0.00001 0.00000 0.00000 0.00000 0.00000
+ 0.00225 0.00019 0.00001 0.00001 0.00000 0.00000 0.00000 0.00000
+ 0.00213 0.00018 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00201 0.00017 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00478 0.00023 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00427 0.00020 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00363 0.00017 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00323 0.00015 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00286 0.00013 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00257 0.00012 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00233 0.00011 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00210 0.00010 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00192 0.00009 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00177 0.00008 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00165 0.00007 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00143 0.00006 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00127 0.00006 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00111 0.00005 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00097 0.00004 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00085 0.00004 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00075 0.00003 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00068 0.00003 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00060 0.00003 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00054 0.00002 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00049 0.00002 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00043 0.00002 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00039 0.00002 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00035 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00031 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00028 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00026 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00023 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00021 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00020 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00018 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00017 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00015 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00014 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00013 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00012 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00011 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
diff --git a/PDF/mrst/2008/mrstMCal.dat b/PDF/mrst/2008/mrstMCal.dat
new file mode 100644
--- /dev/null
+++ b/PDF/mrst/2008/mrstMCal.dat
@@ -0,0 +1,1776 @@
+ 0.02318 0.01029 12.04329 0.81780 0.00000 0.00000 0.42849 0.81780
+ 0.02329 0.01039 15.58813 0.85388 0.00000 0.00000 0.46675 0.85388
+ 0.02345 0.01055 21.84668 0.92632 0.00000 0.00000 0.54248 0.92632
+ 0.02357 0.01067 27.14104 0.99538 0.07033 0.00000 0.61396 0.99538
+ 0.02370 0.01079 33.48524 1.08469 0.16572 0.00000 0.70583 1.08469
+ 0.02381 0.01090 39.63136 1.17679 0.26305 0.00000 0.80012 1.17679
+ 0.02392 0.01101 46.13978 1.27938 0.37064 0.00000 0.90481 1.27938
+ 0.02404 0.01112 53.73338 1.40480 0.50132 0.00000 1.03245 1.40480
+ 0.02414 0.01122 60.92623 1.52858 0.62964 0.00000 1.15814 1.52858
+ 0.02424 0.01132 68.40675 1.66189 0.76727 0.00000 1.29326 1.66188
+ 0.02432 0.01140 74.72301 1.77777 0.88655 0.00000 1.41056 1.77776
+ 0.02449 0.01157 89.35409 2.05650 1.17243 0.00000 1.69230 2.05650
+ 0.02463 0.01171 102.92217 2.33352 1.45547 0.27535 1.97185 2.33352
+ 0.02479 0.01187 119.50425 2.68593 1.81445 0.64518 2.32701 2.68593
+ 0.02496 0.01204 138.36974 3.10266 2.23784 1.07955 2.74654 3.10266
+ 0.02511 0.01220 156.93936 3.52759 2.66866 1.52007 3.17394 3.52759
+ 0.02526 0.01235 177.09790 4.00385 3.15071 2.01167 3.65262 4.00384
+ 0.02538 0.01248 194.92059 4.43679 3.58836 2.45709 4.08754 4.43679
+ 0.02553 0.01264 217.87741 5.00964 4.16681 3.04476 4.66273 5.00963
+ 0.02567 0.01277 239.41920 5.56152 4.72356 3.60950 5.21666 5.56152
+ 0.02579 0.01290 260.19971 6.10623 5.27264 4.16579 5.76320 6.10622
+ 0.02594 0.01306 287.98056 6.85208 6.02396 4.92608 6.51134 6.85208
+ 0.02609 0.01322 315.54398 7.61070 6.78762 5.69803 7.27207 7.61070
+ 0.02623 0.01336 342.63889 8.37337 7.55493 6.47299 8.03668 8.37336
+ 0.02637 0.01350 370.94839 9.18712 8.37327 7.29884 8.85236 9.18712
+ 0.02650 0.01365 399.84375 10.03466 9.22521 8.15803 9.70174 10.03466
+ 0.02663 0.01378 428.27185 10.88434 10.07902 9.01860 10.55315 10.88434
+ 0.02675 0.01391 456.01035 11.72780 10.92632 9.87219 11.39821 11.72780
+ 0.02687 0.01404 484.82175 12.61845 11.82077 10.77289 12.29045 12.61845
+ 0.02700 0.01416 514.06232 13.53685 12.74287 11.70105 13.21040 13.53685
+ 0.02711 0.01428 542.68726 14.44949 13.65899 12.62288 14.12449 14.44949
+ 0.02722 0.01440 570.52130 15.34950 14.56226 13.53150 15.02587 15.34950
+ 0.02733 0.01452 599.31189 16.29286 15.50888 14.48345 15.97059 16.29286
+ 0.02744 0.01463 628.45270 17.26045 16.47964 15.45942 16.93951 17.26045
+ 0.02755 0.01474 656.90033 18.21682 17.43902 16.42373 17.89714 18.21682
+ 0.02765 0.01485 684.48749 19.15517 18.38020 17.36954 18.83667 19.15517
+ 0.02775 0.01495 712.97314 20.13505 19.36292 18.35691 19.81774 20.13505
+ 0.02595 0.01294 10.58237 0.69839 0.00000 0.00000 0.36649 0.69839
+ 0.02608 0.01307 13.59161 0.73002 0.00000 0.00000 0.39998 0.73002
+ 0.02627 0.01327 18.83139 0.79270 0.00000 0.00000 0.46546 0.79270
+ 0.02642 0.01342 23.20221 0.85174 0.06012 0.00000 0.52657 0.85174
+ 0.02657 0.01358 28.38061 0.92732 0.14091 0.00000 0.60434 0.92732
+ 0.02671 0.01372 33.34556 1.00455 0.22262 0.00000 0.68344 1.00455
+ 0.02684 0.01385 38.55524 1.08989 0.31224 0.00000 0.77056 1.08989
+ 0.02698 0.01400 44.57877 1.19339 0.42024 0.00000 0.87595 1.19339
+ 0.02711 0.01413 50.23621 1.29477 0.52551 0.00000 0.97896 1.29478
+ 0.02723 0.01425 56.07542 1.40323 0.63767 0.00000 1.08896 1.40323
+ 0.02732 0.01435 60.97321 1.49696 0.73432 0.00000 1.18391 1.49696
+ 0.02753 0.01456 72.21687 1.72064 0.96411 0.00000 1.41014 1.72064
+ 0.02770 0.01475 82.51199 1.94078 1.18940 0.21958 1.63244 1.94079
+ 0.02790 0.01495 94.95674 2.21821 1.47245 0.51182 1.91221 2.21821
+ 0.02811 0.01517 108.95415 2.54303 1.80296 0.85162 2.23940 2.54303
+ 0.02829 0.01536 122.58259 2.87112 2.13608 1.19294 2.56959 2.87112
+ 0.02848 0.01556 137.22606 3.23558 2.50549 1.57044 2.93612 3.23558
+ 0.02864 0.01572 150.05328 3.56424 2.83819 1.90970 3.26647 3.56425
+ 0.02883 0.01592 166.42339 3.99565 3.27437 2.35368 3.69986 3.99565
+ 0.02900 0.01609 181.64124 4.40792 3.69079 2.77685 4.11386 4.40792
+ 0.02916 0.01625 196.19872 4.81189 4.09851 3.19066 4.51940 4.81190
+ 0.02935 0.01646 215.48514 5.36075 4.65203 3.75177 5.07020 5.36076
+ 0.02954 0.01665 234.43675 5.91439 5.20998 4.31672 5.62564 5.91441
+ 0.02972 0.01683 252.89949 6.46672 5.76627 4.87946 6.17962 6.46673
+ 0.02989 0.01702 272.02420 7.05171 6.35517 5.47470 6.76623 7.05172
+ 0.03007 0.01720 291.37924 7.65657 6.96380 6.08945 7.37267 7.65659
+ 0.03023 0.01737 310.26709 8.25879 7.56953 6.70089 7.97635 8.25880
+ 0.03039 0.01753 328.55746 8.85275 8.16677 7.30343 8.57167 8.85277
+ 0.03055 0.01769 347.41473 9.47601 8.79327 7.93521 9.19628 9.47603
+ 0.03071 0.01785 366.41357 10.11473 9.43515 8.58221 9.83632 10.11475
+ 0.03086 0.01800 384.88226 10.74570 10.06909 9.22096 10.46852 10.74572
+ 0.03100 0.01815 402.72040 11.36443 10.69060 9.84698 11.08841 11.36446
+ 0.03115 0.01829 421.05347 12.00947 11.33842 10.49929 11.73461 12.00950
+ 0.03129 0.01844 439.48856 12.66747 11.99913 11.16439 12.39374 12.66750
+ 0.03143 0.01858 457.37341 13.31446 12.64868 11.81810 13.04180 13.31449
+ 0.03156 0.01871 474.61447 13.94612 13.28275 12.45608 13.67446 13.94615
+ 0.03170 0.01885 492.31384 14.60255 13.94161 13.11885 14.33190 14.60259
+ 0.02897 0.01601 9.31363 0.59974 0.00000 0.00000 0.31519 0.59974
+ 0.02911 0.01617 11.86438 0.62752 0.00000 0.00000 0.34455 0.62752
+ 0.02934 0.01641 16.24365 0.68182 0.00000 0.00000 0.40125 0.68182
+ 0.02951 0.01660 19.84529 0.73234 0.05143 0.00000 0.45352 0.73234
+ 0.02970 0.01680 24.06453 0.79635 0.11989 0.00000 0.51939 0.79635
+ 0.02986 0.01697 28.06883 0.86114 0.18853 0.00000 0.58578 0.86114
+ 0.03001 0.01714 32.23323 0.93216 0.26321 0.00000 0.65833 0.93217
+ 0.03018 0.01732 37.00637 1.01762 0.35252 0.00000 0.74539 1.01762
+ 0.03033 0.01748 41.45318 1.10072 0.43895 0.00000 0.82987 1.10072
+ 0.03047 0.01764 46.00996 1.18904 0.53044 0.00000 0.91951 1.18904
+ 0.03059 0.01776 49.80827 1.26494 0.60883 0.00000 0.99644 1.26494
+ 0.03083 0.01803 58.45507 1.44468 0.79380 0.00000 1.17836 1.44469
+ 0.03105 0.01825 66.27811 1.61996 0.97348 0.17547 1.35547 1.61996
+ 0.03128 0.01851 75.64002 1.83889 1.19723 0.40698 1.57640 1.83890
+ 0.03153 0.01878 86.06147 2.09288 1.45608 0.67368 1.83241 2.09289
+ 0.03176 0.01902 96.10950 2.34720 1.71469 0.93924 2.08851 2.34721
+ 0.03199 0.01926 106.80801 2.62743 1.99916 1.23054 2.37050 2.62744
+ 0.03218 0.01946 116.10349 2.87831 2.25349 1.49042 2.62282 2.87833
+ 0.03241 0.01971 127.87103 3.20527 2.58454 1.82805 2.95148 3.20529
+ 0.03262 0.01993 138.72200 3.51550 2.89831 2.14753 3.26317 3.51552
+ 0.03281 0.02013 149.02768 3.81756 3.20356 2.45792 3.56656 3.81757
+ 0.03306 0.02038 162.57642 4.22517 3.61515 2.87593 3.97582 4.22519
+ 0.03329 0.02062 175.78175 4.63339 4.02705 3.29373 4.38557 4.63341
+ 0.03351 0.02084 188.54976 5.03795 4.43499 3.70712 4.79153 5.03797
+ 0.03373 0.02107 201.68074 5.46375 4.86413 4.14161 5.21871 5.46378
+ 0.03395 0.02129 214.87666 5.90132 5.30491 4.58756 5.65762 5.90135
+ 0.03415 0.02150 227.66812 6.33444 5.74103 5.02850 6.09198 6.33448
+ 0.03435 0.02170 239.97827 6.75934 6.16872 5.46066 6.51803 6.75937
+ 0.03455 0.02190 252.59341 7.20286 6.61501 5.91141 6.96271 7.20290
+ 0.03475 0.02210 265.22827 7.65508 7.06992 6.37063 7.41604 7.65512
+ 0.03494 0.02229 277.44128 8.09964 7.51702 6.82179 7.86165 8.09968
+ 0.03512 0.02247 289.17380 8.53357 7.95332 7.26189 8.29657 8.53362
+ 0.03530 0.02265 301.17004 8.98397 8.40609 7.71845 8.74795 8.98402
+ 0.03549 0.02283 313.17038 9.44138 8.86581 8.18188 9.20632 9.44144
+ 0.03566 0.02300 324.75513 9.88927 9.31588 8.63545 9.65511 9.88932
+ 0.03583 0.02317 335.87042 10.32480 9.75347 9.07633 10.09149 10.32485
+ 0.03600 0.02333 347.22900 10.77566 10.20640 9.53256 10.54322 10.77573
+ 0.03099 0.01817 8.63945 0.54876 0.00000 0.00000 0.28865 0.54876
+ 0.03116 0.01835 10.94826 0.57450 0.00000 0.00000 0.31583 0.57450
+ 0.03142 0.01863 14.87735 0.62439 0.00000 0.00000 0.36789 0.62439
+ 0.03161 0.01884 18.08012 0.67042 0.04686 0.00000 0.41553 0.67043
+ 0.03182 0.01907 21.80567 0.72838 0.10888 0.00000 0.47517 0.72839
+ 0.03200 0.01926 25.31891 0.78671 0.17070 0.00000 0.53495 0.78671
+ 0.03218 0.01946 28.95226 0.85032 0.23765 0.00000 0.59995 0.85032
+ 0.03237 0.01966 33.09398 0.92647 0.31732 0.00000 0.67756 0.92648
+ 0.03253 0.01984 36.93293 1.00019 0.39407 0.00000 0.75254 1.00020
+ 0.03270 0.02002 40.84906 1.07822 0.47499 0.00000 0.83176 1.07823
+ 0.03283 0.02016 44.10057 1.14504 0.54408 0.00000 0.89953 1.14505
+ 0.03311 0.02046 51.46362 1.30254 0.70634 0.00000 1.05900 1.30255
+ 0.03335 0.02072 58.07458 1.45524 0.86306 0.15323 1.21337 1.45525
+ 0.03362 0.02101 65.93589 1.64492 1.05712 0.35432 1.40486 1.64494
+ 0.03391 0.02131 74.62984 1.86371 1.28034 0.58465 1.62549 1.86373
+ 0.03417 0.02159 82.96062 2.08161 1.50215 0.81273 1.84501 2.08163
+ 0.03444 0.02186 91.77975 2.32049 1.74489 1.06165 2.08549 2.32051
+ 0.03466 0.02209 99.40285 2.53340 1.96093 1.28271 2.29969 2.53342
+ 0.03493 0.02237 109.00412 2.80963 2.24088 1.56862 2.57746 2.80966
+ 0.03517 0.02262 117.81219 3.07055 2.50503 1.83793 2.83972 3.07058
+ 0.03539 0.02285 126.13960 3.32360 2.76099 2.09854 3.09398 3.32364
+ 0.03568 0.02313 137.03427 3.66364 3.10465 2.44799 3.43552 3.66368
+ 0.03595 0.02341 147.59799 4.00267 3.44702 2.79570 3.77593 4.00271
+ 0.03620 0.02366 157.76317 4.33727 3.78471 3.13831 4.11181 4.33732
+ 0.03646 0.02392 168.16980 4.68807 4.13854 3.49698 4.46386 4.68812
+ 0.03671 0.02417 178.58133 5.04719 4.50058 3.86369 4.82419 5.04724
+ 0.03696 0.02441 188.63106 5.40137 4.85749 4.22495 5.17950 5.40143
+ 0.03719 0.02463 198.26465 5.74767 5.20633 4.57784 5.52685 5.74773
+ 0.03742 0.02486 208.09923 6.10798 5.56916 4.94468 5.88820 6.10804
+ 0.03766 0.02509 217.91235 6.47418 5.93782 5.31724 6.25542 6.47425
+ 0.03788 0.02530 227.36395 6.83311 6.29905 5.68213 6.61530 6.83318
+ 0.03809 0.02550 236.41277 7.18245 6.65054 6.03706 6.96553 7.18253
+ 0.03831 0.02571 245.63503 7.54407 7.01431 6.40426 7.32804 7.54415
+ 0.03853 0.02591 254.83009 7.91030 7.38266 6.77595 7.69515 7.91039
+ 0.03873 0.02611 263.67911 8.26798 7.74233 7.13878 8.05365 8.26808
+ 0.03893 0.02629 272.14435 8.61494 8.09116 7.49058 8.40138 8.61504
+ 0.03913 0.02648 280.76993 8.97327 8.45136 7.85376 8.76048 8.97337
+ 0.03257 0.01988 8.18898 0.51525 0.00000 0.00000 0.27120 0.51525
+ 0.03275 0.02008 10.33674 0.53964 0.00000 0.00000 0.29693 0.53964
+ 0.03303 0.02039 13.96778 0.58658 0.00000 0.00000 0.34590 0.58658
+ 0.03324 0.02062 16.90793 0.62964 0.04383 0.00000 0.39046 0.62965
+ 0.03347 0.02087 20.30992 0.68360 0.10158 0.00000 0.44599 0.68360
+ 0.03367 0.02109 23.50268 0.73765 0.15891 0.00000 0.50140 0.73766
+ 0.03387 0.02130 26.79072 0.79638 0.22076 0.00000 0.56143 0.79639
+ 0.03408 0.02152 30.52337 0.86644 0.29411 0.00000 0.63284 0.86645
+ 0.03426 0.02172 33.96984 0.93402 0.36452 0.00000 0.70160 0.93403
+ 0.03444 0.02191 37.47357 1.00533 0.43854 0.00000 0.77403 1.00534
+ 0.03459 0.02207 40.37399 1.06624 0.50157 0.00000 0.83582 1.06625
+ 0.03490 0.02240 46.91564 1.20930 0.64908 0.00000 0.98072 1.20931
+ 0.03517 0.02268 52.75471 1.34739 0.79092 0.13883 1.12036 1.34741
+ 0.03547 0.02300 59.66427 1.51821 0.96584 0.32029 1.29288 1.51823
+ 0.03579 0.02333 67.26715 1.71440 1.16616 0.52723 1.49077 1.71442
+ 0.03608 0.02363 74.51758 1.90898 1.36440 0.73130 1.68687 1.90900
+ 0.03638 0.02393 82.15865 2.12148 1.58051 0.95316 1.90086 2.12151
+ 0.03663 0.02418 88.73681 2.31023 1.77219 1.14950 2.09083 2.31027
+ 0.03693 0.02449 96.98878 2.55429 2.01973 1.40258 2.33632 2.55433
+ 0.03720 0.02476 104.52840 2.78403 2.25248 1.64013 2.56731 2.78407
+ 0.03745 0.02501 111.63087 3.00616 2.47733 1.86931 2.79056 3.00621
+ 0.03777 0.02532 120.88695 3.30368 2.77824 2.17560 3.08948 3.30374
+ 0.03808 0.02562 129.82481 3.59930 3.07698 2.47931 3.38639 3.59936
+ 0.03837 0.02590 138.39249 3.89013 3.37069 2.77759 3.67841 3.89019
+ 0.03866 0.02618 147.13147 4.19410 3.67750 3.08890 3.98355 4.19417
+ 0.03894 0.02645 155.84300 4.50436 3.99049 3.40623 4.29494 4.50444
+ 0.03922 0.02671 164.22281 4.80950 4.29818 3.71796 4.60113 4.80958
+ 0.03948 0.02696 172.22986 5.10705 4.59811 4.02165 4.89967 5.10714
+ 0.03975 0.02721 180.37828 5.41586 4.90927 4.33654 5.20945 5.41595
+ 0.04001 0.02745 188.48390 5.72894 5.22464 4.65554 5.52347 5.72904
+ 0.04026 0.02769 196.26779 6.03506 5.53292 4.96722 5.83049 6.03517
+ 0.04051 0.02791 203.69887 6.33234 5.83221 5.26970 6.12859 6.33245
+ 0.04075 0.02814 211.25194 6.63940 6.14128 5.58195 6.43648 6.63952
+ 0.04100 0.02836 218.76202 6.94970 6.45355 5.89733 6.74760 6.94982
+ 0.04123 0.02857 225.97054 7.25212 6.75784 6.20455 7.05079 7.25225
+ 0.04146 0.02877 232.84923 7.54491 7.05237 6.50185 7.34430 7.54504
+ 0.04169 0.02898 239.84103 7.84670 7.35592 6.80817 7.64681 7.84684
+ 0.03383 0.02130 7.85717 0.49100 0.00000 0.00000 0.25856 0.49100
+ 0.03403 0.02151 9.88692 0.51438 0.00000 0.00000 0.28322 0.51439
+ 0.03433 0.02184 13.30073 0.55917 0.00000 0.00000 0.32993 0.55918
+ 0.03455 0.02208 16.05050 0.60006 0.04161 0.00000 0.37224 0.60007
+ 0.03480 0.02235 19.21909 0.65109 0.09625 0.00000 0.42477 0.65110
+ 0.03501 0.02258 22.18172 0.70205 0.15031 0.00000 0.47701 0.70206
+ 0.03522 0.02281 25.22282 0.75725 0.20847 0.00000 0.53343 0.75726
+ 0.03545 0.02305 28.66412 0.82289 0.27724 0.00000 0.60037 0.82291
+ 0.03565 0.02326 31.83217 0.88606 0.34309 0.00000 0.66464 0.88607
+ 0.03584 0.02347 35.04438 0.95255 0.41215 0.00000 0.73219 0.95256
+ 0.03600 0.02363 37.69738 1.00922 0.47084 0.00000 0.78970 1.00924
+ 0.03633 0.02398 43.66268 1.14197 0.60781 0.00000 0.92419 1.14198
+ 0.03663 0.02429 48.96327 1.26967 0.73908 0.12858 1.05337 1.26970
+ 0.03696 0.02463 55.21236 1.42715 0.90044 0.29613 1.21246 1.42718
+ 0.03730 0.02498 62.06223 1.60740 1.08463 0.48656 1.39433 1.60744
+ 0.03762 0.02530 68.57095 1.78563 1.26632 0.67378 1.57399 1.78566
+ 0.03794 0.02563 75.40720 1.97970 1.46382 0.87671 1.76948 1.97975
+ 0.03821 0.02590 81.27468 2.15164 1.63853 1.05583 1.94256 2.15168
+ 0.03854 0.02622 88.61304 2.37338 1.86357 1.28610 2.16566 2.37343
+ 0.03884 0.02651 95.29766 2.58158 2.07463 1.50170 2.37504 2.58163
+ 0.03911 0.02678 101.57774 2.78242 2.27805 1.70921 2.57695 2.78248
+ 0.03946 0.02712 109.73849 3.05077 2.54962 1.98586 2.84663 3.05084
+ 0.03979 0.02743 117.59455 3.31672 2.81853 2.25946 3.11380 3.31679
+ 0.04011 0.02773 125.10381 3.57773 3.08228 2.52753 3.37594 3.57781
+ 0.04043 0.02803 132.74242 3.84993 3.35717 2.80668 3.64925 3.85002
+ 0.04074 0.02833 140.33675 4.12715 3.63697 3.09058 3.92754 4.12724
+ 0.04104 0.02861 147.62332 4.39921 3.91146 3.36888 4.20060 4.39931
+ 0.04133 0.02887 154.56932 4.66401 4.17850 3.63948 4.46632 4.66411
+ 0.04162 0.02914 161.62167 4.93830 4.45503 3.91953 4.74153 4.93841
+ 0.04191 0.02940 168.62108 5.21587 4.73478 4.20270 5.02001 5.21600
+ 0.04219 0.02965 175.32811 5.48681 5.00776 4.47890 5.29178 5.48694
+ 0.04245 0.02989 181.71785 5.74947 5.27233 4.74649 5.55523 5.74961
+ 0.04272 0.03013 188.19965 6.02035 5.54512 5.02228 5.82690 6.02049
+ 0.04299 0.03036 194.63159 6.29365 5.82029 5.30039 6.10097 6.29381
+ 0.04325 0.03059 200.79346 6.55962 6.08802 5.57089 6.36766 6.55978
+ 0.04350 0.03081 206.66266 6.81673 6.34680 5.83228 6.62546 6.81690
+ 0.04375 0.03103 212.61777 7.08139 6.61312 6.10121 6.89081 7.08156
+ 0.03829 0.02634 6.91040 0.42350 0.00000 0.00000 0.22337 0.42350
+ 0.03854 0.02660 8.60487 0.44405 0.00000 0.00000 0.24500 0.44406
+ 0.03892 0.02701 11.40688 0.48272 0.00000 0.00000 0.28529 0.48273
+ 0.03921 0.02732 13.62531 0.51747 0.03534 0.00000 0.32124 0.51748
+ 0.03953 0.02764 16.14729 0.56029 0.08123 0.00000 0.36532 0.56030
+ 0.03980 0.02793 18.47678 0.60256 0.12613 0.00000 0.40868 0.60258
+ 0.04008 0.02821 20.84266 0.64790 0.17399 0.00000 0.45506 0.64792
+ 0.04037 0.02851 23.49220 0.70132 0.23006 0.00000 0.50957 0.70134
+ 0.04063 0.02877 25.90787 0.75226 0.28328 0.00000 0.56145 0.75229
+ 0.04088 0.02903 28.33629 0.80548 0.33868 0.00000 0.61557 0.80552
+ 0.04108 0.02923 30.32707 0.85054 0.38545 0.00000 0.66133 0.85058
+ 0.04152 0.02966 34.75890 0.95514 0.49363 0.00000 0.76741 0.95519
+ 0.04191 0.03004 38.63858 1.05469 0.59620 0.10073 0.86819 1.05474
+ 0.04234 0.03046 43.15744 1.17617 0.72098 0.23070 0.99104 1.17623
+ 0.04280 0.03090 48.04951 1.31375 0.86189 0.37684 1.12998 1.31381
+ 0.04322 0.03130 52.64354 1.44840 0.99949 0.51907 1.26585 1.44848
+ 0.04365 0.03170 57.41608 1.59367 1.14766 0.67178 1.41231 1.59376
+ 0.04401 0.03203 61.47215 1.72129 1.27763 0.80545 1.54090 1.72139
+ 0.04446 0.03243 66.49579 1.88453 1.44367 0.97587 1.70529 1.88463
+ 0.04485 0.03279 71.02716 2.03653 1.59810 1.13410 1.85829 2.03665
+ 0.04522 0.03312 75.24726 2.18210 1.74586 1.28527 2.00476 2.18223
+ 0.04569 0.03353 80.68009 2.37509 1.94157 1.48524 2.19887 2.37523
+ 0.04614 0.03393 85.85830 2.56477 2.13376 1.68136 2.38958 2.56492
+ 0.04656 0.03429 90.76248 2.74953 2.32084 1.87206 2.57529 2.74969
+ 0.04700 0.03466 95.70743 2.94081 2.51441 2.06918 2.76752 2.94099
+ 0.04742 0.03503 100.58136 3.13426 2.71006 2.26825 2.96187 3.13445
+ 0.04783 0.03537 105.21941 3.32285 2.90070 2.46209 3.15130 3.32305
+ 0.04822 0.03570 109.60696 3.50527 3.08504 2.64940 3.33451 3.50549
+ 0.04862 0.03602 114.02852 3.69311 3.27477 2.84208 3.52313 3.69334
+ 0.04901 0.03635 118.38481 3.88209 3.46560 3.03577 3.71288 3.88234
+ 0.04939 0.03665 122.52988 4.06553 3.65078 3.22364 3.89703 4.06579
+ 0.04975 0.03695 126.45242 4.24244 3.82931 3.40468 4.07460 4.24271
+ 0.05012 0.03724 130.40602 4.42397 4.01246 3.59035 4.25680 4.42425
+ 0.05048 0.03753 134.30374 4.60620 4.19627 3.77662 4.43968 4.60650
+ 0.05084 0.03781 138.01474 4.78268 4.37426 3.95692 4.61679 4.78300
+ 0.05117 0.03808 141.52861 4.95253 4.54552 4.13036 4.78721 4.95286
+ 0.05152 0.03835 145.07338 5.12659 4.72100 4.30802 4.96185 5.12693
+ 0.04376 0.03254 6.08014 0.36650 0.00000 0.00000 0.19363 0.36651
+ 0.04409 0.03287 7.48133 0.38459 0.00000 0.00000 0.21263 0.38460
+ 0.04460 0.03337 9.75620 0.41795 0.00000 0.00000 0.24735 0.41797
+ 0.04499 0.03374 11.52358 0.44739 0.02993 0.00000 0.27781 0.44742
+ 0.04541 0.03415 13.50343 0.48315 0.06828 0.00000 0.31463 0.48319
+ 0.04578 0.03450 15.30807 0.51802 0.10537 0.00000 0.35041 0.51806
+ 0.04614 0.03485 17.11977 0.55501 0.14449 0.00000 0.38828 0.55506
+ 0.04654 0.03522 19.12581 0.59814 0.18986 0.00000 0.43233 0.59820
+ 0.04689 0.03554 20.93558 0.63888 0.23253 0.00000 0.47386 0.63895
+ 0.04723 0.03586 22.73793 0.68108 0.27657 0.00000 0.51681 0.68115
+ 0.04751 0.03611 24.20349 0.71655 0.31348 0.00000 0.55288 0.71663
+ 0.04811 0.03665 27.43069 0.79810 0.39806 0.00000 0.63567 0.79819
+ 0.04863 0.03711 30.20875 0.87479 0.47731 0.07808 0.71341 0.87490
+ 0.04923 0.03763 33.40152 0.96734 0.57265 0.17775 0.80710 0.96747
+ 0.04986 0.03817 36.81078 1.07094 0.67907 0.28854 0.91186 1.07109
+ 0.05044 0.03866 39.97086 1.17124 0.78186 0.39519 1.01318 1.17140
+ 0.05103 0.03916 43.21396 1.27835 0.89143 0.50855 1.12130 1.27854
+ 0.05153 0.03957 45.94011 1.37161 0.98668 0.60688 1.21538 1.37181
+ 0.05214 0.04007 49.28002 1.48983 1.10727 0.73112 1.33457 1.49005
+ 0.05269 0.04051 52.25968 1.59893 1.21843 0.84545 1.44452 1.59917
+ 0.05320 0.04091 55.00756 1.70260 1.32395 0.95382 1.54894 1.70285
+ 0.05385 0.04142 58.50802 1.83887 1.46253 1.09595 1.68616 1.83915
+ 0.05447 0.04191 61.80709 1.97162 1.59742 1.23411 1.81979 1.97193
+ 0.05506 0.04236 64.89905 2.09986 1.72763 1.36734 1.94884 2.10019
+ 0.05566 0.04282 67.98560 2.23160 1.86131 1.50398 2.08138 2.23196
+ 0.05626 0.04326 70.99787 2.36382 1.99540 1.64092 2.21436 2.36420
+ 0.05683 0.04369 73.83739 2.49179 2.12511 1.77330 2.34305 2.49219
+ 0.05737 0.04409 76.49996 2.61474 2.24970 1.90036 2.46667 2.61518
+ 0.05792 0.04449 79.16006 2.74053 2.37710 2.03022 2.59312 2.74099
+ 0.05846 0.04488 81.75870 2.86629 2.50443 2.15993 2.71953 2.86677
+ 0.05899 0.04526 84.21115 2.98762 2.62724 2.28498 2.84146 2.98812
+ 0.05949 0.04562 86.51376 3.10396 2.74496 2.40480 2.95837 3.10448
+ 0.06000 0.04598 88.81721 3.22269 2.86507 2.52701 3.07767 3.22324
+ 0.06051 0.04634 91.07071 3.34122 2.98496 2.64894 3.19675 3.34179
+ 0.06100 0.04668 93.20055 3.45542 3.10044 2.76635 3.31148 3.45602
+ 0.06146 0.04701 95.20316 3.56477 3.21100 2.87873 3.42133 3.56540
+ 0.06194 0.04734 97.20946 3.67630 3.32374 2.99329 3.53336 3.67695
+ 0.04762 0.03680 5.64480 0.33747 0.00000 0.00000 0.17848 0.33749
+ 0.04801 0.03717 6.89160 0.35428 0.00000 0.00000 0.19611 0.35431
+ 0.04863 0.03774 8.89277 0.38487 0.00000 0.00000 0.22794 0.38491
+ 0.04909 0.03816 10.42907 0.41156 0.02711 0.00000 0.25553 0.41161
+ 0.04960 0.03862 12.13426 0.44367 0.06157 0.00000 0.28861 0.44374
+ 0.05005 0.03902 13.67563 0.47473 0.09465 0.00000 0.32049 0.47480
+ 0.05049 0.03941 15.21181 0.50746 0.12930 0.00000 0.35401 0.50754
+ 0.05097 0.03983 16.90067 0.54536 0.16923 0.00000 0.39274 0.54545
+ 0.05140 0.04020 18.41419 0.58094 0.20656 0.00000 0.42904 0.58105
+ 0.05182 0.04056 19.91263 0.61760 0.24489 0.00000 0.46639 0.61772
+ 0.05215 0.04084 21.12481 0.64828 0.27687 0.00000 0.49760 0.64841
+ 0.05288 0.04145 23.77573 0.71837 0.34971 0.00000 0.56881 0.71852
+ 0.05352 0.04198 26.03292 0.78380 0.41745 0.06690 0.63519 0.78397
+ 0.05425 0.04257 28.60500 0.86221 0.49839 0.15172 0.71464 0.86241
+ 0.05502 0.04318 31.32749 0.94934 0.58808 0.24533 0.80282 0.94957
+ 0.05573 0.04373 33.83001 1.03312 0.67412 0.33484 0.88753 1.03337
+ 0.05646 0.04429 36.37823 1.12203 0.76526 0.42938 0.97734 1.12231
+ 0.05707 0.04476 38.50518 1.19899 0.84403 0.51092 1.05505 1.19929
+ 0.05782 0.04532 41.09273 1.29602 0.94322 0.61339 1.15296 1.29635
+ 0.05849 0.04582 43.38479 1.38506 1.03413 0.70715 1.24278 1.38543
+ 0.05911 0.04628 45.48511 1.46925 1.12001 0.79558 1.32766 1.46964
+ 0.05991 0.04686 48.14236 1.57934 1.23220 0.91096 1.43861 1.57976
+ 0.06067 0.04741 50.62837 1.68598 1.34079 1.02249 1.54605 1.68644
+ 0.06140 0.04792 52.94235 1.78848 1.44508 1.12949 1.64928 1.78897
+ 0.06213 0.04843 55.23705 1.89325 1.55162 1.23869 1.75478 1.89379
+ 0.06285 0.04894 57.46194 1.99791 1.65798 1.34761 1.86014 1.99847
+ 0.06355 0.04941 59.54611 2.09874 1.76041 1.45243 1.96162 2.09934
+ 0.06421 0.04986 61.48890 2.19521 1.85837 1.55262 2.05871 2.19585
+ 0.06488 0.05032 63.41870 2.29351 1.95814 1.65459 2.15761 2.29418
+ 0.06555 0.05076 65.29313 2.39139 2.05746 1.75605 2.25608 2.39209
+ 0.06619 0.05119 67.05235 2.48546 2.15289 1.85350 2.35071 2.48620
+ 0.06680 0.05159 68.69530 2.57534 2.24403 1.94653 2.44111 2.57611
+ 0.06742 0.05200 70.33045 2.66676 2.33671 2.04109 2.53305 2.66756
+ 0.06804 0.05240 71.92173 2.75770 2.42890 2.13511 2.62450 2.75854
+ 0.06863 0.05279 73.41812 2.84503 2.51740 2.22535 2.71231 2.84590
+ 0.06920 0.05315 74.81830 2.92840 2.60188 2.31145 2.79613 2.92930
+ 0.06978 0.05352 76.21436 3.01316 2.68775 2.39896 2.88136 3.01410
+ 0.05080 0.04016 5.35747 0.31859 0.00000 0.00000 0.16863 0.31863
+ 0.05126 0.04057 6.50149 0.33456 0.00000 0.00000 0.18536 0.33461
+ 0.05196 0.04119 8.32214 0.36332 0.00000 0.00000 0.21527 0.36339
+ 0.05251 0.04165 9.70741 0.38819 0.02526 0.00000 0.24098 0.38827
+ 0.05309 0.04216 11.23435 0.41791 0.05716 0.00000 0.27160 0.41800
+ 0.05362 0.04260 12.60601 0.44647 0.08760 0.00000 0.30093 0.44658
+ 0.05413 0.04302 13.96557 0.47641 0.11934 0.00000 0.33160 0.47653
+ 0.05469 0.04348 15.45225 0.51091 0.15573 0.00000 0.36688 0.51105
+ 0.05518 0.04388 16.77789 0.54315 0.18960 0.00000 0.39979 0.54331
+ 0.05567 0.04427 18.08446 0.57624 0.22424 0.00000 0.43351 0.57641
+ 0.05606 0.04459 19.13730 0.60383 0.25305 0.00000 0.46160 0.60401
+ 0.05691 0.04525 21.42775 0.66657 0.31835 0.00000 0.52539 0.66679
+ 0.05765 0.04583 23.36152 0.72482 0.37876 0.05976 0.58452 0.72506
+ 0.05850 0.04647 25.55063 0.79425 0.45055 0.13515 0.65492 0.79453
+ 0.05940 0.04714 27.85213 0.87097 0.52967 0.21790 0.73263 0.87129
+ 0.06022 0.04775 29.95404 0.94437 0.60519 0.29662 0.80690 0.94473
+ 0.06106 0.04836 32.08136 1.02189 0.68479 0.37938 0.88527 1.02228
+ 0.06177 0.04887 33.84721 1.08871 0.75331 0.45046 0.95278 1.08913
+ 0.06264 0.04949 35.98368 1.17259 0.83921 0.53940 1.03749 1.17305
+ 0.06342 0.05003 37.86559 1.24925 0.91762 0.62045 1.11487 1.24975
+ 0.06415 0.05053 39.58141 1.32145 0.99141 0.69660 1.18772 1.32199
+ 0.06507 0.05116 41.74042 1.41549 1.08742 0.79557 1.28257 1.41607
+ 0.06596 0.05176 43.74849 1.50620 1.17996 0.89083 1.37403 1.50683
+ 0.06680 0.05232 45.60734 1.59304 1.26848 0.98186 1.46157 1.59371
+ 0.06765 0.05288 47.44094 1.68149 1.35859 1.07443 1.55069 1.68220
+ 0.06849 0.05343 49.20937 1.76950 1.44820 1.16643 1.63936 1.77026
+ 0.06929 0.05395 50.85752 1.85401 1.53421 1.25465 1.72449 1.85481
+ 0.07006 0.05444 52.38652 1.93460 1.61621 1.33871 1.80566 1.93545
+ 0.07083 0.05493 53.89808 2.01646 1.69946 1.42400 1.88809 2.01736
+ 0.07160 0.05542 55.35936 2.09773 1.78208 1.50861 1.96992 2.09866
+ 0.07234 0.05588 56.72456 2.17561 1.86124 1.58963 2.04832 2.17659
+ 0.07304 0.05632 57.99386 2.24981 1.93663 1.66677 2.12301 2.25083
+ 0.07376 0.05676 59.25174 2.32507 2.01309 1.74497 2.19877 2.32613
+ 0.07447 0.05720 60.47046 2.39974 2.08894 1.82252 2.27392 2.40085
+ 0.07515 0.05762 61.61163 2.47127 2.16157 1.89676 2.34591 2.47242
+ 0.07581 0.05801 62.67504 2.53938 2.23073 1.96744 2.41445 2.54057
+ 0.07647 0.05842 63.73100 2.60848 2.30087 2.03910 2.48398 2.60970
+ 0.05350 0.04296 5.14679 0.30493 0.00000 0.00000 0.16150 0.30498
+ 0.05401 0.04339 6.21495 0.32029 0.00000 0.00000 0.17757 0.32035
+ 0.05480 0.04406 7.90343 0.34771 0.00000 0.00000 0.20608 0.34779
+ 0.05541 0.04456 9.17892 0.37124 0.02390 0.00000 0.23042 0.37135
+ 0.05607 0.04510 10.57714 0.39921 0.05394 0.00000 0.25923 0.39933
+ 0.05665 0.04557 11.82692 0.42596 0.08246 0.00000 0.28671 0.42610
+ 0.05723 0.04603 13.06028 0.45387 0.11208 0.00000 0.31532 0.45404
+ 0.05786 0.04652 14.40319 0.48591 0.14591 0.00000 0.34809 0.48610
+ 0.05841 0.04695 15.59585 0.51575 0.17728 0.00000 0.37856 0.51595
+ 0.05896 0.04737 16.76718 0.54626 0.20927 0.00000 0.40967 0.54648
+ 0.05940 0.04770 17.70811 0.57163 0.23580 0.00000 0.43552 0.57187
+ 0.06035 0.04842 19.74658 0.62913 0.29573 0.00000 0.49401 0.62941
+ 0.06119 0.04903 21.45580 0.68226 0.35091 0.05467 0.54798 0.68257
+ 0.06215 0.04973 23.38058 0.74533 0.41622 0.12337 0.61197 0.74568
+ 0.06315 0.05044 25.39329 0.81472 0.48789 0.19846 0.68230 0.81512
+ 0.06408 0.05110 27.22200 0.88084 0.55601 0.26961 0.74924 0.88128
+ 0.06503 0.05175 29.06385 0.95039 0.62756 0.34413 0.81961 0.95088
+ 0.06583 0.05230 30.58602 1.01015 0.68893 0.40791 0.88002 1.01068
+ 0.06681 0.05295 32.41959 1.08491 0.76561 0.48746 0.95558 1.08549
+ 0.06768 0.05354 34.02746 1.15301 0.83538 0.55971 1.02436 1.15364
+ 0.06849 0.05407 35.48753 1.21696 0.90084 0.62741 1.08893 1.21763
+ 0.06954 0.05475 37.31675 1.29999 0.98575 0.71510 1.17273 1.30071
+ 0.07053 0.05539 39.01009 1.37981 1.06732 0.79924 1.25327 1.38059
+ 0.07147 0.05599 40.57071 1.45600 1.14511 0.87939 1.33012 1.45683
+ 0.07242 0.05659 42.10354 1.53336 1.22406 0.96067 1.40813 1.53425
+ 0.07336 0.05717 43.57562 1.61012 1.30236 1.04121 1.48553 1.61107
+ 0.07426 0.05773 44.94193 1.68363 1.37730 1.11824 1.55963 1.68463
+ 0.07511 0.05825 46.20454 1.75356 1.44857 1.19145 1.63011 1.75461
+ 0.07598 0.05878 47.44796 1.82441 1.52076 1.26556 1.70151 1.82551
+ 0.07684 0.05930 48.64542 1.89458 1.59222 1.33890 1.77222 1.89573
+ 0.07766 0.05979 49.75996 1.96168 1.66054 1.40898 1.83981 1.96288
+ 0.07845 0.06026 50.79247 2.02546 1.72547 1.47555 1.90406 2.02671
+ 0.07925 0.06073 51.81208 2.09002 1.79118 1.54290 1.96910 2.09132
+ 0.08004 0.06120 52.79638 2.15394 1.85623 1.60956 2.03349 2.15529
+ 0.08080 0.06164 53.71482 2.21505 1.91840 1.67325 2.09503 2.21645
+ 0.08153 0.06206 54.56775 2.27313 1.97748 1.73376 2.15353 2.27458
+ 0.08227 0.06249 55.41185 2.33194 2.03730 1.79501 2.21275 2.33343
+ 0.06413 0.05300 4.55955 0.26724 0.00000 0.00000 0.14185 0.26740
+ 0.06488 0.05354 5.41033 0.28085 0.00000 0.00000 0.15607 0.28104
+ 0.06606 0.05438 6.72546 0.30447 0.00000 0.00000 0.18060 0.30471
+ 0.06696 0.05500 7.69509 0.32423 0.02008 0.00000 0.20105 0.32451
+ 0.06794 0.05568 8.73853 0.34727 0.04487 0.00000 0.22480 0.34759
+ 0.06880 0.05627 9.65564 0.36892 0.06804 0.00000 0.24708 0.36929
+ 0.06966 0.05684 10.54742 0.39120 0.09177 0.00000 0.26996 0.39161
+ 0.07059 0.05746 11.50437 0.41642 0.11852 0.00000 0.29580 0.41688
+ 0.07141 0.05800 12.34271 0.43961 0.14303 0.00000 0.31953 0.44011
+ 0.07222 0.05853 13.15604 0.46307 0.16775 0.00000 0.34351 0.46361
+ 0.07287 0.05894 13.80244 0.48239 0.18807 0.00000 0.36323 0.48296
+ 0.07427 0.05984 15.18282 0.52562 0.23339 0.00000 0.40733 0.52627
+ 0.07551 0.06061 16.31186 0.56498 0.27451 0.04098 0.44741 0.56570
+ 0.07691 0.06148 17.55995 0.61102 0.32250 0.09178 0.49425 0.61182
+ 0.07839 0.06237 18.84030 0.66093 0.37438 0.14652 0.54498 0.66183
+ 0.07975 0.06319 19.98235 0.70783 0.42303 0.19768 0.59259 0.70880
+ 0.08114 0.06400 21.11264 0.75653 0.47346 0.25059 0.64201 0.75759
+ 0.08230 0.06468 22.03193 0.79789 0.51623 0.29538 0.68395 0.79903
+ 0.08372 0.06550 23.12161 0.84905 0.56908 0.35061 0.73581 0.85028
+ 0.08499 0.06622 24.06148 0.89512 0.61662 0.40022 0.78248 0.89643
+ 0.08616 0.06688 24.90225 0.93794 0.66077 0.44624 0.82586 0.93934
+ 0.08767 0.06772 25.93850 0.99294 0.71744 0.50523 0.88155 0.99444
+ 0.08909 0.06851 26.88083 1.04522 0.77126 0.56119 0.93446 1.04681
+ 0.09044 0.06925 27.73473 1.09457 0.82205 0.61395 0.98441 1.09626
+ 0.09180 0.06998 28.55964 1.14419 0.87308 0.66692 1.03461 1.14598
+ 0.09313 0.07070 29.33875 1.19293 0.92319 0.71891 1.08392 1.19482
+ 0.09441 0.07138 30.05019 1.23916 0.97071 0.76817 1.13069 1.24114
+ 0.09562 0.07202 30.69747 1.28276 1.01551 0.81459 1.17478 1.28483
+ 0.09684 0.07266 31.32505 1.32656 1.06050 0.86120 1.21908 1.32871
+ 0.09805 0.07329 31.92002 1.36956 1.10468 0.90694 1.26257 1.37181
+ 0.09920 0.07389 32.46526 1.41035 1.14657 0.95031 1.30382 1.41269
+ 0.10030 0.07446 32.96275 1.44884 1.18609 0.99120 1.34273 1.45125
+ 0.10141 0.07503 33.44673 1.48750 1.22580 1.03229 1.38184 1.49000
+ 0.10251 0.07559 33.90671 1.52550 1.26482 1.07265 1.42026 1.52809
+ 0.10357 0.07612 34.32939 1.56157 1.30186 1.11096 1.45673 1.56423
+ 0.10457 0.07663 34.71605 1.59562 1.33682 1.14712 1.49116 1.59836
+ 0.10559 0.07714 35.09295 1.62987 1.37199 1.18348 1.52580 1.63269
+ 0.07974 0.06551 4.07564 0.23595 0.00000 0.00000 0.12557 0.23644
+ 0.08090 0.06620 4.73353 0.24801 0.00000 0.00000 0.13817 0.24857
+ 0.08269 0.06726 5.72582 0.26826 0.00000 0.00000 0.15923 0.26893
+ 0.08406 0.06806 6.43721 0.28472 0.01677 0.00000 0.17628 0.28548
+ 0.08555 0.06892 7.18686 0.30347 0.03707 0.00000 0.19567 0.30433
+ 0.08687 0.06967 7.83327 0.32075 0.05569 0.00000 0.21351 0.32170
+ 0.08817 0.07040 8.45126 0.33824 0.07446 0.00000 0.23152 0.33927
+ 0.08957 0.07119 9.10331 0.35772 0.09529 0.00000 0.25156 0.35885
+ 0.09081 0.07187 9.66552 0.37537 0.11412 0.00000 0.26970 0.37659
+ 0.09203 0.07254 10.20319 0.39300 0.13287 0.00000 0.28780 0.39430
+ 0.09300 0.07307 10.62513 0.40736 0.14812 0.00000 0.30253 0.40873
+ 0.09511 0.07420 11.51093 0.43903 0.18168 0.00000 0.33498 0.44057
+ 0.09695 0.07518 12.21249 0.46736 0.21161 0.03007 0.36398 0.46903
+ 0.09904 0.07627 12.97038 0.49996 0.24597 0.06680 0.39731 0.50179
+ 0.10122 0.07740 13.72946 0.53470 0.28251 0.10574 0.43280 0.53670
+ 0.10322 0.07841 14.39085 0.56682 0.31623 0.14157 0.46559 0.56898
+ 0.10524 0.07944 15.03082 0.59968 0.35068 0.17811 0.49911 0.60200
+ 0.10693 0.08028 15.54052 0.62721 0.37952 0.20864 0.52719 0.62967
+ 0.10899 0.08130 16.13189 0.66082 0.41469 0.24582 0.56145 0.66344
+ 0.11082 0.08219 16.63064 0.69068 0.44592 0.27880 0.59189 0.69346
+ 0.11250 0.08301 17.06766 0.71811 0.47460 0.30904 0.61985 0.72103
+ 0.11465 0.08404 17.59405 0.75289 0.51095 0.34735 0.65529 0.75600
+ 0.11667 0.08501 18.06062 0.78551 0.54502 0.38323 0.68852 0.78878
+ 0.11857 0.08591 18.47299 0.81592 0.57678 0.41666 0.71950 0.81935
+ 0.12048 0.08680 18.86153 0.84612 0.60833 0.44984 0.75027 0.84972
+ 0.12235 0.08767 19.21914 0.87544 0.63895 0.48204 0.78014 0.87920
+ 0.12412 0.08849 19.53731 0.90294 0.66768 0.51224 0.80816 0.90686
+ 0.12580 0.08926 19.81951 0.92859 0.69448 0.54042 0.83430 0.93266
+ 0.12748 0.09003 20.08602 0.95410 0.72114 0.56844 0.86029 0.95831
+ 0.12914 0.09078 20.33187 0.97889 0.74706 0.59568 0.88556 0.98325
+ 0.13072 0.09150 20.55100 1.00218 0.77141 0.62127 0.90930 1.00668
+ 0.13221 0.09217 20.74536 1.02394 0.79417 0.64520 0.93148 1.02857
+ 0.13372 0.09284 20.92911 1.04561 0.81685 0.66903 0.95358 1.05037
+ 0.13521 0.09350 21.09838 1.06670 0.83894 0.69226 0.97510 1.07160
+ 0.13663 0.09413 21.24908 1.08655 0.85973 0.71412 0.99535 1.09158
+ 0.13798 0.09472 21.38254 1.10513 0.87920 0.73460 1.01431 1.11028
+ 0.13934 0.09532 21.50827 1.12367 0.89863 0.75505 1.03322 1.12894
+ 0.09264 0.07435 3.84238 0.22006 0.00000 0.00000 0.11736 0.22103
+ 0.09413 0.07516 4.39685 0.23125 0.00000 0.00000 0.12907 0.23233
+ 0.09646 0.07640 5.22013 0.24964 0.00000 0.00000 0.14823 0.25090
+ 0.09822 0.07733 5.79924 0.26431 0.01503 0.00000 0.16348 0.26570
+ 0.10014 0.07833 6.40108 0.28077 0.03297 0.00000 0.18056 0.28231
+ 0.10184 0.07920 6.91346 0.29575 0.04922 0.00000 0.19607 0.29742
+ 0.10350 0.08005 7.39773 0.31073 0.06544 0.00000 0.21157 0.31254
+ 0.10529 0.08096 7.90289 0.32724 0.08326 0.00000 0.22863 0.32920
+ 0.10687 0.08176 8.33369 0.34206 0.09922 0.00000 0.24392 0.34415
+ 0.10842 0.08253 8.74162 0.35673 0.11499 0.00000 0.25906 0.35895
+ 0.10966 0.08314 9.05894 0.36860 0.12772 0.00000 0.27129 0.37092
+ 0.11232 0.08445 9.71711 0.39452 0.15548 0.00000 0.29798 0.39708
+ 0.11464 0.08557 10.22553 0.41743 0.17995 0.02477 0.32156 0.42019
+ 0.11726 0.08682 10.76542 0.44351 0.20776 0.05473 0.34836 0.44649
+ 0.11999 0.08811 11.29647 0.47097 0.23699 0.08615 0.37658 0.47420
+ 0.12247 0.08927 11.75089 0.49609 0.26370 0.11478 0.40236 0.49954
+ 0.12498 0.09043 12.18284 0.52152 0.29071 0.14369 0.42847 0.52521
+ 0.12706 0.09139 12.52111 0.54264 0.31313 0.16765 0.45014 0.54651
+ 0.12959 0.09254 12.90670 0.56819 0.34024 0.19659 0.47636 0.57230
+ 0.13183 0.09355 13.22581 0.59068 0.36410 0.22204 0.49943 0.59500
+ 0.13388 0.09446 13.50045 0.61117 0.38584 0.24521 0.52046 0.61568
+ 0.13649 0.09562 13.82454 0.63693 0.41317 0.27433 0.54689 0.64168
+ 0.13893 0.09670 14.10509 0.66085 0.43856 0.30136 0.57144 0.66584
+ 0.14122 0.09770 14.34722 0.68296 0.46203 0.32635 0.59413 0.68817
+ 0.14351 0.09869 14.56976 0.70473 0.48516 0.35097 0.61649 0.71016
+ 0.14575 0.09965 14.76917 0.72569 0.50744 0.37469 0.63801 0.73133
+ 0.14786 0.10055 14.94168 0.74519 0.52818 0.39678 0.65804 0.75103
+ 0.14984 0.10140 15.09034 0.76324 0.54740 0.41725 0.67660 0.76927
+ 0.15184 0.10224 15.22641 0.78106 0.56638 0.43747 0.69491 0.78727
+ 0.15379 0.10306 15.34771 0.79824 0.58471 0.45700 0.71259 0.80465
+ 0.15564 0.10383 15.45190 0.81427 0.60182 0.47524 0.72908 0.82085
+ 0.15739 0.10456 15.54071 0.82914 0.61771 0.49219 0.74439 0.83589
+ 0.15915 0.10528 15.62112 0.84385 0.63344 0.50898 0.75954 0.85076
+ 0.16088 0.10600 15.69156 0.85807 0.64867 0.52525 0.77419 0.86515
+ 0.16253 0.10667 15.75087 0.87136 0.66292 0.54048 0.78790 0.87860
+ 0.16409 0.10730 15.80023 0.88372 0.67619 0.55467 0.80065 0.89111
+ 0.16566 0.10794 15.84351 0.89597 0.68936 0.56876 0.81330 0.90351
+ 0.10429 0.08154 3.69957 0.20962 0.00000 0.00000 0.11201 0.21117
+ 0.10609 0.08245 4.18419 0.22018 0.00000 0.00000 0.12308 0.22188
+ 0.10888 0.08383 4.89517 0.23725 0.00000 0.00000 0.14094 0.23920
+ 0.11100 0.08488 5.38772 0.25068 0.01385 0.00000 0.15494 0.25281
+ 0.11329 0.08599 5.89404 0.26557 0.03021 0.00000 0.17046 0.26791
+ 0.11532 0.08697 6.32076 0.27898 0.04490 0.00000 0.18441 0.28150
+ 0.11729 0.08792 6.72041 0.29229 0.05943 0.00000 0.19824 0.29499
+ 0.11942 0.08893 7.13347 0.30683 0.07528 0.00000 0.21334 0.30973
+ 0.12130 0.08982 7.48261 0.31978 0.08937 0.00000 0.22677 0.32286
+ 0.12313 0.09067 7.81053 0.33253 0.10321 0.00000 0.23998 0.33577
+ 0.12459 0.09135 8.06376 0.34277 0.11432 0.00000 0.25060 0.34615
+ 0.12772 0.09279 8.58375 0.36498 0.13838 0.00000 0.27360 0.36866
+ 0.13045 0.09404 8.97644 0.38443 0.15941 0.02143 0.29372 0.38837
+ 0.13350 0.09541 9.38716 0.40637 0.18309 0.04714 0.31641 0.41061
+ 0.13667 0.09683 9.78467 0.42927 0.20779 0.07388 0.34008 0.43381
+ 0.13955 0.09810 10.11926 0.45002 0.23016 0.09806 0.36153 0.45486
+ 0.14245 0.09936 10.43206 0.47088 0.25262 0.12230 0.38308 0.47600
+ 0.14484 0.10040 10.67307 0.48806 0.27113 0.14226 0.40084 0.49342
+ 0.14774 0.10165 10.94309 0.50870 0.29336 0.16622 0.42217 0.51435
+ 0.15030 0.10274 11.16231 0.52674 0.31280 0.18715 0.44081 0.53264
+ 0.15264 0.10373 11.34748 0.54307 0.33040 0.20609 0.45769 0.54920
+ 0.15559 0.10497 11.56124 0.56344 0.35238 0.22975 0.47875 0.56987
+ 0.15836 0.10612 11.74144 0.58221 0.37265 0.25157 0.49818 0.58892
+ 0.16094 0.10719 11.89268 0.59943 0.39128 0.27162 0.51601 0.60641
+ 0.16350 0.10824 12.02751 0.61627 0.40951 0.29125 0.53345 0.62350
+ 0.16601 0.10926 12.14422 0.63237 0.42696 0.31005 0.55014 0.63985
+ 0.16836 0.11021 12.24135 0.64724 0.44311 0.32746 0.56556 0.65496
+ 0.17057 0.11110 12.32156 0.66092 0.45798 0.34351 0.57976 0.66886
+ 0.17278 0.11198 12.39145 0.67433 0.47259 0.35928 0.59369 0.68249
+ 0.17494 0.11284 12.45019 0.68719 0.48662 0.37444 0.60706 0.69557
+ 0.17698 0.11365 12.49723 0.69910 0.49965 0.38853 0.61945 0.70768
+ 0.17890 0.11441 12.53406 0.71008 0.51168 0.40156 0.63089 0.71886
+ 0.18083 0.11516 12.56409 0.72088 0.52354 0.41441 0.64215 0.72985
+ 0.18272 0.11590 12.58682 0.73126 0.53496 0.42679 0.65298 0.74042
+ 0.18452 0.11659 12.60248 0.74091 0.54559 0.43834 0.66305 0.75024
+ 0.18621 0.11724 12.61208 0.74982 0.55544 0.44905 0.67237 0.75932
+ 0.18792 0.11790 12.61676 0.75860 0.56516 0.45964 0.68157 0.76828
+ 0.11516 0.08775 3.60145 0.20186 0.00000 0.00000 0.10808 0.20409
+ 0.11724 0.08875 4.03363 0.21191 0.00000 0.00000 0.11865 0.21434
+ 0.12046 0.09027 4.66142 0.22795 0.00000 0.00000 0.13549 0.23069
+ 0.12290 0.09141 5.09060 0.24041 0.01295 0.00000 0.14854 0.24339
+ 0.12552 0.09263 5.52769 0.25411 0.02813 0.00000 0.16287 0.25734
+ 0.12784 0.09370 5.89289 0.26634 0.04165 0.00000 0.17566 0.26980
+ 0.13010 0.09473 6.23224 0.27839 0.05495 0.00000 0.18825 0.28207
+ 0.13252 0.09583 6.58015 0.29147 0.06935 0.00000 0.20190 0.29539
+ 0.13465 0.09679 6.87195 0.30304 0.08208 0.00000 0.21397 0.30718
+ 0.13673 0.09772 7.14403 0.31436 0.09452 0.00000 0.22577 0.31871
+ 0.13838 0.09845 7.35277 0.32342 0.10446 0.00000 0.23521 0.32794
+ 0.14192 0.10001 7.77754 0.34293 0.12586 0.00000 0.25554 0.34782
+ 0.14499 0.10135 8.09133 0.35989 0.14443 0.01904 0.27320 0.36509
+ 0.14841 0.10283 8.41481 0.37887 0.16520 0.04174 0.29296 0.38443
+ 0.15196 0.10434 8.72301 0.39853 0.18670 0.06520 0.31342 0.40445
+ 0.15516 0.10570 8.97820 0.41622 0.20604 0.08627 0.33183 0.42248
+ 0.15838 0.10705 9.21274 0.43387 0.22534 0.10727 0.35020 0.44046
+ 0.16103 0.10815 9.39042 0.44832 0.24115 0.12447 0.36524 0.45519
+ 0.16423 0.10947 9.58579 0.46556 0.26003 0.14499 0.38321 0.47277
+ 0.16704 0.11062 9.74106 0.48054 0.27645 0.16283 0.39881 0.48804
+ 0.16960 0.11166 9.86940 0.49401 0.29123 0.17890 0.41286 0.50179
+ 0.17283 0.11296 10.01368 0.51072 0.30959 0.19886 0.43029 0.51883
+ 0.17584 0.11416 10.13130 0.52601 0.32643 0.21717 0.44626 0.53444
+ 0.17865 0.11527 10.22639 0.53994 0.34180 0.23391 0.46082 0.54866
+ 0.18143 0.11637 10.30753 0.55348 0.35677 0.25021 0.47499 0.56249
+ 0.18413 0.11742 10.37408 0.56634 0.37102 0.26575 0.48845 0.57563
+ 0.18666 0.11840 10.42593 0.57814 0.38414 0.28007 0.50083 0.58769
+ 0.18903 0.11932 10.46541 0.58893 0.39617 0.29321 0.51216 0.59873
+ 0.19139 0.12022 10.49626 0.59945 0.40792 0.30607 0.52322 0.60949
+ 0.19370 0.12110 10.51846 0.60947 0.41915 0.31838 0.53377 0.61975
+ 0.19587 0.12192 10.53243 0.61870 0.42952 0.32976 0.54350 0.62920
+ 0.19791 0.12269 10.53949 0.62716 0.43906 0.34025 0.55243 0.63787
+ 0.19996 0.12345 10.54092 0.63543 0.44842 0.35055 0.56118 0.64635
+ 0.20196 0.12420 10.53687 0.64334 0.45739 0.36044 0.56955 0.65446
+ 0.20385 0.12490 10.52826 0.65063 0.46571 0.36963 0.57729 0.66195
+ 0.20564 0.12555 10.51599 0.65734 0.47337 0.37811 0.58442 0.66883
+ 0.20743 0.12621 10.49969 0.66391 0.48092 0.38647 0.59141 0.67559
+ 0.13544 0.09844 3.47242 0.19046 0.00000 0.00000 0.10242 0.19430
+ 0.13801 0.09958 3.82799 0.19968 0.00000 0.00000 0.11219 0.20380
+ 0.14197 0.10133 4.33605 0.21410 0.00000 0.00000 0.12746 0.21865
+ 0.14496 0.10264 4.67532 0.22508 0.01163 0.00000 0.13909 0.22997
+ 0.14817 0.10404 5.01532 0.23698 0.02507 0.00000 0.15166 0.24222
+ 0.15098 0.10525 5.29515 0.24746 0.03690 0.00000 0.16274 0.25302
+ 0.15371 0.10642 5.55158 0.25766 0.04841 0.00000 0.17352 0.26352
+ 0.15664 0.10767 5.81073 0.26861 0.06075 0.00000 0.18508 0.27480
+ 0.15920 0.10875 6.02503 0.27820 0.07155 0.00000 0.19521 0.28467
+ 0.16169 0.10979 6.22221 0.28749 0.08202 0.00000 0.20502 0.29424
+ 0.16366 0.11062 6.37167 0.29486 0.09033 0.00000 0.21281 0.30184
+ 0.16787 0.11236 6.67067 0.31058 0.10803 0.00000 0.22941 0.31803
+ 0.17149 0.11385 6.88158 0.32406 0.12321 0.01576 0.24364 0.33191
+ 0.17550 0.11548 7.09255 0.33895 0.13999 0.03436 0.25937 0.34726
+ 0.17964 0.11714 7.28694 0.35418 0.15717 0.05336 0.27546 0.36295
+ 0.18335 0.11862 7.44210 0.36770 0.17244 0.07025 0.28977 0.37689
+ 0.18705 0.12008 7.57916 0.38103 0.18752 0.08692 0.30387 0.39063
+ 0.19009 0.12126 7.67874 0.39183 0.19976 0.10045 0.31531 0.40177
+ 0.19373 0.12268 7.78301 0.40457 0.21423 0.11646 0.32882 0.41491
+ 0.19691 0.12390 7.86107 0.41550 0.22669 0.13025 0.34043 0.42620
+ 0.19980 0.12500 7.92150 0.42524 0.23782 0.14257 0.35079 0.43625
+ 0.20341 0.12636 7.98366 0.43717 0.25150 0.15775 0.36350 0.44858
+ 0.20677 0.12762 8.02824 0.44796 0.26392 0.17154 0.37501 0.45973
+ 0.20987 0.12877 8.05858 0.45767 0.27515 0.18404 0.38539 0.46977
+ 0.21293 0.12990 8.07856 0.46698 0.28598 0.19612 0.39538 0.47942
+ 0.21588 0.13098 8.08868 0.47573 0.29620 0.20753 0.40478 0.48848
+ 0.21864 0.13198 8.09023 0.48366 0.30552 0.21796 0.41332 0.49670
+ 0.22121 0.13290 8.08503 0.49083 0.31398 0.22746 0.42106 0.50414
+ 0.22375 0.13381 8.07364 0.49773 0.32219 0.23669 0.42853 0.51131
+ 0.22623 0.13469 8.05680 0.50422 0.32996 0.24546 0.43559 0.51806
+ 0.22855 0.13550 8.03595 0.51014 0.33707 0.25351 0.44203 0.52421
+ 0.23072 0.13626 8.01208 0.51549 0.34356 0.26088 0.44789 0.52979
+ 0.23288 0.13701 7.98426 0.52066 0.34988 0.26806 0.45356 0.53519
+ 0.23499 0.13773 7.95323 0.52554 0.35588 0.27491 0.45893 0.54028
+ 0.23697 0.13841 7.92059 0.52999 0.36139 0.28123 0.46385 0.54493
+ 0.23883 0.13904 7.88701 0.53403 0.36644 0.28703 0.46833 0.54915
+ 0.24069 0.13967 7.85062 0.53794 0.37136 0.29270 0.47268 0.55324
+ 0.16349 0.11198 3.35407 0.17825 0.00000 0.00000 0.09659 0.18496
+ 0.16667 0.11331 3.63106 0.18647 0.00000 0.00000 0.10543 0.19357
+ 0.17155 0.11533 4.01880 0.19904 0.00000 0.00000 0.11895 0.20674
+ 0.17520 0.11684 4.26941 0.20840 0.01022 0.00000 0.12903 0.21656
+ 0.17911 0.11843 4.51521 0.21836 0.02186 0.00000 0.13976 0.22700
+ 0.18251 0.11982 4.71339 0.22700 0.03196 0.00000 0.14906 0.23606
+ 0.18581 0.12114 4.89152 0.23528 0.04167 0.00000 0.15799 0.24475
+ 0.18931 0.12255 5.06789 0.24405 0.05195 0.00000 0.16745 0.25395
+ 0.19237 0.12376 5.21075 0.25164 0.06085 0.00000 0.17563 0.26190
+ 0.19531 0.12492 5.33962 0.25890 0.06939 0.00000 0.18347 0.26952
+ 0.19764 0.12584 5.43550 0.26461 0.07611 0.00000 0.18964 0.27551
+ 0.20257 0.12776 5.62221 0.27661 0.09027 0.00000 0.20262 0.28811
+ 0.20679 0.12938 5.74298 0.28673 0.10224 0.01265 0.21358 0.29873
+ 0.21142 0.13115 5.85700 0.29774 0.11530 0.02740 0.22551 0.31029
+ 0.21616 0.13294 5.95498 0.30879 0.12846 0.04227 0.23753 0.32191
+ 0.22037 0.13451 6.02685 0.31846 0.14002 0.05534 0.24804 0.33206
+ 0.22453 0.13604 6.08406 0.32783 0.15128 0.06808 0.25826 0.34191
+ 0.22792 0.13728 6.12065 0.33530 0.16031 0.07831 0.26644 0.34977
+ 0.23196 0.13874 6.15263 0.34399 0.17087 0.09030 0.27597 0.35892
+ 0.23546 0.13999 6.17045 0.35133 0.17984 0.10051 0.28405 0.36665
+ 0.23861 0.14111 6.17873 0.35777 0.18777 0.10955 0.29115 0.37344
+ 0.24253 0.14249 6.17896 0.36554 0.19741 0.12056 0.29976 0.38163
+ 0.24613 0.14374 6.16957 0.37242 0.20604 0.13046 0.30742 0.38890
+ 0.24943 0.14487 6.15303 0.37851 0.21376 0.13934 0.31423 0.39534
+ 0.25267 0.14597 6.12963 0.38424 0.22110 0.14783 0.32068 0.40141
+ 0.25577 0.14701 6.10063 0.38952 0.22795 0.15577 0.32665 0.40701
+ 0.25865 0.14796 6.06809 0.39422 0.23411 0.16296 0.33200 0.41200
+ 0.26130 0.14883 6.03332 0.39838 0.23965 0.16945 0.33677 0.41643
+ 0.26392 0.14968 5.99463 0.40230 0.24495 0.17569 0.34130 0.42062
+ 0.26644 0.15049 5.95326 0.40592 0.24991 0.18156 0.34551 0.42449
+ 0.26879 0.15124 5.91114 0.40915 0.25440 0.18690 0.34929 0.42794
+ 0.27098 0.15192 5.86895 0.41200 0.25845 0.19175 0.35266 0.43100
+ 0.27314 0.15259 5.82433 0.41469 0.26234 0.19643 0.35588 0.43390
+ 0.27523 0.15324 5.77839 0.41717 0.26599 0.20086 0.35887 0.43658
+ 0.27719 0.15383 5.73298 0.41937 0.26931 0.20490 0.36156 0.43896
+ 0.27902 0.15438 5.68857 0.42132 0.27231 0.20858 0.36396 0.44107
+ 0.28083 0.15492 5.64245 0.42315 0.27519 0.21215 0.36624 0.44306
+ 0.20626 0.13108 3.22298 0.16319 0.00000 0.00000 0.08984 0.17543
+ 0.21021 0.13263 3.41340 0.17008 0.00000 0.00000 0.09746 0.18286
+ 0.21620 0.13497 3.67174 0.18031 0.00000 0.00000 0.10881 0.19390
+ 0.22066 0.13668 3.82927 0.18772 0.00858 0.00000 0.11705 0.20190
+ 0.22538 0.13849 3.97810 0.19542 0.01818 0.00000 0.12563 0.21021
+ 0.22947 0.14005 4.09377 0.20194 0.02636 0.00000 0.13293 0.21727
+ 0.23339 0.14153 4.19402 0.20808 0.03410 0.00000 0.13982 0.22392
+ 0.23754 0.14308 4.28935 0.21446 0.04217 0.00000 0.14698 0.23082
+ 0.24112 0.14440 4.36333 0.21987 0.04907 0.00000 0.15308 0.23669
+ 0.24454 0.14566 4.42721 0.22497 0.05560 0.00000 0.15884 0.24221
+ 0.24723 0.14665 4.47272 0.22892 0.06068 0.00000 0.16332 0.24650
+ 0.25289 0.14869 4.55561 0.23707 0.07122 0.00000 0.17257 0.25533
+ 0.25765 0.15039 4.59521 0.24377 0.07997 0.00952 0.18021 0.26260
+ 0.26283 0.15222 4.62384 0.25089 0.08935 0.02046 0.18836 0.27032
+ 0.26805 0.15403 4.63895 0.25784 0.09863 0.03130 0.19637 0.27787
+ 0.27263 0.15559 4.64094 0.26376 0.10662 0.04067 0.20323 0.28430
+ 0.27710 0.15710 4.63276 0.26936 0.11428 0.04968 0.20975 0.29037
+ 0.28070 0.15829 4.61895 0.27371 0.12032 0.05681 0.21487 0.29511
+ 0.28493 0.15967 4.59446 0.27864 0.12727 0.06505 0.22070 0.30047
+ 0.28855 0.16083 4.56647 0.28268 0.13308 0.07198 0.22553 0.30488
+ 0.29177 0.16185 4.53609 0.28614 0.13814 0.07803 0.22969 0.30865
+ 0.29573 0.16308 4.49175 0.29017 0.14417 0.08531 0.23461 0.31306
+ 0.29932 0.16418 4.44486 0.29361 0.14948 0.09175 0.23887 0.31684
+ 0.30257 0.16515 4.39691 0.29654 0.15413 0.09744 0.24256 0.32006
+ 0.30572 0.16607 4.34558 0.29919 0.15848 0.10281 0.24595 0.32298
+ 0.30869 0.16692 4.29247 0.30151 0.16246 0.10777 0.24899 0.32556
+ 0.31141 0.16769 4.23992 0.30348 0.16597 0.11219 0.25163 0.32775
+ 0.31389 0.16837 4.18867 0.30514 0.16907 0.11612 0.25391 0.32961
+ 0.31630 0.16902 4.13568 0.30661 0.17198 0.11986 0.25600 0.33127
+ 0.31860 0.16962 4.08233 0.30789 0.17465 0.12333 0.25787 0.33271
+ 0.32072 0.17017 4.03064 0.30894 0.17702 0.12645 0.25949 0.33391
+ 0.32266 0.17065 3.98100 0.30979 0.17911 0.12923 0.26087 0.33490
+ 0.32455 0.17112 3.93034 0.31052 0.18108 0.13189 0.26212 0.33576
+ 0.32637 0.17155 3.87984 0.31112 0.18288 0.13437 0.26323 0.33647
+ 0.32804 0.17193 3.83132 0.31158 0.18448 0.13660 0.26417 0.33703
+ 0.32959 0.17228 3.78503 0.31191 0.18589 0.13861 0.26496 0.33745
+ 0.33110 0.17261 3.73802 0.31216 0.18722 0.14053 0.26566 0.33778
+ 0.24550 0.14770 3.11039 0.15093 0.00000 0.00000 0.08468 0.16914
+ 0.24996 0.14937 3.24140 0.15674 0.00000 0.00000 0.09130 0.17555
+ 0.25669 0.15187 3.41307 0.16515 0.00000 0.00000 0.10096 0.18487
+ 0.26165 0.15370 3.50987 0.17110 0.00737 0.00000 0.10783 0.19147
+ 0.26687 0.15560 3.59673 0.17716 0.01550 0.00000 0.11486 0.19819
+ 0.27136 0.15722 3.66067 0.18219 0.02234 0.00000 0.12074 0.20379
+ 0.27563 0.15874 3.71295 0.18684 0.02873 0.00000 0.12620 0.20897
+ 0.28011 0.16032 3.75925 0.19159 0.03532 0.00000 0.13181 0.21426
+ 0.28395 0.16167 3.79222 0.19555 0.04088 0.00000 0.13651 0.21867
+ 0.28760 0.16293 3.81802 0.19923 0.04609 0.00000 0.14089 0.22277
+ 0.29045 0.16391 3.83444 0.20204 0.05011 0.00000 0.14426 0.22591
+ 0.29638 0.16591 3.85844 0.20771 0.05836 0.00000 0.15111 0.23224
+ 0.30132 0.16755 3.85355 0.21227 0.06509 0.00754 0.15665 0.23732
+ 0.30662 0.16928 3.83667 0.21698 0.07220 0.01610 0.16245 0.24258
+ 0.31189 0.17095 3.80896 0.22146 0.07913 0.02447 0.16802 0.24758
+ 0.31645 0.17237 3.77599 0.22516 0.08500 0.03162 0.17269 0.25170
+ 0.32084 0.17370 3.73615 0.22855 0.09055 0.03840 0.17703 0.25548
+ 0.32433 0.17474 3.69873 0.23110 0.09486 0.04372 0.18036 0.25833
+ 0.32838 0.17591 3.64875 0.23390 0.09975 0.04979 0.18407 0.26146
+ 0.33181 0.17687 3.60091 0.23610 0.10378 0.05483 0.18706 0.26392
+ 0.33481 0.17769 3.55448 0.23791 0.10723 0.05919 0.18958 0.26595
+ 0.33846 0.17866 3.49260 0.23992 0.11130 0.06437 0.19247 0.26820
+ 0.34171 0.17949 3.43191 0.24152 0.11480 0.06891 0.19488 0.27001
+ 0.34461 0.18020 3.37326 0.24279 0.11782 0.07286 0.19689 0.27144
+ 0.34736 0.18085 3.31328 0.24383 0.12060 0.07655 0.19867 0.27263
+ 0.34993 0.18142 3.25355 0.24465 0.12308 0.07991 0.20018 0.27358
+ 0.35224 0.18192 3.19633 0.24525 0.12523 0.08287 0.20143 0.27427
+ 0.35432 0.18234 3.14198 0.24566 0.12710 0.08548 0.20245 0.27476
+ 0.35631 0.18272 3.08710 0.24594 0.12881 0.08793 0.20331 0.27510
+ 0.35817 0.18306 3.03300 0.24607 0.13034 0.09017 0.20402 0.27529
+ 0.35985 0.18334 2.98157 0.24609 0.13167 0.09216 0.20458 0.27534
+ 0.36136 0.18357 2.93298 0.24600 0.13281 0.09392 0.20499 0.27527
+ 0.36282 0.18377 2.88413 0.24582 0.13385 0.09557 0.20531 0.27511
+ 0.36419 0.18395 2.83612 0.24556 0.13478 0.09709 0.20553 0.27485
+ 0.36543 0.18408 2.79057 0.24523 0.13558 0.09844 0.20565 0.27451
+ 0.36655 0.18419 2.74762 0.24484 0.13626 0.09964 0.20570 0.27412
+ 0.36762 0.18427 2.70447 0.24439 0.13687 0.10077 0.20567 0.27365
+ 0.31575 0.17622 2.87346 0.13024 0.00000 0.00000 0.07635 0.16005
+ 0.32066 0.17791 2.92594 0.13436 0.00000 0.00000 0.08137 0.16472
+ 0.32798 0.18038 2.98621 0.14008 0.00000 0.00000 0.08843 0.17122
+ 0.33329 0.18215 3.00748 0.14394 0.00561 0.00000 0.09328 0.17562
+ 0.33881 0.18395 3.01923 0.14772 0.01165 0.00000 0.09809 0.17993
+ 0.34347 0.18545 3.02197 0.15074 0.01663 0.00000 0.10199 0.18338
+ 0.34784 0.18683 3.01871 0.15343 0.02120 0.00000 0.10552 0.18645
+ 0.35236 0.18823 3.00948 0.15607 0.02581 0.00000 0.10904 0.18946
+ 0.35617 0.18939 2.99706 0.15818 0.02964 0.00000 0.11191 0.19187
+ 0.35974 0.19045 2.98155 0.16008 0.03316 0.00000 0.11452 0.19403
+ 0.36249 0.19125 2.96697 0.16148 0.03584 0.00000 0.11648 0.19562
+ 0.36809 0.19283 2.92993 0.16418 0.04123 0.00000 0.12033 0.19866
+ 0.37262 0.19406 2.88140 0.16620 0.04552 0.00509 0.12332 0.20092
+ 0.37735 0.19528 2.82179 0.16815 0.04993 0.01074 0.12631 0.20308
+ 0.38190 0.19638 2.75587 0.16983 0.05412 0.01617 0.12904 0.20492
+ 0.38570 0.19724 2.69341 0.17109 0.05757 0.02070 0.13120 0.20626
+ 0.38924 0.19798 2.62850 0.17210 0.06074 0.02492 0.13309 0.20731
+ 0.39196 0.19850 2.57362 0.17275 0.06315 0.02816 0.13446 0.20797
+ 0.39501 0.19902 2.50627 0.17334 0.06581 0.03180 0.13587 0.20852
+ 0.39748 0.19938 2.44631 0.17367 0.06794 0.03477 0.13692 0.20879
+ 0.39957 0.19965 2.39124 0.17384 0.06971 0.03729 0.13772 0.20888
+ 0.40198 0.19989 2.32156 0.17386 0.07174 0.04023 0.13852 0.20877
+ 0.40403 0.20001 2.25651 0.17370 0.07342 0.04275 0.13907 0.20847
+ 0.40576 0.20006 2.19617 0.17341 0.07481 0.04490 0.13943 0.20801
+ 0.40730 0.20003 2.13661 0.17299 0.07603 0.04686 0.13963 0.20741
+ 0.40865 0.19993 2.07916 0.17245 0.07708 0.04861 0.13969 0.20668
+ 0.40978 0.19978 2.02566 0.17185 0.07795 0.05012 0.13964 0.20587
+ 0.41071 0.19959 1.97608 0.17119 0.07865 0.05142 0.13949 0.20502
+ 0.41153 0.19935 1.92714 0.17045 0.07926 0.05261 0.13925 0.20407
+ 0.41222 0.19907 1.87988 0.16966 0.07977 0.05368 0.13893 0.20305
+ 0.41278 0.19877 1.83581 0.16884 0.08017 0.05460 0.13857 0.20202
+ 0.41322 0.19844 1.79488 0.16802 0.08049 0.05540 0.13816 0.20098
+ 0.41357 0.19808 1.75438 0.16714 0.08074 0.05612 0.13769 0.19989
+ 0.41384 0.19770 1.71519 0.16624 0.08093 0.05677 0.13718 0.19875
+ 0.41402 0.19730 1.67853 0.16533 0.08106 0.05733 0.13665 0.19763
+ 0.41413 0.19690 1.64440 0.16444 0.08114 0.05781 0.13610 0.19653
+ 0.41418 0.19647 1.61053 0.16351 0.08118 0.05824 0.13552 0.19538
+ 0.37659 0.19991 2.60936 0.11277 0.00000 0.00000 0.06930 0.15219
+ 0.38140 0.20137 2.61342 0.11567 0.00000 0.00000 0.07305 0.15537
+ 0.38844 0.20345 2.60732 0.11951 0.00000 0.00000 0.07817 0.15957
+ 0.39345 0.20489 2.58571 0.12198 0.00433 0.00000 0.08157 0.16226
+ 0.39857 0.20631 2.55628 0.12428 0.00892 0.00000 0.08483 0.16474
+ 0.40282 0.20744 2.52658 0.12603 0.01264 0.00000 0.08740 0.16661
+ 0.40674 0.20845 2.49484 0.12752 0.01599 0.00000 0.08965 0.16817
+ 0.41071 0.20943 2.45810 0.12890 0.01933 0.00000 0.09183 0.16958
+ 0.41398 0.21019 2.42396 0.12994 0.02205 0.00000 0.09355 0.17063
+ 0.41699 0.21086 2.38936 0.13082 0.02453 0.00000 0.09506 0.17147
+ 0.41926 0.21133 2.36092 0.13142 0.02639 0.00000 0.09617 0.17204
+ 0.42375 0.21219 2.29786 0.13249 0.03007 0.00000 0.09825 0.17295
+ 0.42724 0.21276 2.23297 0.13316 0.03293 0.00359 0.09976 0.17344
+ 0.43073 0.21322 2.15899 0.13367 0.03581 0.00753 0.10117 0.17369
+ 0.43389 0.21350 2.08194 0.13396 0.03848 0.01124 0.10235 0.17365
+ 0.43637 0.21360 2.01244 0.13403 0.04062 0.01429 0.10317 0.17337
+ 0.43852 0.21356 1.94309 0.13392 0.04255 0.01709 0.10380 0.17288
+ 0.44005 0.21343 1.88635 0.13370 0.04397 0.01921 0.10417 0.17233
+ 0.44161 0.21315 1.81877 0.13330 0.04550 0.02155 0.10445 0.17149
+ 0.44275 0.21280 1.76024 0.13283 0.04669 0.02343 0.10456 0.17061
+ 0.44358 0.21241 1.70771 0.13231 0.04766 0.02500 0.10455 0.16969
+ 0.44439 0.21181 1.64276 0.13153 0.04871 0.02681 0.10440 0.16840
+ 0.44490 0.21115 1.58349 0.13069 0.04955 0.02832 0.10413 0.16706
+ 0.44517 0.21046 1.52960 0.12982 0.05022 0.02959 0.10378 0.16571
+ 0.44524 0.20970 1.47735 0.12887 0.05077 0.03073 0.10333 0.16427
+ 0.44514 0.20889 1.42781 0.12788 0.05120 0.03173 0.10280 0.16279
+ 0.44489 0.20807 1.38237 0.12688 0.05153 0.03257 0.10224 0.16132
+ 0.44452 0.20724 1.34082 0.12590 0.05177 0.03327 0.10165 0.15989
+ 0.44403 0.20637 1.30033 0.12487 0.05195 0.03391 0.10101 0.15841
+ 0.44343 0.20548 1.26171 0.12382 0.05206 0.03446 0.10034 0.15692
+ 0.44276 0.20459 1.22608 0.12280 0.05212 0.03493 0.09966 0.15547
+ 0.44204 0.20373 1.19333 0.12180 0.05214 0.03532 0.09899 0.15407
+ 0.44123 0.20282 1.16123 0.12078 0.05212 0.03566 0.09828 0.15263
+ 0.44034 0.20190 1.13046 0.11975 0.05206 0.03596 0.09756 0.15120
+ 0.43943 0.20100 1.10192 0.11875 0.05197 0.03620 0.09684 0.14981
+ 0.43850 0.20013 1.07556 0.11779 0.05186 0.03640 0.09615 0.14848
+ 0.43750 0.19922 1.04960 0.11681 0.05173 0.03657 0.09543 0.14712
+ 0.42899 0.21940 2.32960 0.09795 0.00000 0.00000 0.06296 0.14403
+ 0.43325 0.22044 2.30344 0.09995 0.00000 0.00000 0.06570 0.14594
+ 0.43936 0.22185 2.25740 0.10247 0.00000 0.00000 0.06932 0.14824
+ 0.44362 0.22276 2.21146 0.10399 0.00336 0.00000 0.07163 0.14955
+ 0.44785 0.22359 2.15965 0.10532 0.00687 0.00000 0.07377 0.15060
+ 0.45128 0.22419 2.11309 0.10625 0.00968 0.00000 0.07539 0.15125
+ 0.45435 0.22467 2.06717 0.10697 0.01217 0.00000 0.07676 0.15167
+ 0.45737 0.22506 2.01741 0.10757 0.01462 0.00000 0.07802 0.15191
+ 0.45979 0.22531 1.97357 0.10796 0.01660 0.00000 0.07897 0.15196
+ 0.46192 0.22546 1.93092 0.10823 0.01837 0.00000 0.07976 0.15187
+ 0.46347 0.22552 1.89699 0.10838 0.01968 0.00000 0.08031 0.15172
+ 0.46638 0.22547 1.82460 0.10851 0.02224 0.00000 0.08126 0.15117
+ 0.46845 0.22525 1.75589 0.10844 0.02420 0.00260 0.08187 0.15048
+ 0.47028 0.22482 1.68008 0.10818 0.02613 0.00542 0.08233 0.14949
+ 0.47169 0.22417 1.60342 0.10775 0.02787 0.00803 0.08259 0.14826
+ 0.47255 0.22343 1.53604 0.10722 0.02924 0.01015 0.08266 0.14698
+ 0.47304 0.22254 1.47028 0.10656 0.03044 0.01207 0.08258 0.14556
+ 0.47319 0.22170 1.41749 0.10594 0.03130 0.01350 0.08241 0.14430
+ 0.47306 0.22058 1.35571 0.10510 0.03221 0.01507 0.08210 0.14266
+ 0.47269 0.21950 1.30310 0.10429 0.03289 0.01631 0.08173 0.14114
+ 0.47215 0.21843 1.25656 0.10348 0.03342 0.01733 0.08132 0.13969
+ 0.47121 0.21700 1.19986 0.10240 0.03398 0.01849 0.08072 0.13778
+ 0.47008 0.21556 1.14888 0.10131 0.03439 0.01945 0.08007 0.13592
+ 0.46881 0.21415 1.10315 0.10025 0.03469 0.02023 0.07940 0.13414
+ 0.46737 0.21268 1.05934 0.09915 0.03492 0.02093 0.07868 0.13231
+ 0.46579 0.21119 1.01827 0.09803 0.03507 0.02152 0.07792 0.13050
+ 0.46415 0.20974 0.98100 0.09695 0.03516 0.02201 0.07717 0.12875
+ 0.46248 0.20833 0.94724 0.09590 0.03520 0.02242 0.07643 0.12710
+ 0.46070 0.20688 0.91463 0.09484 0.03520 0.02277 0.07566 0.12542
+ 0.45884 0.20543 0.88379 0.09377 0.03516 0.02307 0.07488 0.12375
+ 0.45698 0.20402 0.85556 0.09275 0.03509 0.02332 0.07412 0.12217
+ 0.45514 0.20266 0.82980 0.09177 0.03500 0.02351 0.07339 0.12066
+ 0.45322 0.20128 0.80472 0.09078 0.03488 0.02368 0.07264 0.11914
+ 0.45125 0.19989 0.78084 0.08979 0.03474 0.02381 0.07188 0.11764
+ 0.44931 0.19855 0.75882 0.08884 0.03459 0.02392 0.07116 0.11620
+ 0.44742 0.19727 0.73860 0.08794 0.03444 0.02400 0.07046 0.11485
+ 0.44546 0.19596 0.71880 0.08703 0.03427 0.02406 0.06975 0.11347
+ 0.48358 0.23832 1.97927 0.08278 0.00000 0.00000 0.05575 0.13278
+ 0.48671 0.23865 1.93200 0.08399 0.00000 0.00000 0.05751 0.13337
+ 0.49101 0.23896 1.85956 0.08538 0.00000 0.00000 0.05972 0.13377
+ 0.49385 0.23902 1.79920 0.08612 0.00245 0.00000 0.06103 0.13374
+ 0.49651 0.23893 1.73520 0.08666 0.00497 0.00000 0.06217 0.13342
+ 0.49851 0.23872 1.68030 0.08696 0.00695 0.00000 0.06296 0.13295
+ 0.50018 0.23840 1.62812 0.08710 0.00869 0.00000 0.06357 0.13233
+ 0.50165 0.23793 1.57345 0.08713 0.01037 0.00000 0.06407 0.13152
+ 0.50268 0.23743 1.52665 0.08705 0.01170 0.00000 0.06439 0.13071
+ 0.50346 0.23685 1.48221 0.08689 0.01288 0.00000 0.06460 0.12983
+ 0.50392 0.23633 1.44756 0.08672 0.01374 0.00000 0.06471 0.12907
+ 0.50446 0.23504 1.37545 0.08622 0.01540 0.00000 0.06479 0.12732
+ 0.50444 0.23376 1.31044 0.08566 0.01663 0.00177 0.06471 0.12568
+ 0.50394 0.23215 1.24048 0.08493 0.01782 0.00366 0.06448 0.12374
+ 0.50291 0.23030 1.17136 0.08407 0.01887 0.00539 0.06410 0.12162
+ 0.50157 0.22849 1.11186 0.08320 0.01967 0.00677 0.06365 0.11964
+ 0.49985 0.22654 1.05488 0.08226 0.02034 0.00801 0.06312 0.11758
+ 0.49818 0.22485 1.00986 0.08144 0.02081 0.00892 0.06261 0.11585
+ 0.49586 0.22271 0.95798 0.08040 0.02128 0.00990 0.06194 0.11372
+ 0.49358 0.22075 0.91445 0.07944 0.02162 0.01066 0.06130 0.11182
+ 0.49131 0.21890 0.87643 0.07854 0.02187 0.01128 0.06067 0.11006
+ 0.48819 0.21650 0.83071 0.07736 0.02211 0.01198 0.05983 0.10782
+ 0.48506 0.21418 0.79016 0.07622 0.02227 0.01254 0.05901 0.10571
+ 0.48195 0.21196 0.75421 0.07514 0.02236 0.01299 0.05821 0.10373
+ 0.47869 0.20971 0.72016 0.07403 0.02241 0.01338 0.05738 0.10176
+ 0.47536 0.20747 0.68857 0.07295 0.02241 0.01371 0.05655 0.09984
+ 0.47210 0.20534 0.66018 0.07191 0.02238 0.01397 0.05576 0.09803
+ 0.46893 0.20330 0.63469 0.07092 0.02232 0.01418 0.05500 0.09633
+ 0.46567 0.20124 0.61026 0.06993 0.02224 0.01436 0.05422 0.09464
+ 0.46237 0.19920 0.58734 0.06895 0.02214 0.01451 0.05346 0.09299
+ 0.45918 0.19725 0.56651 0.06802 0.02202 0.01462 0.05273 0.09143
+ 0.45610 0.19540 0.54764 0.06714 0.02190 0.01470 0.05203 0.08997
+ 0.45295 0.19352 0.52937 0.06626 0.02176 0.01477 0.05133 0.08851
+ 0.44978 0.19166 0.51208 0.06538 0.02162 0.01482 0.05064 0.08708
+ 0.44673 0.18989 0.49623 0.06455 0.02147 0.01485 0.04998 0.08573
+ 0.44380 0.18820 0.48175 0.06377 0.02132 0.01487 0.04935 0.08446
+ 0.44080 0.18649 0.46764 0.06298 0.02116 0.01487 0.04871 0.08319
+ 0.52690 0.25158 1.64716 0.07091 0.00000 0.00000 0.04920 0.12032
+ 0.52855 0.25107 1.59099 0.07158 0.00000 0.00000 0.05023 0.11990
+ 0.53053 0.25009 1.50883 0.07223 0.00000 0.00000 0.05141 0.11888
+ 0.53160 0.24918 1.44497 0.07246 0.00178 0.00000 0.05202 0.11787
+ 0.53234 0.24806 1.37924 0.07253 0.00358 0.00000 0.05247 0.11660
+ 0.53266 0.24696 1.32422 0.07244 0.00498 0.00000 0.05271 0.11535
+ 0.53266 0.24578 1.27298 0.07225 0.00619 0.00000 0.05283 0.11404
+ 0.53236 0.24440 1.22030 0.07195 0.00735 0.00000 0.05283 0.11255
+ 0.53182 0.24310 1.17598 0.07161 0.00826 0.00000 0.05276 0.11118
+ 0.53108 0.24176 1.13450 0.07123 0.00905 0.00000 0.05262 0.10981
+ 0.53033 0.24065 1.10256 0.07089 0.00962 0.00000 0.05247 0.10869
+ 0.52829 0.23811 1.03716 0.07008 0.01070 0.00000 0.05205 0.10624
+ 0.52608 0.23578 0.98001 0.06930 0.01149 0.00122 0.05159 0.10408
+ 0.52313 0.23302 0.91955 0.06836 0.01223 0.00251 0.05099 0.10163
+ 0.51961 0.23003 0.86081 0.06732 0.01286 0.00368 0.05028 0.09908
+ 0.51605 0.22722 0.81100 0.06633 0.01333 0.00460 0.04959 0.09677
+ 0.51214 0.22430 0.76394 0.06530 0.01372 0.00541 0.04885 0.09446
+ 0.50869 0.22183 0.72720 0.06443 0.01397 0.00600 0.04821 0.09255
+ 0.50427 0.21879 0.68534 0.06335 0.01422 0.00663 0.04740 0.09026
+ 0.50017 0.21606 0.65060 0.06238 0.01438 0.00712 0.04666 0.08826
+ 0.49627 0.21353 0.62055 0.06148 0.01450 0.00751 0.04598 0.08644
+ 0.49115 0.21030 0.58476 0.06033 0.01459 0.00794 0.04509 0.08417
+ 0.48618 0.20724 0.55335 0.05924 0.01463 0.00828 0.04424 0.08206
+ 0.48140 0.20436 0.52575 0.05822 0.01463 0.00855 0.04344 0.08012
+ 0.47652 0.20147 0.49982 0.05719 0.01461 0.00878 0.04263 0.07821
+ 0.47166 0.19864 0.47596 0.05619 0.01456 0.00897 0.04184 0.07637
+ 0.46698 0.19596 0.45467 0.05524 0.01449 0.00912 0.04110 0.07466
+ 0.46251 0.19343 0.43568 0.05436 0.01441 0.00923 0.04039 0.07307
+ 0.45797 0.19090 0.41759 0.05347 0.01432 0.00933 0.03969 0.07150
+ 0.45347 0.18841 0.40072 0.05260 0.01421 0.00940 0.03900 0.06998
+ 0.44915 0.18606 0.38546 0.05178 0.01410 0.00945 0.03834 0.06856
+ 0.44504 0.18383 0.37171 0.05100 0.01399 0.00949 0.03773 0.06724
+ 0.44087 0.18160 0.35846 0.05023 0.01387 0.00951 0.03711 0.06592
+ 0.43674 0.17940 0.34598 0.04948 0.01375 0.00952 0.03651 0.06465
+ 0.43278 0.17731 0.33458 0.04876 0.01362 0.00953 0.03594 0.06345
+ 0.42901 0.17534 0.32421 0.04809 0.01350 0.00952 0.03540 0.06234
+ 0.42518 0.17335 0.31413 0.04741 0.01337 0.00951 0.03487 0.06122
+ 0.55983 0.25963 1.34564 0.06180 0.00000 0.00000 0.04323 0.10700
+ 0.55977 0.25822 1.28828 0.06208 0.00000 0.00000 0.04372 0.10586
+ 0.55913 0.25587 1.20657 0.06222 0.00000 0.00000 0.04417 0.10386
+ 0.55823 0.25396 1.14554 0.06212 0.00128 0.00000 0.04430 0.10219
+ 0.55686 0.25178 1.08393 0.06187 0.00257 0.00000 0.04429 0.10029
+ 0.55533 0.24977 1.03320 0.06155 0.00356 0.00000 0.04416 0.09855
+ 0.55356 0.24772 0.98662 0.06115 0.00440 0.00000 0.04396 0.09682
+ 0.55137 0.24544 0.93936 0.06066 0.00520 0.00000 0.04366 0.09493
+ 0.54920 0.24337 0.90009 0.06018 0.00581 0.00000 0.04335 0.09325
+ 0.54689 0.24130 0.86373 0.05967 0.00635 0.00000 0.04300 0.09162
+ 0.54490 0.23962 0.83598 0.05924 0.00673 0.00000 0.04271 0.09031
+ 0.54026 0.23590 0.77982 0.05827 0.00743 0.00000 0.04200 0.08753
+ 0.53584 0.23259 0.73182 0.05738 0.00794 0.00085 0.04135 0.08514
+ 0.53051 0.22880 0.68171 0.05635 0.00840 0.00174 0.04057 0.08251
+ 0.52458 0.22478 0.63364 0.05524 0.00879 0.00254 0.03972 0.07984
+ 0.51892 0.22110 0.59335 0.05422 0.00907 0.00316 0.03893 0.07747
+ 0.51296 0.21735 0.55569 0.05318 0.00929 0.00370 0.03812 0.07513
+ 0.50787 0.21422 0.52657 0.05231 0.00943 0.00410 0.03745 0.07324
+ 0.50153 0.21042 0.49367 0.05125 0.00956 0.00451 0.03662 0.07100
+ 0.49579 0.20706 0.46661 0.05032 0.00963 0.00483 0.03588 0.06907
+ 0.49044 0.20399 0.44338 0.04946 0.00968 0.00508 0.03521 0.06734
+ 0.48356 0.20010 0.41592 0.04837 0.00970 0.00536 0.03436 0.06520
+ 0.47699 0.19646 0.39201 0.04735 0.00969 0.00557 0.03356 0.06324
+ 0.47078 0.19306 0.37115 0.04641 0.00967 0.00574 0.03282 0.06145
+ 0.46452 0.18969 0.35168 0.04547 0.00962 0.00588 0.03208 0.05971
+ 0.45837 0.18642 0.33387 0.04455 0.00956 0.00600 0.03137 0.05805
+ 0.45251 0.18334 0.31807 0.04370 0.00949 0.00608 0.03070 0.05652
+ 0.44698 0.18047 0.30404 0.04290 0.00942 0.00615 0.03008 0.05511
+ 0.44142 0.17760 0.29075 0.04211 0.00933 0.00620 0.02947 0.05373
+ 0.43594 0.17481 0.27840 0.04134 0.00924 0.00624 0.02887 0.05240
+ 0.43073 0.17217 0.26728 0.04061 0.00915 0.00626 0.02830 0.05117
+ 0.42581 0.16970 0.25729 0.03993 0.00906 0.00628 0.02778 0.05003
+ 0.42085 0.16723 0.24770 0.03926 0.00897 0.00628 0.02726 0.04890
+ 0.41596 0.16482 0.23869 0.03860 0.00887 0.00628 0.02675 0.04781
+ 0.41131 0.16253 0.23049 0.03797 0.00877 0.00628 0.02627 0.04679
+ 0.40690 0.16038 0.22304 0.03739 0.00868 0.00626 0.02582 0.04584
+ 0.40246 0.15823 0.21583 0.03681 0.00858 0.00625 0.02537 0.04491
+ 0.58321 0.26294 1.08077 0.05486 0.00000 0.00000 0.03781 0.09333
+ 0.58131 0.26062 1.02685 0.05486 0.00000 0.00000 0.03791 0.09172
+ 0.57788 0.25692 0.95148 0.05461 0.00000 0.00000 0.03785 0.08910
+ 0.57491 0.25403 0.89669 0.05428 0.00092 0.00000 0.03765 0.08705
+ 0.57135 0.25082 0.84218 0.05381 0.00184 0.00000 0.03733 0.08480
+ 0.56794 0.24794 0.79785 0.05332 0.00253 0.00000 0.03698 0.08281
+ 0.56438 0.24508 0.75758 0.05279 0.00311 0.00000 0.03658 0.08087
+ 0.56029 0.24196 0.71716 0.05217 0.00366 0.00000 0.03611 0.07881
+ 0.55650 0.23917 0.68389 0.05160 0.00408 0.00000 0.03566 0.07701
+ 0.55264 0.23643 0.65333 0.05101 0.00444 0.00000 0.03520 0.07528
+ 0.54945 0.23423 0.63019 0.05053 0.00469 0.00000 0.03482 0.07392
+ 0.54230 0.22947 0.58378 0.04947 0.00515 0.00000 0.03399 0.07107
+ 0.53579 0.22530 0.54476 0.04852 0.00548 0.00060 0.03325 0.06867
+ 0.52822 0.22062 0.50445 0.04745 0.00577 0.00122 0.03240 0.06607
+ 0.52007 0.21574 0.46618 0.04632 0.00601 0.00177 0.03152 0.06347
+ 0.51249 0.21133 0.43442 0.04530 0.00618 0.00220 0.03072 0.06121
+ 0.50470 0.20690 0.40498 0.04427 0.00630 0.00257 0.02992 0.05901
+ 0.49816 0.20326 0.38238 0.04342 0.00638 0.00284 0.02926 0.05724
+ 0.49014 0.19887 0.35704 0.04240 0.00644 0.00312 0.02847 0.05518
+ 0.48299 0.19503 0.33634 0.04150 0.00647 0.00333 0.02779 0.05342
+ 0.47641 0.19154 0.31867 0.04069 0.00648 0.00350 0.02716 0.05186
+ 0.46803 0.18717 0.29791 0.03966 0.00648 0.00368 0.02639 0.04994
+ 0.46015 0.18311 0.27995 0.03871 0.00646 0.00382 0.02567 0.04821
+ 0.45276 0.17936 0.26436 0.03784 0.00642 0.00393 0.02501 0.04664
+ 0.44540 0.17566 0.24989 0.03697 0.00638 0.00402 0.02436 0.04513
+ 0.43821 0.17209 0.23671 0.03614 0.00632 0.00409 0.02374 0.04369
+ 0.43143 0.16876 0.22507 0.03536 0.00626 0.00414 0.02316 0.04238
+ 0.42507 0.16567 0.21477 0.03464 0.00620 0.00418 0.02262 0.04118
+ 0.41872 0.16260 0.20504 0.03393 0.00613 0.00421 0.02210 0.04001
+ 0.41250 0.15962 0.19603 0.03324 0.00606 0.00423 0.02159 0.03889
+ 0.40663 0.15683 0.18795 0.03259 0.00599 0.00424 0.02112 0.03785
+ 0.40110 0.15422 0.18070 0.03199 0.00593 0.00425 0.02067 0.03690
+ 0.39557 0.15162 0.17376 0.03139 0.00585 0.00425 0.02024 0.03596
+ 0.39014 0.14910 0.16725 0.03081 0.00578 0.00424 0.01982 0.03506
+ 0.38500 0.14671 0.16135 0.03026 0.00571 0.00424 0.01942 0.03423
+ 0.38015 0.14448 0.15599 0.02975 0.00564 0.00422 0.01905 0.03345
+ 0.37528 0.14225 0.15081 0.02924 0.00557 0.00421 0.01868 0.03268
+ 0.59783 0.26202 0.85425 0.04954 0.00000 0.00000 0.03288 0.07981
+ 0.59405 0.25884 0.80631 0.04930 0.00000 0.00000 0.03272 0.07795
+ 0.58779 0.25385 0.74027 0.04875 0.00000 0.00000 0.03232 0.07503
+ 0.58274 0.25004 0.69324 0.04824 0.00066 0.00000 0.03191 0.07281
+ 0.57701 0.24589 0.64699 0.04760 0.00130 0.00000 0.03141 0.07043
+ 0.57175 0.24222 0.60975 0.04699 0.00178 0.00000 0.03092 0.06837
+ 0.56643 0.23863 0.57623 0.04635 0.00219 0.00000 0.03041 0.06639
+ 0.56052 0.23475 0.54287 0.04564 0.00256 0.00000 0.02984 0.06432
+ 0.55518 0.23134 0.51561 0.04500 0.00285 0.00000 0.02933 0.06253
+ 0.54986 0.22802 0.49076 0.04436 0.00309 0.00000 0.02882 0.06084
+ 0.54553 0.22538 0.47205 0.04384 0.00326 0.00000 0.02842 0.05952
+ 0.53605 0.21972 0.43480 0.04271 0.00356 0.00000 0.02754 0.05678
+ 0.52763 0.21485 0.40390 0.04173 0.00377 0.00042 0.02678 0.05451
+ 0.51804 0.20944 0.37224 0.04064 0.00396 0.00086 0.02593 0.05209
+ 0.50793 0.20388 0.34244 0.03950 0.00410 0.00125 0.02508 0.04970
+ 0.49868 0.19891 0.31790 0.03849 0.00420 0.00155 0.02431 0.04765
+ 0.48931 0.19398 0.29531 0.03747 0.00427 0.00181 0.02356 0.04567
+ 0.48153 0.18995 0.27808 0.03665 0.00431 0.00199 0.02295 0.04410
+ 0.47211 0.18514 0.25886 0.03566 0.00434 0.00219 0.02223 0.04229
+ 0.46380 0.18097 0.24324 0.03480 0.00436 0.00233 0.02161 0.04075
+ 0.45621 0.17721 0.22998 0.03403 0.00436 0.00245 0.02105 0.03940
+ 0.44665 0.17252 0.21448 0.03306 0.00434 0.00257 0.02037 0.03775
+ 0.43772 0.16820 0.20112 0.03217 0.00432 0.00266 0.01974 0.03628
+ 0.42943 0.16424 0.18958 0.03136 0.00428 0.00274 0.01916 0.03495
+ 0.42121 0.16035 0.17890 0.03056 0.00425 0.00280 0.01860 0.03368
+ 0.41326 0.15662 0.16921 0.02979 0.00420 0.00284 0.01807 0.03248
+ 0.40580 0.15316 0.16067 0.02908 0.00415 0.00288 0.01758 0.03139
+ 0.39884 0.14996 0.15314 0.02842 0.00411 0.00290 0.01713 0.03040
+ 0.39192 0.14680 0.14605 0.02777 0.00406 0.00292 0.01668 0.02944
+ 0.38519 0.14375 0.13949 0.02715 0.00400 0.00293 0.01626 0.02852
+ 0.37886 0.14090 0.13361 0.02656 0.00395 0.00294 0.01586 0.02768
+ 0.37294 0.13825 0.12836 0.02602 0.00390 0.00294 0.01550 0.02691
+ 0.36702 0.13562 0.12333 0.02549 0.00385 0.00294 0.01514 0.02615
+ 0.36125 0.13307 0.11863 0.02497 0.00380 0.00294 0.01479 0.02543
+ 0.35580 0.13068 0.11436 0.02448 0.00375 0.00293 0.01447 0.02476
+ 0.35068 0.12844 0.11049 0.02403 0.00370 0.00292 0.01417 0.02414
+ 0.34556 0.12621 0.10676 0.02357 0.00365 0.00291 0.01387 0.02353
+ 0.60446 0.25738 0.66493 0.04531 0.00000 0.00000 0.02844 0.06690
+ 0.59882 0.25341 0.62406 0.04487 0.00000 0.00000 0.02811 0.06495
+ 0.58979 0.24727 0.56845 0.04408 0.00000 0.00000 0.02749 0.06197
+ 0.58273 0.24264 0.52948 0.04341 0.00046 0.00000 0.02696 0.05976
+ 0.57492 0.23766 0.49153 0.04264 0.00091 0.00000 0.02635 0.05742
+ 0.56790 0.23330 0.46124 0.04192 0.00125 0.00000 0.02579 0.05542
+ 0.56093 0.22908 0.43417 0.04120 0.00153 0.00000 0.02523 0.05353
+ 0.55332 0.22457 0.40742 0.04042 0.00178 0.00000 0.02463 0.05156
+ 0.54655 0.22063 0.38571 0.03972 0.00197 0.00000 0.02410 0.04989
+ 0.53989 0.21684 0.36603 0.03903 0.00214 0.00000 0.02358 0.04831
+ 0.53454 0.21384 0.35128 0.03848 0.00225 0.00000 0.02317 0.04710
+ 0.52296 0.20747 0.32212 0.03731 0.00245 0.00000 0.02230 0.04459
+ 0.51286 0.20205 0.29816 0.03631 0.00259 0.00030 0.02157 0.04255
+ 0.50152 0.19610 0.27380 0.03520 0.00270 0.00062 0.02077 0.04039
+ 0.48973 0.19005 0.25102 0.03406 0.00280 0.00090 0.01997 0.03829
+ 0.47908 0.18469 0.23238 0.03306 0.00286 0.00111 0.01927 0.03649
+ 0.46841 0.17941 0.21532 0.03206 0.00290 0.00129 0.01859 0.03479
+ 0.45963 0.17514 0.20236 0.03126 0.00292 0.00142 0.01804 0.03344
+ 0.44909 0.17007 0.18798 0.03030 0.00293 0.00156 0.01740 0.03190
+ 0.43987 0.16570 0.17634 0.02948 0.00293 0.00166 0.01685 0.03061
+ 0.43151 0.16179 0.16649 0.02875 0.00293 0.00174 0.01636 0.02948
+ 0.42105 0.15694 0.15501 0.02783 0.00291 0.00183 0.01576 0.02811
+ 0.41136 0.15251 0.14516 0.02700 0.00289 0.00190 0.01522 0.02689
+ 0.40242 0.14845 0.13667 0.02624 0.00287 0.00195 0.01473 0.02580
+ 0.39361 0.14451 0.12884 0.02549 0.00283 0.00199 0.01426 0.02477
+ 0.38512 0.14074 0.12175 0.02478 0.00280 0.00202 0.01381 0.02380
+ 0.37722 0.13725 0.11551 0.02413 0.00277 0.00205 0.01339 0.02292
+ 0.36987 0.13405 0.11002 0.02353 0.00273 0.00206 0.01302 0.02213
+ 0.36261 0.13089 0.10485 0.02294 0.00269 0.00207 0.01265 0.02136
+ 0.35557 0.12786 0.10008 0.02237 0.00266 0.00208 0.01230 0.02063
+ 0.34897 0.12504 0.09581 0.02184 0.00262 0.00209 0.01197 0.01997
+ 0.34282 0.12242 0.09199 0.02135 0.00258 0.00209 0.01167 0.01936
+ 0.33671 0.11984 0.08835 0.02087 0.00255 0.00209 0.01138 0.01877
+ 0.33075 0.11734 0.08494 0.02041 0.00251 0.00208 0.01109 0.01820
+ 0.32516 0.11500 0.08184 0.01997 0.00247 0.00208 0.01083 0.01768
+ 0.31992 0.11282 0.07904 0.01957 0.00244 0.00207 0.01058 0.01720
+ 0.31469 0.11065 0.07634 0.01916 0.00241 0.00206 0.01034 0.01673
+ 0.60391 0.24956 0.50976 0.04178 0.00000 0.00000 0.02445 0.05492
+ 0.59648 0.24490 0.47613 0.04118 0.00000 0.00000 0.02401 0.05303
+ 0.58482 0.23777 0.43085 0.04017 0.00000 0.00000 0.02327 0.05018
+ 0.57587 0.23244 0.39953 0.03937 0.00032 0.00000 0.02268 0.04809
+ 0.56613 0.22677 0.36929 0.03847 0.00064 0.00000 0.02202 0.04592
+ 0.55748 0.22185 0.34533 0.03767 0.00087 0.00000 0.02144 0.04407
+ 0.54901 0.21711 0.32406 0.03689 0.00106 0.00000 0.02088 0.04234
+ 0.53986 0.21209 0.30316 0.03604 0.00123 0.00000 0.02028 0.04056
+ 0.53180 0.20775 0.28629 0.03529 0.00136 0.00000 0.01975 0.03906
+ 0.52396 0.20359 0.27107 0.03457 0.00147 0.00000 0.01925 0.03766
+ 0.51771 0.20032 0.25971 0.03400 0.00155 0.00000 0.01886 0.03658
+ 0.50433 0.19343 0.23736 0.03280 0.00168 0.00000 0.01804 0.03439
+ 0.49279 0.18763 0.21915 0.03177 0.00177 0.00022 0.01736 0.03261
+ 0.47998 0.18131 0.20073 0.03066 0.00184 0.00045 0.01663 0.03076
+ 0.46682 0.17494 0.18361 0.02953 0.00190 0.00065 0.01590 0.02897
+ 0.45505 0.16935 0.16966 0.02854 0.00194 0.00081 0.01527 0.02746
+ 0.44336 0.16389 0.15695 0.02757 0.00196 0.00094 0.01466 0.02604
+ 0.43382 0.15949 0.14733 0.02679 0.00197 0.00104 0.01418 0.02492
+ 0.42245 0.15431 0.13668 0.02587 0.00198 0.00114 0.01362 0.02366
+ 0.41257 0.14987 0.12810 0.02509 0.00198 0.00121 0.01315 0.02260
+ 0.40367 0.14591 0.12085 0.02439 0.00197 0.00127 0.01273 0.02168
+ 0.39259 0.14104 0.11242 0.02353 0.00196 0.00134 0.01222 0.02058
+ 0.38240 0.13661 0.10520 0.02274 0.00194 0.00138 0.01176 0.01961
+ 0.37304 0.13259 0.09899 0.02203 0.00192 0.00142 0.01134 0.01874
+ 0.36387 0.12868 0.09326 0.02134 0.00190 0.00145 0.01094 0.01792
+ 0.35509 0.12497 0.08809 0.02069 0.00187 0.00147 0.01057 0.01716
+ 0.34694 0.12155 0.08354 0.02009 0.00185 0.00149 0.01022 0.01647
+ 0.33940 0.11842 0.07954 0.01954 0.00182 0.00150 0.00991 0.01585
+ 0.33197 0.11535 0.07577 0.01900 0.00180 0.00151 0.00961 0.01525
+ 0.32480 0.11241 0.07230 0.01849 0.00177 0.00152 0.00932 0.01469
+ 0.31811 0.10969 0.06920 0.01801 0.00175 0.00152 0.00905 0.01418
+ 0.31189 0.10717 0.06642 0.01757 0.00172 0.00152 0.00881 0.01371
+ 0.30572 0.10468 0.06377 0.01714 0.00169 0.00152 0.00857 0.01326
+ 0.29974 0.10229 0.06128 0.01672 0.00167 0.00151 0.00834 0.01283
+ 0.29414 0.10006 0.05903 0.01633 0.00164 0.00151 0.00813 0.01243
+ 0.28890 0.09798 0.05700 0.01597 0.00162 0.00150 0.00793 0.01207
+ 0.28369 0.09593 0.05503 0.01561 0.00160 0.00150 0.00773 0.01171
+ 0.59691 0.23909 0.38497 0.03862 0.00000 0.00000 0.02088 0.04414
+ 0.58781 0.23385 0.35816 0.03788 0.00000 0.00000 0.02039 0.04240
+ 0.57372 0.22590 0.32238 0.03669 0.00000 0.00000 0.01959 0.03980
+ 0.56306 0.22002 0.29791 0.03578 0.00022 0.00000 0.01899 0.03792
+ 0.55156 0.21380 0.27445 0.03479 0.00044 0.00000 0.01833 0.03598
+ 0.54146 0.20844 0.25598 0.03392 0.00060 0.00000 0.01776 0.03435
+ 0.53166 0.20332 0.23966 0.03308 0.00073 0.00000 0.01721 0.03283
+ 0.52117 0.19794 0.22371 0.03218 0.00085 0.00000 0.01664 0.03128
+ 0.51201 0.19330 0.21090 0.03140 0.00093 0.00000 0.01614 0.02999
+ 0.50316 0.18889 0.19938 0.03066 0.00101 0.00000 0.01567 0.02878
+ 0.49615 0.18543 0.19081 0.03007 0.00106 0.00000 0.01531 0.02786
+ 0.48126 0.17821 0.17402 0.02885 0.00114 0.00000 0.01456 0.02601
+ 0.46856 0.17218 0.16042 0.02782 0.00120 0.00017 0.01394 0.02452
+ 0.45459 0.16566 0.14672 0.02671 0.00125 0.00034 0.01328 0.02298
+ 0.44036 0.15914 0.13403 0.02560 0.00129 0.00049 0.01263 0.02151
+ 0.42776 0.15346 0.12374 0.02463 0.00131 0.00061 0.01208 0.02027
+ 0.41534 0.14796 0.11438 0.02370 0.00133 0.00071 0.01155 0.01912
+ 0.40526 0.14355 0.10731 0.02295 0.00133 0.00078 0.01114 0.01823
+ 0.39332 0.13839 0.09951 0.02207 0.00134 0.00085 0.01065 0.01722
+ 0.38302 0.13399 0.09322 0.02133 0.00133 0.00091 0.01025 0.01638
+ 0.37379 0.13009 0.08792 0.02067 0.00133 0.00095 0.00989 0.01566
+ 0.36236 0.12531 0.08177 0.01986 0.00132 0.00100 0.00946 0.01480
+ 0.35190 0.12098 0.07650 0.01913 0.00131 0.00104 0.00907 0.01404
+ 0.34235 0.11707 0.07197 0.01848 0.00129 0.00106 0.00873 0.01337
+ 0.33304 0.11329 0.06780 0.01784 0.00127 0.00109 0.00840 0.01274
+ 0.32415 0.10972 0.06403 0.01724 0.00126 0.00110 0.00808 0.01216
+ 0.31594 0.10644 0.06072 0.01669 0.00124 0.00112 0.00780 0.01163
+ 0.30838 0.10345 0.05780 0.01619 0.00122 0.00113 0.00755 0.01116
+ 0.30095 0.10053 0.05506 0.01571 0.00120 0.00113 0.00730 0.01071
+ 0.29381 0.09774 0.05252 0.01524 0.00119 0.00114 0.00706 0.01029
+ 0.28717 0.09516 0.05026 0.01481 0.00117 0.00114 0.00685 0.00990
+ 0.28101 0.09278 0.04823 0.01442 0.00115 0.00114 0.00665 0.00955
+ 0.27492 0.09045 0.04629 0.01403 0.00113 0.00114 0.00645 0.00921
+ 0.26904 0.08820 0.04448 0.01366 0.00111 0.00113 0.00627 0.00889
+ 0.26354 0.08611 0.04284 0.01332 0.00110 0.00113 0.00610 0.00860
+ 0.25841 0.08418 0.04135 0.01300 0.00108 0.00112 0.00594 0.00833
+ 0.25332 0.08226 0.03991 0.01268 0.00106 0.00112 0.00579 0.00807
+ 0.58420 0.22645 0.28636 0.03561 0.00000 0.00000 0.01771 0.03471
+ 0.57360 0.22077 0.26561 0.03476 0.00000 0.00000 0.01720 0.03317
+ 0.55733 0.21221 0.23814 0.03343 0.00000 0.00000 0.01640 0.03090
+ 0.54514 0.20592 0.21952 0.03244 0.00015 0.00000 0.01581 0.02927
+ 0.53212 0.19931 0.20178 0.03138 0.00030 0.00000 0.01518 0.02760
+ 0.52077 0.19365 0.18788 0.03045 0.00041 0.00000 0.01464 0.02621
+ 0.50984 0.18827 0.17566 0.02957 0.00050 0.00000 0.01412 0.02493
+ 0.49822 0.18264 0.16376 0.02865 0.00058 0.00000 0.01359 0.02363
+ 0.48814 0.17783 0.15423 0.02785 0.00064 0.00000 0.01314 0.02255
+ 0.47846 0.17327 0.14569 0.02709 0.00069 0.00000 0.01271 0.02155
+ 0.47084 0.16972 0.13936 0.02650 0.00072 0.00000 0.01238 0.02079
+ 0.45477 0.16234 0.12697 0.02528 0.00078 0.00000 0.01170 0.01927
+ 0.44118 0.15622 0.11698 0.02426 0.00082 0.00013 0.01115 0.01806
+ 0.42634 0.14966 0.10694 0.02317 0.00085 0.00026 0.01057 0.01682
+ 0.41137 0.14315 0.09767 0.02209 0.00087 0.00038 0.01001 0.01564
+ 0.39821 0.13751 0.09016 0.02116 0.00089 0.00046 0.00953 0.01467
+ 0.38532 0.13208 0.08334 0.02027 0.00090 0.00054 0.00908 0.01377
+ 0.37493 0.12776 0.07820 0.01956 0.00090 0.00060 0.00872 0.01307
+ 0.36269 0.12273 0.07252 0.01873 0.00090 0.00066 0.00831 0.01229
+ 0.35218 0.11846 0.06795 0.01804 0.00090 0.00070 0.00797 0.01164
+ 0.34281 0.11469 0.06410 0.01742 0.00090 0.00073 0.00767 0.01109
+ 0.33127 0.11010 0.05962 0.01668 0.00089 0.00077 0.00731 0.01043
+ 0.32077 0.10597 0.05579 0.01601 0.00088 0.00080 0.00699 0.00986
+ 0.31122 0.10224 0.05249 0.01541 0.00087 0.00082 0.00670 0.00936
+ 0.30194 0.09866 0.04946 0.01483 0.00086 0.00084 0.00643 0.00888
+ 0.29313 0.09529 0.04671 0.01429 0.00085 0.00085 0.00617 0.00845
+ 0.28502 0.09220 0.04429 0.01379 0.00083 0.00086 0.00594 0.00806
+ 0.27758 0.08940 0.04216 0.01334 0.00082 0.00087 0.00573 0.00771
+ 0.27029 0.08667 0.04016 0.01291 0.00081 0.00087 0.00553 0.00738
+ 0.26331 0.08407 0.03831 0.01249 0.00080 0.00087 0.00534 0.00707
+ 0.25683 0.08167 0.03665 0.01211 0.00078 0.00087 0.00517 0.00679
+ 0.25085 0.07947 0.03517 0.01176 0.00077 0.00087 0.00501 0.00653
+ 0.24495 0.07732 0.03375 0.01142 0.00076 0.00087 0.00485 0.00629
+ 0.23926 0.07525 0.03242 0.01109 0.00075 0.00087 0.00471 0.00605
+ 0.23396 0.07333 0.03121 0.01079 0.00073 0.00087 0.00457 0.00584
+ 0.22903 0.07155 0.03012 0.01051 0.00072 0.00086 0.00444 0.00565
+ 0.22415 0.06980 0.02906 0.01024 0.00071 0.00086 0.00432 0.00546
+ 0.56651 0.21215 0.20976 0.03262 0.00000 0.00000 0.01491 0.02666
+ 0.55458 0.20615 0.19417 0.03169 0.00000 0.00000 0.01441 0.02535
+ 0.53644 0.19717 0.17367 0.03027 0.00000 0.00000 0.01364 0.02344
+ 0.52295 0.19062 0.15989 0.02921 0.00010 0.00000 0.01308 0.02208
+ 0.50863 0.18377 0.14681 0.02810 0.00020 0.00000 0.01249 0.02070
+ 0.49625 0.17794 0.13661 0.02716 0.00028 0.00000 0.01200 0.01956
+ 0.48439 0.17243 0.12767 0.02626 0.00034 0.00000 0.01153 0.01851
+ 0.47187 0.16669 0.11898 0.02532 0.00039 0.00000 0.01104 0.01745
+ 0.46108 0.16181 0.11205 0.02452 0.00043 0.00000 0.01063 0.01658
+ 0.45076 0.15720 0.10585 0.02377 0.00046 0.00000 0.01025 0.01578
+ 0.44268 0.15363 0.10125 0.02318 0.00049 0.00000 0.00996 0.01517
+ 0.42574 0.14626 0.09228 0.02198 0.00053 0.00000 0.00937 0.01396
+ 0.41153 0.14018 0.08505 0.02099 0.00055 0.00010 0.00888 0.01301
+ 0.39613 0.13371 0.07779 0.01994 0.00057 0.00020 0.00838 0.01204
+ 0.38071 0.12734 0.07109 0.01891 0.00059 0.00030 0.00790 0.01113
+ 0.36724 0.12186 0.06567 0.01803 0.00060 0.00037 0.00749 0.01039
+ 0.35414 0.11661 0.06075 0.01719 0.00061 0.00043 0.00710 0.00970
+ 0.34363 0.11246 0.05703 0.01653 0.00061 0.00047 0.00680 0.00917
+ 0.33132 0.10764 0.05292 0.01576 0.00061 0.00052 0.00646 0.00858
+ 0.32082 0.10358 0.04962 0.01512 0.00061 0.00055 0.00617 0.00810
+ 0.31148 0.10001 0.04683 0.01456 0.00060 0.00058 0.00592 0.00769
+ 0.30004 0.09568 0.04358 0.01388 0.00060 0.00061 0.00562 0.00720
+ 0.28968 0.09180 0.04080 0.01327 0.00059 0.00063 0.00536 0.00678
+ 0.28030 0.08832 0.03840 0.01273 0.00059 0.00065 0.00513 0.00641
+ 0.27122 0.08498 0.03619 0.01221 0.00058 0.00066 0.00490 0.00607
+ 0.26264 0.08185 0.03418 0.01173 0.00057 0.00067 0.00470 0.00575
+ 0.25476 0.07900 0.03242 0.01129 0.00056 0.00068 0.00451 0.00547
+ 0.24756 0.07641 0.03086 0.01089 0.00055 0.00069 0.00434 0.00522
+ 0.24053 0.07391 0.02939 0.01050 0.00054 0.00069 0.00418 0.00498
+ 0.23382 0.07153 0.02803 0.01014 0.00054 0.00069 0.00403 0.00476
+ 0.22761 0.06934 0.02681 0.00981 0.00053 0.00069 0.00389 0.00456
+ 0.22189 0.06734 0.02572 0.00950 0.00052 0.00069 0.00376 0.00438
+ 0.21626 0.06538 0.02468 0.00921 0.00051 0.00069 0.00364 0.00421
+ 0.21085 0.06351 0.02370 0.00892 0.00050 0.00069 0.00352 0.00404
+ 0.20582 0.06177 0.02281 0.00866 0.00049 0.00068 0.00341 0.00389
+ 0.20115 0.06017 0.02200 0.00842 0.00049 0.00068 0.00331 0.00376
+ 0.19654 0.05860 0.02122 0.00818 0.00048 0.00068 0.00322 0.00362
+ 0.54452 0.19663 0.15124 0.02959 0.00000 0.00000 0.01245 0.01998
+ 0.53148 0.19045 0.13989 0.02860 0.00000 0.00000 0.01198 0.01891
+ 0.51177 0.18125 0.12505 0.02713 0.00000 0.00000 0.01127 0.01736
+ 0.49722 0.17457 0.11512 0.02605 0.00007 0.00000 0.01075 0.01626
+ 0.48188 0.16764 0.10573 0.02492 0.00014 0.00000 0.01022 0.01516
+ 0.46869 0.16175 0.09843 0.02397 0.00019 0.00000 0.00977 0.01425
+ 0.45612 0.15622 0.09204 0.02308 0.00023 0.00000 0.00935 0.01342
+ 0.44293 0.15050 0.08585 0.02215 0.00026 0.00000 0.00892 0.01259
+ 0.43162 0.14565 0.08091 0.02136 0.00029 0.00000 0.00856 0.01190
+ 0.42086 0.14109 0.07649 0.02063 0.00031 0.00000 0.00822 0.01128
+ 0.41246 0.13757 0.07322 0.02006 0.00033 0.00000 0.00797 0.01081
+ 0.39497 0.13034 0.06683 0.01891 0.00035 0.00000 0.00745 0.00988
+ 0.38040 0.12443 0.06167 0.01796 0.00037 0.00008 0.00704 0.00916
+ 0.36472 0.11817 0.05649 0.01697 0.00039 0.00017 0.00661 0.00842
+ 0.34913 0.11204 0.05171 0.01601 0.00040 0.00024 0.00619 0.00774
+ 0.33560 0.10682 0.04782 0.01519 0.00040 0.00030 0.00585 0.00718
+ 0.32252 0.10183 0.04429 0.01442 0.00041 0.00035 0.00553 0.00668
+ 0.31208 0.09791 0.04162 0.01381 0.00041 0.00039 0.00527 0.00629
+ 0.29992 0.09338 0.03866 0.01311 0.00041 0.00042 0.00499 0.00586
+ 0.28958 0.08959 0.03628 0.01253 0.00041 0.00045 0.00475 0.00551
+ 0.28044 0.08626 0.03426 0.01203 0.00041 0.00047 0.00455 0.00521
+ 0.26928 0.08224 0.03191 0.01142 0.00040 0.00050 0.00431 0.00486
+ 0.25922 0.07866 0.02988 0.01088 0.00040 0.00051 0.00409 0.00456
+ 0.25015 0.07546 0.02814 0.01040 0.00040 0.00053 0.00390 0.00430
+ 0.24141 0.07240 0.02652 0.00994 0.00039 0.00054 0.00372 0.00406
+ 0.23318 0.06954 0.02506 0.00951 0.00039 0.00055 0.00355 0.00383
+ 0.22565 0.06695 0.02376 0.00913 0.00038 0.00055 0.00341 0.00364
+ 0.21878 0.06461 0.02262 0.00878 0.00037 0.00056 0.00327 0.00346
+ 0.21211 0.06234 0.02154 0.00845 0.00037 0.00056 0.00314 0.00329
+ 0.20574 0.06020 0.02054 0.00814 0.00036 0.00056 0.00302 0.00314
+ 0.19988 0.05824 0.01964 0.00785 0.00036 0.00056 0.00291 0.00300
+ 0.19449 0.05644 0.01884 0.00759 0.00035 0.00056 0.00281 0.00288
+ 0.18920 0.05469 0.01807 0.00733 0.00035 0.00056 0.00271 0.00276
+ 0.18413 0.05302 0.01734 0.00709 0.00034 0.00056 0.00262 0.00264
+ 0.17942 0.05148 0.01668 0.00687 0.00033 0.00055 0.00254 0.00254
+ 0.17507 0.05006 0.01609 0.00666 0.00033 0.00055 0.00246 0.00245
+ 0.17077 0.04867 0.01551 0.00646 0.00032 0.00055 0.00238 0.00236
+ 0.51892 0.18032 0.10730 0.02649 0.00000 0.00000 0.01031 0.01459
+ 0.50499 0.17409 0.09931 0.02549 0.00000 0.00000 0.00987 0.01374
+ 0.48405 0.16485 0.08891 0.02401 0.00000 0.00000 0.00923 0.01253
+ 0.46869 0.15818 0.08197 0.02293 0.00005 0.00000 0.00876 0.01167
+ 0.45259 0.15129 0.07542 0.02183 0.00009 0.00000 0.00829 0.01082
+ 0.43881 0.14547 0.07033 0.02089 0.00013 0.00000 0.00789 0.01012
+ 0.42576 0.14003 0.06588 0.02002 0.00015 0.00000 0.00752 0.00948
+ 0.41212 0.13442 0.06157 0.01913 0.00018 0.00000 0.00715 0.00885
+ 0.40049 0.12969 0.05812 0.01838 0.00020 0.00000 0.00684 0.00833
+ 0.38947 0.12526 0.05504 0.01768 0.00021 0.00000 0.00655 0.00786
+ 0.38091 0.12185 0.05275 0.01714 0.00022 0.00000 0.00633 0.00751
+ 0.36316 0.11489 0.04827 0.01605 0.00024 0.00000 0.00589 0.00682
+ 0.34848 0.10923 0.04464 0.01517 0.00025 0.00007 0.00553 0.00628
+ 0.33279 0.10328 0.04099 0.01425 0.00026 0.00014 0.00517 0.00575
+ 0.31728 0.09750 0.03759 0.01337 0.00027 0.00020 0.00483 0.00525
+ 0.30391 0.09259 0.03483 0.01263 0.00027 0.00025 0.00454 0.00485
+ 0.29105 0.08794 0.03231 0.01193 0.00028 0.00029 0.00427 0.00448
+ 0.28084 0.08429 0.03040 0.01138 0.00028 0.00032 0.00406 0.00421
+ 0.26900 0.08011 0.02828 0.01076 0.00028 0.00035 0.00383 0.00390
+ 0.25899 0.07662 0.02656 0.01024 0.00028 0.00038 0.00364 0.00366
+ 0.25017 0.07357 0.02510 0.00980 0.00028 0.00040 0.00347 0.00345
+ 0.23946 0.06990 0.02339 0.00926 0.00027 0.00042 0.00328 0.00321
+ 0.22983 0.06665 0.02192 0.00879 0.00027 0.00043 0.00310 0.00300
+ 0.22119 0.06375 0.02064 0.00837 0.00027 0.00044 0.00295 0.00282
+ 0.21290 0.06100 0.01946 0.00798 0.00026 0.00045 0.00281 0.00265
+ 0.20511 0.05843 0.01839 0.00761 0.00026 0.00045 0.00267 0.00250
+ 0.19802 0.05611 0.01743 0.00728 0.00026 0.00046 0.00255 0.00236
+ 0.19157 0.05402 0.01659 0.00699 0.00025 0.00046 0.00245 0.00224
+ 0.18531 0.05200 0.01580 0.00670 0.00025 0.00046 0.00235 0.00213
+ 0.17937 0.05010 0.01506 0.00644 0.00025 0.00046 0.00225 0.00203
+ 0.17391 0.04836 0.01439 0.00619 0.00024 0.00046 0.00216 0.00193
+ 0.16890 0.04678 0.01380 0.00597 0.00024 0.00046 0.00209 0.00185
+ 0.16400 0.04524 0.01322 0.00576 0.00023 0.00046 0.00201 0.00177
+ 0.15931 0.04377 0.01269 0.00556 0.00023 0.00046 0.00194 0.00169
+ 0.15497 0.04242 0.01220 0.00537 0.00023 0.00046 0.00187 0.00163
+ 0.15096 0.04118 0.01175 0.00520 0.00022 0.00045 0.00181 0.00156
+ 0.14702 0.03996 0.01132 0.00503 0.00022 0.00045 0.00175 0.00150
+ 0.49034 0.16360 0.07487 0.02337 0.00000 0.00000 0.00846 0.01035
+ 0.47575 0.15743 0.06946 0.02238 0.00000 0.00000 0.00806 0.00971
+ 0.45393 0.14833 0.06245 0.02093 0.00000 0.00000 0.00749 0.00879
+ 0.43802 0.14179 0.05776 0.01990 0.00003 0.00000 0.00708 0.00815
+ 0.42141 0.13506 0.05333 0.01883 0.00006 0.00000 0.00667 0.00751
+ 0.40729 0.12941 0.04989 0.01794 0.00008 0.00000 0.00632 0.00699
+ 0.39396 0.12415 0.04687 0.01712 0.00010 0.00000 0.00601 0.00652
+ 0.38010 0.11874 0.04394 0.01628 0.00012 0.00000 0.00568 0.00605
+ 0.36833 0.11421 0.04159 0.01557 0.00013 0.00000 0.00542 0.00568
+ 0.35724 0.10998 0.03947 0.01492 0.00014 0.00000 0.00517 0.00533
+ 0.34864 0.10674 0.03790 0.01443 0.00015 0.00000 0.00498 0.00508
+ 0.33093 0.10015 0.03481 0.01342 0.00016 0.00000 0.00461 0.00458
+ 0.31636 0.09482 0.03229 0.01262 0.00017 0.00006 0.00432 0.00420
+ 0.30089 0.08926 0.02973 0.01179 0.00018 0.00012 0.00401 0.00382
+ 0.28570 0.08389 0.02734 0.01100 0.00018 0.00018 0.00373 0.00347
+ 0.27268 0.07935 0.02539 0.01033 0.00018 0.00022 0.00349 0.00319
+ 0.26023 0.07508 0.02359 0.00971 0.00019 0.00025 0.00327 0.00293
+ 0.25039 0.07174 0.02222 0.00923 0.00019 0.00028 0.00311 0.00274
+ 0.23903 0.06794 0.02070 0.00869 0.00019 0.00030 0.00292 0.00254
+ 0.22947 0.06477 0.01945 0.00824 0.00019 0.00032 0.00276 0.00237
+ 0.22109 0.06202 0.01840 0.00786 0.00019 0.00034 0.00263 0.00223
+ 0.21094 0.05873 0.01715 0.00740 0.00019 0.00035 0.00247 0.00206
+ 0.20186 0.05582 0.01608 0.00699 0.00018 0.00037 0.00233 0.00192
+ 0.19374 0.05324 0.01515 0.00664 0.00018 0.00037 0.00221 0.00180
+ 0.18599 0.05079 0.01428 0.00630 0.00018 0.00038 0.00210 0.00169
+ 0.17872 0.04852 0.01349 0.00599 0.00018 0.00039 0.00199 0.00159
+ 0.17212 0.04648 0.01278 0.00572 0.00018 0.00039 0.00190 0.00150
+ 0.16615 0.04464 0.01216 0.00547 0.00017 0.00039 0.00182 0.00142
+ 0.16037 0.04287 0.01157 0.00523 0.00017 0.00039 0.00174 0.00135
+ 0.15489 0.04121 0.01102 0.00501 0.00017 0.00039 0.00166 0.00128
+ 0.14987 0.03970 0.01053 0.00481 0.00016 0.00039 0.00160 0.00122
+ 0.14528 0.03832 0.01009 0.00463 0.00016 0.00039 0.00154 0.00116
+ 0.14080 0.03698 0.00966 0.00445 0.00016 0.00039 0.00148 0.00111
+ 0.13652 0.03572 0.00926 0.00428 0.00016 0.00038 0.00142 0.00106
+ 0.13257 0.03455 0.00890 0.00413 0.00015 0.00038 0.00137 0.00102
+ 0.12893 0.03348 0.00857 0.00399 0.00015 0.00038 0.00132 0.00098
+ 0.12535 0.03244 0.00825 0.00386 0.00015 0.00037 0.00128 0.00094
+ 0.45943 0.14682 0.05133 0.02027 0.00000 0.00000 0.00686 0.00712
+ 0.44440 0.14082 0.04785 0.01933 0.00000 0.00000 0.00652 0.00665
+ 0.42205 0.13201 0.04333 0.01796 0.00000 0.00000 0.00602 0.00598
+ 0.40583 0.12571 0.04029 0.01698 0.00002 0.00000 0.00567 0.00552
+ 0.38899 0.11926 0.03741 0.01598 0.00004 0.00000 0.00531 0.00506
+ 0.37473 0.11386 0.03515 0.01516 0.00006 0.00000 0.00502 0.00468
+ 0.36134 0.10885 0.03316 0.01440 0.00007 0.00000 0.00475 0.00435
+ 0.34747 0.10373 0.03122 0.01362 0.00008 0.00000 0.00448 0.00402
+ 0.33575 0.09945 0.02965 0.01298 0.00009 0.00000 0.00425 0.00375
+ 0.32474 0.09548 0.02823 0.01239 0.00009 0.00000 0.00405 0.00351
+ 0.31625 0.09245 0.02717 0.01194 0.00010 0.00000 0.00389 0.00334
+ 0.29882 0.08631 0.02507 0.01104 0.00011 0.00000 0.00358 0.00299
+ 0.28458 0.08138 0.02333 0.01032 0.00011 0.00005 0.00334 0.00273
+ 0.26955 0.07625 0.02155 0.00959 0.00012 0.00011 0.00309 0.00246
+ 0.25488 0.07134 0.01988 0.00889 0.00012 0.00015 0.00285 0.00223
+ 0.24237 0.06721 0.01850 0.00831 0.00012 0.00019 0.00266 0.00204
+ 0.23048 0.06335 0.01722 0.00778 0.00013 0.00022 0.00249 0.00187
+ 0.22113 0.06035 0.01624 0.00736 0.00013 0.00024 0.00235 0.00174
+ 0.21039 0.05694 0.01514 0.00690 0.00013 0.00026 0.00220 0.00161
+ 0.20138 0.05411 0.01424 0.00652 0.00013 0.00028 0.00208 0.00150
+ 0.19351 0.05167 0.01347 0.00619 0.00013 0.00029 0.00197 0.00140
+ 0.18403 0.04876 0.01257 0.00581 0.00013 0.00031 0.00185 0.00130
+ 0.17558 0.04619 0.01178 0.00547 0.00013 0.00032 0.00174 0.00120
+ 0.16806 0.04393 0.01110 0.00517 0.00012 0.00032 0.00164 0.00113
+ 0.16089 0.04179 0.01046 0.00489 0.00012 0.00033 0.00155 0.00105
+ 0.15421 0.03981 0.00987 0.00464 0.00012 0.00033 0.00147 0.00099
+ 0.14816 0.03804 0.00935 0.00441 0.00012 0.00033 0.00140 0.00093
+ 0.14269 0.03644 0.00889 0.00421 0.00012 0.00033 0.00134 0.00088
+ 0.13742 0.03492 0.00845 0.00401 0.00012 0.00033 0.00128 0.00084
+ 0.13244 0.03349 0.00805 0.00383 0.00011 0.00033 0.00122 0.00079
+ 0.12788 0.03219 0.00768 0.00367 0.00011 0.00033 0.00117 0.00075
+ 0.12373 0.03101 0.00735 0.00352 0.00011 0.00033 0.00112 0.00072
+ 0.11969 0.02987 0.00703 0.00338 0.00011 0.00033 0.00107 0.00069
+ 0.11583 0.02879 0.00674 0.00325 0.00011 0.00032 0.00103 0.00065
+ 0.11228 0.02780 0.00647 0.00313 0.00010 0.00032 0.00099 0.00063
+ 0.10902 0.02689 0.00622 0.00301 0.00010 0.00032 0.00096 0.00060
+ 0.10582 0.02601 0.00598 0.00291 0.00010 0.00032 0.00092 0.00058
+ 0.42675 0.13028 0.03459 0.01726 0.00000 0.00000 0.00551 0.00474
+ 0.41152 0.12455 0.03249 0.01639 0.00000 0.00000 0.00522 0.00441
+ 0.38897 0.11616 0.02975 0.01512 0.00000 0.00000 0.00479 0.00394
+ 0.37269 0.11018 0.02787 0.01423 0.00001 0.00000 0.00449 0.00362
+ 0.35587 0.10409 0.02608 0.01332 0.00003 0.00000 0.00419 0.00330
+ 0.34169 0.09902 0.02466 0.01257 0.00004 0.00000 0.00394 0.00304
+ 0.32842 0.09433 0.02339 0.01189 0.00005 0.00000 0.00372 0.00282
+ 0.31475 0.08956 0.02213 0.01119 0.00005 0.00000 0.00349 0.00259
+ 0.30323 0.08559 0.02111 0.01062 0.00006 0.00000 0.00330 0.00241
+ 0.29247 0.08192 0.02018 0.01010 0.00006 0.00000 0.00313 0.00225
+ 0.28419 0.07912 0.01947 0.00970 0.00007 0.00000 0.00300 0.00213
+ 0.26728 0.07349 0.01806 0.00891 0.00007 0.00000 0.00275 0.00190
+ 0.25355 0.06899 0.01686 0.00829 0.00008 0.00005 0.00255 0.00172
+ 0.23914 0.06434 0.01563 0.00765 0.00008 0.00010 0.00235 0.00155
+ 0.22516 0.05992 0.01446 0.00706 0.00008 0.00014 0.00216 0.00139
+ 0.21332 0.05623 0.01348 0.00656 0.00008 0.00017 0.00201 0.00127
+ 0.20212 0.05278 0.01257 0.00611 0.00009 0.00020 0.00187 0.00116
+ 0.19335 0.05012 0.01187 0.00576 0.00009 0.00021 0.00176 0.00108
+ 0.18332 0.04712 0.01107 0.00538 0.00009 0.00023 0.00164 0.00099
+ 0.17495 0.04464 0.01042 0.00506 0.00009 0.00025 0.00154 0.00092
+ 0.16767 0.04250 0.00986 0.00479 0.00009 0.00026 0.00146 0.00086
+ 0.15892 0.03996 0.00919 0.00447 0.00009 0.00027 0.00137 0.00080
+ 0.15117 0.03774 0.00861 0.00419 0.00009 0.00028 0.00128 0.00074
+ 0.14428 0.03578 0.00811 0.00395 0.00008 0.00028 0.00121 0.00069
+ 0.13775 0.03394 0.00764 0.00373 0.00008 0.00028 0.00114 0.00065
+ 0.13168 0.03224 0.00720 0.00352 0.00008 0.00029 0.00108 0.00061
+ 0.12620 0.03073 0.00682 0.00334 0.00008 0.00029 0.00102 0.00057
+ 0.12127 0.02937 0.00648 0.00318 0.00008 0.00029 0.00097 0.00054
+ 0.11652 0.02807 0.00615 0.00302 0.00008 0.00029 0.00093 0.00051
+ 0.11205 0.02686 0.00585 0.00288 0.00008 0.00029 0.00088 0.00048
+ 0.10797 0.02576 0.00558 0.00275 0.00008 0.00028 0.00084 0.00046
+ 0.10427 0.02477 0.00533 0.00263 0.00008 0.00028 0.00081 0.00044
+ 0.10066 0.02381 0.00510 0.00252 0.00007 0.00028 0.00077 0.00042
+ 0.09724 0.02290 0.00488 0.00242 0.00007 0.00028 0.00074 0.00040
+ 0.09409 0.02207 0.00468 0.00232 0.00007 0.00027 0.00071 0.00038
+ 0.09120 0.02131 0.00449 0.00223 0.00007 0.00027 0.00069 0.00037
+ 0.08837 0.02058 0.00432 0.00215 0.00007 0.00027 0.00066 0.00035
+ 0.39287 0.11426 0.02289 0.01442 0.00000 0.00000 0.00437 0.00305
+ 0.37768 0.10886 0.02175 0.01363 0.00000 0.00000 0.00412 0.00282
+ 0.35526 0.10100 0.02022 0.01249 0.00000 0.00000 0.00377 0.00251
+ 0.33916 0.09543 0.01914 0.01169 0.00001 0.00000 0.00352 0.00229
+ 0.32258 0.08977 0.01808 0.01089 0.00002 0.00000 0.00327 0.00208
+ 0.30867 0.08508 0.01723 0.01023 0.00002 0.00000 0.00306 0.00191
+ 0.29571 0.08076 0.01645 0.00963 0.00003 0.00000 0.00287 0.00176
+ 0.28241 0.07638 0.01567 0.00902 0.00004 0.00000 0.00269 0.00162
+ 0.27126 0.07275 0.01501 0.00852 0.00004 0.00000 0.00253 0.00150
+ 0.26087 0.06941 0.01441 0.00807 0.00004 0.00000 0.00240 0.00139
+ 0.25291 0.06687 0.01395 0.00773 0.00004 0.00000 0.00229 0.00132
+ 0.23673 0.06178 0.01300 0.00705 0.00005 0.00000 0.00209 0.00117
+ 0.22367 0.05775 0.01219 0.00652 0.00005 0.00004 0.00193 0.00106
+ 0.21004 0.05360 0.01133 0.00599 0.00005 0.00009 0.00177 0.00095
+ 0.19690 0.04968 0.01051 0.00549 0.00006 0.00012 0.00162 0.00085
+ 0.18583 0.04642 0.00982 0.00508 0.00006 0.00015 0.00150 0.00077
+ 0.17542 0.04341 0.00916 0.00470 0.00006 0.00018 0.00139 0.00071
+ 0.16730 0.04109 0.00865 0.00442 0.00006 0.00019 0.00130 0.00066
+ 0.15806 0.03847 0.00808 0.00410 0.00006 0.00021 0.00121 0.00060
+ 0.15039 0.03633 0.00760 0.00385 0.00006 0.00022 0.00113 0.00056
+ 0.14373 0.03449 0.00719 0.00363 0.00006 0.00023 0.00107 0.00052
+ 0.13577 0.03232 0.00670 0.00337 0.00006 0.00024 0.00100 0.00048
+ 0.12875 0.03041 0.00627 0.00315 0.00006 0.00024 0.00093 0.00045
+ 0.12253 0.02875 0.00590 0.00296 0.00006 0.00025 0.00088 0.00042
+ 0.11666 0.02719 0.00555 0.00278 0.00006 0.00025 0.00082 0.00039
+ 0.11122 0.02576 0.00523 0.00262 0.00006 0.00025 0.00078 0.00037
+ 0.10632 0.02448 0.00494 0.00248 0.00006 0.00025 0.00074 0.00034
+ 0.10193 0.02334 0.00469 0.00235 0.00006 0.00025 0.00070 0.00033
+ 0.09771 0.02226 0.00445 0.00223 0.00005 0.00025 0.00066 0.00031
+ 0.09375 0.02125 0.00422 0.00212 0.00005 0.00025 0.00063 0.00029
+ 0.09015 0.02033 0.00402 0.00202 0.00005 0.00024 0.00060 0.00028
+ 0.08688 0.01951 0.00384 0.00193 0.00005 0.00024 0.00058 0.00027
+ 0.08372 0.01871 0.00367 0.00184 0.00005 0.00024 0.00055 0.00025
+ 0.08071 0.01796 0.00350 0.00176 0.00005 0.00024 0.00053 0.00024
+ 0.07796 0.01728 0.00335 0.00169 0.00005 0.00023 0.00051 0.00023
+ 0.07543 0.01666 0.00322 0.00162 0.00005 0.00023 0.00049 0.00022
+ 0.07297 0.01605 0.00309 0.00156 0.00005 0.00023 0.00047 0.00021
+ 0.35835 0.09897 0.01487 0.01179 0.00000 0.00000 0.00342 0.00189
+ 0.34339 0.09398 0.01435 0.01110 0.00000 0.00000 0.00322 0.00174
+ 0.32142 0.08673 0.01362 0.01010 0.00000 0.00000 0.00292 0.00154
+ 0.30570 0.08162 0.01307 0.00941 0.00001 0.00000 0.00272 0.00141
+ 0.28960 0.07645 0.01249 0.00872 0.00001 0.00000 0.00251 0.00127
+ 0.27614 0.07218 0.01201 0.00815 0.00002 0.00000 0.00234 0.00117
+ 0.26365 0.06826 0.01155 0.00763 0.00002 0.00000 0.00219 0.00107
+ 0.25089 0.06430 0.01108 0.00712 0.00002 0.00000 0.00204 0.00098
+ 0.24024 0.06104 0.01067 0.00670 0.00003 0.00000 0.00192 0.00091
+ 0.23034 0.05804 0.01028 0.00631 0.00003 0.00000 0.00181 0.00084
+ 0.22279 0.05578 0.00998 0.00603 0.00003 0.00000 0.00173 0.00079
+ 0.20751 0.05126 0.00935 0.00546 0.00003 0.00000 0.00156 0.00070
+ 0.19525 0.04769 0.00880 0.00502 0.00004 0.00004 0.00144 0.00063
+ 0.18252 0.04405 0.00821 0.00458 0.00004 0.00008 0.00131 0.00057
+ 0.17033 0.04062 0.00762 0.00418 0.00004 0.00011 0.00119 0.00051
+ 0.16013 0.03780 0.00713 0.00384 0.00004 0.00014 0.00110 0.00046
+ 0.15057 0.03520 0.00666 0.00354 0.00004 0.00016 0.00101 0.00042
+ 0.14316 0.03320 0.00629 0.00332 0.00004 0.00017 0.00095 0.00039
+ 0.13476 0.03097 0.00587 0.00306 0.00004 0.00018 0.00088 0.00036
+ 0.12782 0.02915 0.00552 0.00286 0.00004 0.00019 0.00082 0.00034
+ 0.12182 0.02759 0.00521 0.00269 0.00004 0.00020 0.00077 0.00031
+ 0.11468 0.02575 0.00485 0.00249 0.00004 0.00021 0.00072 0.00029
+ 0.10839 0.02416 0.00454 0.00232 0.00004 0.00021 0.00067 0.00027
+ 0.10286 0.02277 0.00426 0.00217 0.00004 0.00021 0.00063 0.00025
+ 0.09765 0.02147 0.00400 0.00203 0.00004 0.00022 0.00059 0.00024
+ 0.09284 0.02028 0.00377 0.00191 0.00004 0.00022 0.00055 0.00022
+ 0.08853 0.01922 0.00355 0.00180 0.00004 0.00022 0.00052 0.00021
+ 0.08466 0.01828 0.00337 0.00170 0.00004 0.00022 0.00049 0.00020
+ 0.08097 0.01739 0.00319 0.00161 0.00004 0.00021 0.00047 0.00019
+ 0.07751 0.01656 0.00302 0.00152 0.00004 0.00021 0.00045 0.00018
+ 0.07437 0.01581 0.00287 0.00145 0.00004 0.00021 0.00042 0.00017
+ 0.07153 0.01513 0.00274 0.00138 0.00004 0.00021 0.00040 0.00016
+ 0.06879 0.01449 0.00261 0.00131 0.00004 0.00021 0.00039 0.00016
+ 0.06619 0.01388 0.00249 0.00125 0.00004 0.00020 0.00037 0.00015
+ 0.06381 0.01332 0.00238 0.00120 0.00003 0.00020 0.00035 0.00014
+ 0.06164 0.01282 0.00228 0.00115 0.00003 0.00020 0.00034 0.00014
+ 0.05952 0.01233 0.00219 0.00110 0.00003 0.00019 0.00033 0.00013
+ 0.32365 0.08459 0.00950 0.00942 0.00000 0.00000 0.00264 0.00113
+ 0.30912 0.08005 0.00937 0.00883 0.00000 0.00000 0.00247 0.00104
+ 0.28788 0.07348 0.00913 0.00799 0.00000 0.00000 0.00223 0.00092
+ 0.27275 0.06886 0.00890 0.00740 0.00000 0.00000 0.00207 0.00084
+ 0.25732 0.06421 0.00862 0.00682 0.00001 0.00000 0.00190 0.00076
+ 0.24447 0.06039 0.00837 0.00634 0.00001 0.00000 0.00177 0.00069
+ 0.23260 0.05689 0.00812 0.00591 0.00001 0.00000 0.00165 0.00064
+ 0.22052 0.05338 0.00784 0.00549 0.00002 0.00000 0.00153 0.00058
+ 0.21047 0.05049 0.00759 0.00514 0.00002 0.00000 0.00143 0.00054
+ 0.20118 0.04785 0.00734 0.00483 0.00002 0.00000 0.00135 0.00050
+ 0.19410 0.04586 0.00715 0.00459 0.00002 0.00000 0.00128 0.00047
+ 0.17986 0.04191 0.00673 0.00413 0.00002 0.00000 0.00115 0.00042
+ 0.16851 0.03881 0.00635 0.00378 0.00002 0.00004 0.00105 0.00038
+ 0.15679 0.03566 0.00593 0.00343 0.00003 0.00007 0.00096 0.00034
+ 0.14564 0.03272 0.00552 0.00310 0.00003 0.00010 0.00087 0.00031
+ 0.13635 0.03031 0.00516 0.00284 0.00003 0.00012 0.00080 0.00028
+ 0.12771 0.02810 0.00482 0.00261 0.00003 0.00014 0.00073 0.00025
+ 0.12103 0.02642 0.00455 0.00243 0.00003 0.00015 0.00068 0.00024
+ 0.11350 0.02455 0.00424 0.00223 0.00003 0.00016 0.00063 0.00022
+ 0.10731 0.02302 0.00398 0.00208 0.00003 0.00017 0.00059 0.00020
+ 0.10198 0.02173 0.00376 0.00195 0.00003 0.00018 0.00055 0.00019
+ 0.09565 0.02020 0.00349 0.00179 0.00003 0.00018 0.00051 0.00018
+ 0.09012 0.01889 0.00326 0.00166 0.00003 0.00019 0.00047 0.00017
+ 0.08526 0.01774 0.00306 0.00155 0.00003 0.00019 0.00044 0.00015
+ 0.08070 0.01668 0.00286 0.00145 0.00003 0.00019 0.00041 0.00015
+ 0.07651 0.01570 0.00269 0.00135 0.00003 0.00019 0.00039 0.00014
+ 0.07276 0.01484 0.00253 0.00127 0.00003 0.00019 0.00037 0.00013
+ 0.06942 0.01408 0.00239 0.00120 0.00003 0.00019 0.00035 0.00012
+ 0.06623 0.01336 0.00226 0.00113 0.00003 0.00018 0.00033 0.00012
+ 0.06325 0.01269 0.00214 0.00107 0.00003 0.00018 0.00031 0.00011
+ 0.06056 0.01209 0.00203 0.00101 0.00003 0.00018 0.00029 0.00011
+ 0.05812 0.01155 0.00194 0.00096 0.00003 0.00018 0.00028 0.00010
+ 0.05578 0.01103 0.00184 0.00092 0.00003 0.00018 0.00027 0.00010
+ 0.05356 0.01055 0.00175 0.00087 0.00003 0.00017 0.00026 0.00009
+ 0.05154 0.01011 0.00167 0.00083 0.00003 0.00017 0.00024 0.00009
+ 0.04969 0.00970 0.00160 0.00080 0.00002 0.00017 0.00023 0.00009
+ 0.04790 0.00932 0.00153 0.00076 0.00002 0.00017 0.00022 0.00008
+ 0.28925 0.07128 0.00597 0.00735 0.00000 0.00000 0.00200 0.00066
+ 0.27534 0.06721 0.00605 0.00686 0.00000 0.00000 0.00187 0.00061
+ 0.25509 0.06135 0.00610 0.00616 0.00000 0.00000 0.00168 0.00054
+ 0.24073 0.05726 0.00605 0.00568 0.00000 0.00000 0.00155 0.00049
+ 0.22614 0.05315 0.00595 0.00521 0.00001 0.00000 0.00142 0.00045
+ 0.21404 0.04978 0.00584 0.00482 0.00001 0.00000 0.00131 0.00041
+ 0.20291 0.04671 0.00570 0.00447 0.00001 0.00000 0.00122 0.00038
+ 0.19162 0.04365 0.00555 0.00413 0.00001 0.00000 0.00113 0.00035
+ 0.18227 0.04113 0.00539 0.00385 0.00001 0.00000 0.00105 0.00032
+ 0.17366 0.03884 0.00524 0.00360 0.00001 0.00000 0.00098 0.00030
+ 0.16713 0.03712 0.00511 0.00341 0.00001 0.00000 0.00093 0.00028
+ 0.15404 0.03373 0.00483 0.00305 0.00002 0.00000 0.00084 0.00025
+ 0.14367 0.03108 0.00456 0.00277 0.00002 0.00003 0.00076 0.00023
+ 0.13303 0.02841 0.00427 0.00250 0.00002 0.00007 0.00069 0.00021
+ 0.12297 0.02593 0.00397 0.00225 0.00002 0.00009 0.00062 0.00019
+ 0.11464 0.02391 0.00371 0.00205 0.00002 0.00011 0.00057 0.00017
+ 0.10692 0.02207 0.00346 0.00187 0.00002 0.00013 0.00052 0.00016
+ 0.10100 0.02068 0.00326 0.00173 0.00002 0.00014 0.00048 0.00015
+ 0.09435 0.01913 0.00304 0.00159 0.00002 0.00015 0.00044 0.00014
+ 0.08890 0.01788 0.00285 0.00147 0.00002 0.00015 0.00041 0.00013
+ 0.08423 0.01682 0.00268 0.00137 0.00002 0.00016 0.00038 0.00012
+ 0.07872 0.01558 0.00249 0.00126 0.00002 0.00016 0.00035 0.00011
+ 0.07391 0.01451 0.00232 0.00116 0.00002 0.00016 0.00033 0.00011
+ 0.06971 0.01358 0.00217 0.00108 0.00002 0.00016 0.00031 0.00010
+ 0.06578 0.01273 0.00203 0.00101 0.00002 0.00016 0.00029 0.00009
+ 0.06218 0.01195 0.00190 0.00094 0.00002 0.00016 0.00027 0.00009
+ 0.05897 0.01126 0.00178 0.00088 0.00002 0.00016 0.00025 0.00008
+ 0.05612 0.01066 0.00168 0.00083 0.00002 0.00016 0.00024 0.00008
+ 0.05341 0.01008 0.00159 0.00078 0.00002 0.00016 0.00022 0.00008
+ 0.05088 0.00956 0.00150 0.00073 0.00002 0.00016 0.00021 0.00007
+ 0.04860 0.00908 0.00142 0.00069 0.00002 0.00015 0.00020 0.00007
+ 0.04655 0.00866 0.00135 0.00066 0.00002 0.00015 0.00019 0.00007
+ 0.04458 0.00825 0.00128 0.00062 0.00002 0.00015 0.00018 0.00007
+ 0.04272 0.00787 0.00122 0.00059 0.00002 0.00015 0.00017 0.00006
+ 0.04102 0.00752 0.00116 0.00056 0.00002 0.00014 0.00017 0.00006
+ 0.03948 0.00721 0.00111 0.00054 0.00002 0.00014 0.00016 0.00006
+ 0.03799 0.00691 0.00106 0.00052 0.00002 0.00014 0.00015 0.00006
+ 0.25559 0.05913 0.00369 0.00558 0.00000 0.00000 0.00149 0.00039
+ 0.24246 0.05556 0.00388 0.00519 0.00000 0.00000 0.00139 0.00036
+ 0.22342 0.05043 0.00406 0.00463 0.00000 0.00000 0.00124 0.00032
+ 0.20998 0.04686 0.00411 0.00425 0.00000 0.00000 0.00114 0.00030
+ 0.19637 0.04329 0.00411 0.00387 0.00000 0.00000 0.00104 0.00027
+ 0.18514 0.04038 0.00407 0.00357 0.00000 0.00000 0.00096 0.00025
+ 0.17485 0.03774 0.00401 0.00329 0.00001 0.00000 0.00089 0.00023
+ 0.16445 0.03510 0.00392 0.00302 0.00001 0.00000 0.00081 0.00021
+ 0.15588 0.03295 0.00382 0.00281 0.00001 0.00000 0.00076 0.00020
+ 0.14802 0.03101 0.00372 0.00261 0.00001 0.00000 0.00071 0.00019
+ 0.14207 0.02955 0.00364 0.00247 0.00001 0.00000 0.00067 0.00018
+ 0.13021 0.02668 0.00344 0.00219 0.00001 0.00000 0.00059 0.00016
+ 0.12087 0.02446 0.00326 0.00198 0.00001 0.00003 0.00054 0.00015
+ 0.11135 0.02224 0.00305 0.00177 0.00001 0.00006 0.00048 0.00013
+ 0.10240 0.02018 0.00283 0.00158 0.00001 0.00008 0.00043 0.00012
+ 0.09504 0.01852 0.00264 0.00144 0.00001 0.00010 0.00039 0.00011
+ 0.08826 0.01702 0.00246 0.00130 0.00001 0.00011 0.00036 0.00010
+ 0.08309 0.01588 0.00232 0.00120 0.00001 0.00012 0.00033 0.00010
+ 0.07730 0.01463 0.00215 0.00110 0.00001 0.00013 0.00030 0.00009
+ 0.07258 0.01362 0.00201 0.00101 0.00001 0.00013 0.00028 0.00009
+ 0.06855 0.01277 0.00189 0.00094 0.00001 0.00014 0.00026 0.00008
+ 0.06382 0.01178 0.00175 0.00086 0.00001 0.00014 0.00024 0.00008
+ 0.05971 0.01093 0.00162 0.00079 0.00001 0.00014 0.00022 0.00007
+ 0.05614 0.01020 0.00151 0.00073 0.00001 0.00014 0.00021 0.00007
+ 0.05280 0.00953 0.00141 0.00068 0.00001 0.00014 0.00019 0.00006
+ 0.04976 0.00892 0.00132 0.00063 0.00001 0.00014 0.00018 0.00006
+ 0.04706 0.00838 0.00124 0.00059 0.00001 0.00014 0.00017 0.00006
+ 0.04467 0.00791 0.00116 0.00055 0.00001 0.00014 0.00016 0.00006
+ 0.04240 0.00746 0.00110 0.00052 0.00001 0.00013 0.00015 0.00005
+ 0.04029 0.00705 0.00103 0.00049 0.00001 0.00013 0.00014 0.00005
+ 0.03840 0.00668 0.00098 0.00046 0.00001 0.00013 0.00014 0.00005
+ 0.03669 0.00636 0.00093 0.00044 0.00001 0.00013 0.00013 0.00005
+ 0.03506 0.00604 0.00088 0.00041 0.00001 0.00013 0.00012 0.00005
+ 0.03352 0.00575 0.00083 0.00039 0.00001 0.00012 0.00012 0.00004
+ 0.03213 0.00549 0.00079 0.00037 0.00001 0.00012 0.00011 0.00004
+ 0.03086 0.00525 0.00076 0.00036 0.00001 0.00012 0.00011 0.00004
+ 0.02964 0.00502 0.00072 0.00034 0.00001 0.00012 0.00010 0.00004
+ 0.19195 0.03857 0.00137 0.00294 0.00000 0.00000 0.00078 0.00017
+ 0.18077 0.03596 0.00159 0.00271 0.00000 0.00000 0.00072 0.00016
+ 0.16468 0.03226 0.00181 0.00239 0.00000 0.00000 0.00063 0.00014
+ 0.15342 0.02970 0.00191 0.00217 0.00000 0.00000 0.00058 0.00013
+ 0.14213 0.02716 0.00196 0.00195 0.00000 0.00000 0.00052 0.00012
+ 0.13288 0.02511 0.00197 0.00178 0.00000 0.00000 0.00048 0.00012
+ 0.12447 0.02326 0.00196 0.00163 0.00000 0.00000 0.00044 0.00011
+ 0.11605 0.02144 0.00193 0.00148 0.00000 0.00000 0.00040 0.00010
+ 0.10917 0.01996 0.00189 0.00136 0.00000 0.00000 0.00037 0.00010
+ 0.10290 0.01863 0.00185 0.00126 0.00000 0.00000 0.00034 0.00009
+ 0.09820 0.01765 0.00181 0.00118 0.00000 0.00000 0.00032 0.00009
+ 0.08891 0.01573 0.00171 0.00103 0.00001 0.00000 0.00028 0.00008
+ 0.08170 0.01426 0.00162 0.00092 0.00001 0.00002 0.00025 0.00007
+ 0.07443 0.01281 0.00150 0.00081 0.00001 0.00005 0.00022 0.00007
+ 0.06770 0.01149 0.00139 0.00072 0.00001 0.00006 0.00020 0.00006
+ 0.06223 0.01043 0.00129 0.00064 0.00001 0.00008 0.00018 0.00006
+ 0.05725 0.00949 0.00119 0.00058 0.00001 0.00009 0.00016 0.00005
+ 0.05349 0.00879 0.00112 0.00053 0.00001 0.00009 0.00015 0.00005
+ 0.04933 0.00802 0.00103 0.00048 0.00001 0.00010 0.00014 0.00005
+ 0.04597 0.00741 0.00096 0.00044 0.00001 0.00010 0.00013 0.00005
+ 0.04313 0.00690 0.00090 0.00040 0.00001 0.00010 0.00012 0.00004
+ 0.03982 0.00631 0.00082 0.00037 0.00001 0.00010 0.00011 0.00004
+ 0.03698 0.00581 0.00076 0.00033 0.00001 0.00010 0.00010 0.00004
+ 0.03452 0.00538 0.00070 0.00031 0.00001 0.00010 0.00009 0.00004
+ 0.03226 0.00499 0.00065 0.00028 0.00001 0.00010 0.00008 0.00004
+ 0.03020 0.00464 0.00060 0.00026 0.00001 0.00010 0.00008 0.00003
+ 0.02839 0.00433 0.00056 0.00024 0.00001 0.00010 0.00007 0.00003
+ 0.02679 0.00406 0.00053 0.00023 0.00001 0.00010 0.00007 0.00003
+ 0.02529 0.00381 0.00049 0.00021 0.00001 0.00009 0.00007 0.00003
+ 0.02391 0.00358 0.00046 0.00020 0.00001 0.00009 0.00006 0.00003
+ 0.02267 0.00338 0.00044 0.00019 0.00001 0.00009 0.00006 0.00003
+ 0.02156 0.00320 0.00041 0.00018 0.00001 0.00009 0.00006 0.00003
+ 0.02050 0.00302 0.00039 0.00017 0.00001 0.00009 0.00005 0.00003
+ 0.01951 0.00287 0.00037 0.00016 0.00001 0.00009 0.00005 0.00003
+ 0.01862 0.00272 0.00035 0.00015 0.00001 0.00008 0.00005 0.00003
+ 0.01781 0.00259 0.00033 0.00014 0.00001 0.00008 0.00005 0.00003
+ 0.01704 0.00247 0.00031 0.00014 0.00001 0.00008 0.00005 0.00003
+ 0.13540 0.02305 0.00051 0.00135 0.00000 0.00000 0.00036 0.00011
+ 0.12650 0.02132 0.00066 0.00123 0.00000 0.00000 0.00033 0.00010
+ 0.11381 0.01888 0.00081 0.00107 0.00000 0.00000 0.00029 0.00009
+ 0.10501 0.01721 0.00087 0.00096 0.00000 0.00000 0.00026 0.00009
+ 0.09626 0.01557 0.00091 0.00085 0.00000 0.00000 0.00023 0.00008
+ 0.08916 0.01425 0.00093 0.00077 0.00000 0.00000 0.00021 0.00007
+ 0.08276 0.01308 0.00093 0.00070 0.00000 0.00000 0.00019 0.00007
+ 0.07641 0.01192 0.00091 0.00063 0.00000 0.00000 0.00017 0.00006
+ 0.07126 0.01100 0.00089 0.00057 0.00000 0.00000 0.00016 0.00006
+ 0.06661 0.01018 0.00087 0.00052 0.00000 0.00000 0.00015 0.00006
+ 0.06315 0.00957 0.00085 0.00049 0.00000 0.00000 0.00014 0.00005
+ 0.05640 0.00840 0.00080 0.00042 0.00000 0.00000 0.00012 0.00005
+ 0.05122 0.00753 0.00075 0.00037 0.00000 0.00002 0.00011 0.00005
+ 0.04608 0.00667 0.00069 0.00032 0.00000 0.00004 0.00009 0.00004
+ 0.04138 0.00590 0.00063 0.00028 0.00000 0.00005 0.00008 0.00004
+ 0.03762 0.00530 0.00058 0.00025 0.00000 0.00006 0.00007 0.00004
+ 0.03425 0.00476 0.00053 0.00022 0.00000 0.00006 0.00007 0.00003
+ 0.03173 0.00437 0.00049 0.00020 0.00001 0.00007 0.00006 0.00003
+ 0.02897 0.00395 0.00045 0.00018 0.00001 0.00007 0.00006 0.00003
+ 0.02677 0.00361 0.00042 0.00016 0.00001 0.00007 0.00005 0.00003
+ 0.02493 0.00334 0.00039 0.00015 0.00001 0.00007 0.00005 0.00003
+ 0.02281 0.00302 0.00035 0.00014 0.00001 0.00007 0.00004 0.00003
+ 0.02100 0.00276 0.00032 0.00012 0.00001 0.00007 0.00004 0.00002
+ 0.01945 0.00254 0.00029 0.00011 0.00001 0.00007 0.00004 0.00002
+ 0.01804 0.00233 0.00027 0.00010 0.00001 0.00007 0.00004 0.00002
+ 0.01677 0.00215 0.00025 0.00010 0.00001 0.00007 0.00003 0.00002
+ 0.01566 0.00200 0.00023 0.00009 0.00001 0.00007 0.00003 0.00002
+ 0.01468 0.00186 0.00022 0.00008 0.00001 0.00007 0.00003 0.00002
+ 0.01378 0.00173 0.00020 0.00008 0.00001 0.00006 0.00003 0.00002
+ 0.01294 0.00162 0.00019 0.00007 0.00001 0.00006 0.00003 0.00002
+ 0.01220 0.00152 0.00018 0.00007 0.00001 0.00006 0.00003 0.00002
+ 0.01155 0.00143 0.00016 0.00007 0.00001 0.00006 0.00003 0.00002
+ 0.01092 0.00135 0.00015 0.00006 0.00001 0.00006 0.00003 0.00002
+ 0.01034 0.00127 0.00015 0.00006 0.00001 0.00006 0.00002 0.00002
+ 0.00982 0.00120 0.00014 0.00006 0.00001 0.00006 0.00002 0.00002
+ 0.00935 0.00114 0.00013 0.00005 0.00001 0.00005 0.00002 0.00002
+ 0.00891 0.00108 0.00012 0.00005 0.00001 0.00005 0.00002 0.00002
+ 0.08793 0.01227 0.00019 0.00051 0.00000 0.00000 0.00015 0.00007
+ 0.08143 0.01125 0.00027 0.00047 0.00000 0.00000 0.00013 0.00007
+ 0.07223 0.00981 0.00035 0.00040 0.00000 0.00000 0.00012 0.00006
+ 0.06593 0.00885 0.00038 0.00035 0.00000 0.00000 0.00010 0.00006
+ 0.05972 0.00790 0.00040 0.00031 0.00000 0.00000 0.00009 0.00005
+ 0.05472 0.00716 0.00040 0.00028 0.00000 0.00000 0.00008 0.00005
+ 0.05026 0.00650 0.00040 0.00025 0.00000 0.00000 0.00007 0.00004
+ 0.04588 0.00585 0.00039 0.00022 0.00000 0.00000 0.00007 0.00004
+ 0.04236 0.00534 0.00038 0.00020 0.00000 0.00000 0.00006 0.00004
+ 0.03922 0.00489 0.00037 0.00018 0.00000 0.00000 0.00006 0.00003
+ 0.03690 0.00456 0.00036 0.00017 0.00000 0.00000 0.00005 0.00003
+ 0.03242 0.00394 0.00033 0.00014 0.00000 0.00000 0.00004 0.00003
+ 0.02904 0.00348 0.00031 0.00012 0.00000 0.00001 0.00004 0.00003
+ 0.02574 0.00303 0.00028 0.00011 0.00000 0.00003 0.00003 0.00002
+ 0.02278 0.00264 0.00025 0.00009 0.00000 0.00003 0.00003 0.00002
+ 0.02045 0.00234 0.00023 0.00008 0.00000 0.00004 0.00003 0.00002
+ 0.01838 0.00207 0.00021 0.00007 0.00000 0.00004 0.00003 0.00002
+ 0.01686 0.00188 0.00019 0.00007 0.00000 0.00004 0.00002 0.00002
+ 0.01522 0.00168 0.00017 0.00006 0.00001 0.00005 0.00002 0.00002
+ 0.01393 0.00152 0.00016 0.00005 0.00001 0.00005 0.00002 0.00002
+ 0.01286 0.00139 0.00014 0.00005 0.00001 0.00005 0.00002 0.00002
+ 0.01164 0.00125 0.00013 0.00005 0.00001 0.00005 0.00002 0.00002
+ 0.01061 0.00113 0.00012 0.00004 0.00001 0.00005 0.00002 0.00002
+ 0.00974 0.00103 0.00011 0.00004 0.00001 0.00005 0.00002 0.00002
+ 0.00895 0.00094 0.00010 0.00004 0.00001 0.00004 0.00002 0.00002
+ 0.00825 0.00086 0.00009 0.00003 0.00001 0.00004 0.00002 0.00001
+ 0.00765 0.00079 0.00008 0.00003 0.00001 0.00004 0.00002 0.00001
+ 0.00712 0.00073 0.00008 0.00003 0.00001 0.00004 0.00002 0.00001
+ 0.00663 0.00068 0.00007 0.00003 0.00001 0.00004 0.00002 0.00001
+ 0.00619 0.00063 0.00007 0.00003 0.00001 0.00004 0.00002 0.00001
+ 0.00580 0.00058 0.00006 0.00003 0.00001 0.00004 0.00002 0.00001
+ 0.00545 0.00055 0.00006 0.00003 0.00001 0.00004 0.00002 0.00002
+ 0.00513 0.00051 0.00005 0.00003 0.00001 0.00004 0.00002 0.00002
+ 0.00483 0.00048 0.00005 0.00003 0.00001 0.00004 0.00002 0.00002
+ 0.00456 0.00045 0.00005 0.00002 0.00001 0.00004 0.00002 0.00002
+ 0.00432 0.00042 0.00004 0.00002 0.00001 0.00004 0.00002 0.00002
+ 0.00409 0.00040 0.00004 0.00002 0.00001 0.00004 0.00002 0.00002
+ 0.05080 0.00554 0.00007 0.00015 0.00000 0.00000 0.00005 0.00004
+ 0.04656 0.00502 0.00010 0.00014 0.00000 0.00000 0.00004 0.00004
+ 0.04063 0.00431 0.00013 0.00012 0.00000 0.00000 0.00004 0.00003
+ 0.03661 0.00384 0.00014 0.00010 0.00000 0.00000 0.00003 0.00003
+ 0.03270 0.00338 0.00014 0.00009 0.00000 0.00000 0.00003 0.00003
+ 0.02959 0.00302 0.00014 0.00008 0.00000 0.00000 0.00003 0.00002
+ 0.02684 0.00271 0.00014 0.00007 0.00000 0.00000 0.00002 0.00002
+ 0.02417 0.00240 0.00013 0.00006 0.00000 0.00000 0.00002 0.00002
+ 0.02205 0.00217 0.00013 0.00006 0.00000 0.00000 0.00002 0.00002
+ 0.02018 0.00196 0.00012 0.00005 0.00000 0.00000 0.00002 0.00002
+ 0.01881 0.00181 0.00012 0.00005 0.00000 0.00000 0.00002 0.00002
+ 0.01620 0.00153 0.00011 0.00004 0.00000 0.00000 0.00002 0.00001
+ 0.01427 0.00133 0.00010 0.00003 0.00000 0.00001 0.00001 0.00001
+ 0.01242 0.00114 0.00009 0.00003 0.00000 0.00002 0.00001 0.00001
+ 0.01079 0.00097 0.00008 0.00003 0.00000 0.00002 0.00001 0.00001
+ 0.00954 0.00084 0.00007 0.00002 0.00000 0.00002 0.00001 0.00001
+ 0.00844 0.00074 0.00006 0.00002 0.00001 0.00003 0.00001 0.00001
+ 0.00765 0.00066 0.00006 0.00002 0.00001 0.00003 0.00001 0.00001
+ 0.00681 0.00058 0.00005 0.00002 0.00001 0.00003 0.00001 0.00001
+ 0.00616 0.00052 0.00005 0.00002 0.00001 0.00003 0.00001 0.00001
+ 0.00563 0.00047 0.00004 0.00002 0.00001 0.00003 0.00001 0.00001
+ 0.00503 0.00042 0.00004 0.00002 0.00001 0.00003 0.00001 0.00001
+ 0.00453 0.00037 0.00003 0.00002 0.00001 0.00003 0.00001 0.00001
+ 0.00411 0.00033 0.00003 0.00002 0.00001 0.00003 0.00001 0.00001
+ 0.00374 0.00030 0.00003 0.00002 0.00001 0.00003 0.00001 0.00001
+ 0.00342 0.00027 0.00002 0.00002 0.00001 0.00003 0.00001 0.00001
+ 0.00314 0.00025 0.00002 0.00002 0.00001 0.00003 0.00001 0.00001
+ 0.00290 0.00023 0.00002 0.00002 0.00001 0.00003 0.00001 0.00001
+ 0.00267 0.00021 0.00002 0.00002 0.00001 0.00003 0.00001 0.00001
+ 0.00248 0.00019 0.00002 0.00002 0.00001 0.00003 0.00001 0.00001
+ 0.00230 0.00018 0.00002 0.00002 0.00001 0.00003 0.00001 0.00001
+ 0.00215 0.00017 0.00002 0.00002 0.00001 0.00003 0.00002 0.00001
+ 0.00201 0.00015 0.00002 0.00002 0.00001 0.00003 0.00002 0.00002
+ 0.00188 0.00014 0.00001 0.00002 0.00001 0.00003 0.00002 0.00002
+ 0.00176 0.00013 0.00001 0.00002 0.00001 0.00003 0.00002 0.00002
+ 0.00166 0.00013 0.00001 0.00002 0.00002 0.00003 0.00002 0.00002
+ 0.00156 0.00012 0.00001 0.00002 0.00002 0.00003 0.00002 0.00002
+ 0.00849 0.00042 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00755 0.00037 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00628 0.00031 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00546 0.00026 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00468 0.00022 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00408 0.00019 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
+ 0.00357 0.00016 0.00000 0.00001 0.00000 0.00000 0.00000 0.00000
+ 0.00309 0.00014 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001
+ 0.00272 0.00012 0.00000 0.00001 0.00000 0.00000 0.00001 0.00001
+ 0.00240 0.00011 0.00000 0.00001 0.00000 0.00000 0.00001 0.00001
+ 0.00217 0.00010 0.00000 0.00001 0.00000 0.00000 0.00001 0.00001
+ 0.00176 0.00008 0.00000 0.00001 0.00001 0.00000 0.00001 0.00001
+ 0.00147 0.00006 0.00000 0.00001 0.00001 0.00000 0.00001 0.00001
+ 0.00121 0.00005 0.00000 0.00001 0.00001 0.00001 0.00001 0.00001
+ 0.00099 0.00004 0.00000 0.00001 0.00001 0.00001 0.00001 0.00001
+ 0.00083 0.00003 0.00000 0.00001 0.00001 0.00001 0.00001 0.00001
+ 0.00070 0.00003 0.00000 0.00001 0.00001 0.00001 0.00001 0.00001
+ 0.00061 0.00002 0.00000 0.00001 0.00001 0.00001 0.00001 0.00001
+ 0.00052 0.00002 0.00000 0.00001 0.00001 0.00001 0.00001 0.00001
+ 0.00045 0.00002 0.00000 0.00002 0.00001 0.00001 0.00002 0.00002
+ 0.00040 0.00002 0.00000 0.00002 0.00002 0.00002 0.00002 0.00002
+ 0.00034 0.00001 0.00000 0.00002 0.00002 0.00002 0.00002 0.00002
+ 0.00030 0.00001 0.00000 0.00002 0.00002 0.00002 0.00002 0.00002
+ 0.00026 0.00001 0.00000 0.00002 0.00002 0.00002 0.00002 0.00002
+ 0.00023 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003
+ 0.00020 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003
+ 0.00018 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003
+ 0.00016 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003
+ 0.00015 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003
+ 0.00013 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003
+ 0.00012 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003
+ 0.00011 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003
+ 0.00010 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003
+ 0.00009 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003
+ 0.00008 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003
+ 0.00008 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003
+ 0.00007 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003
diff --git a/Shower/Base/SudakovFormFactor.cc b/Shower/Base/SudakovFormFactor.cc
--- a/Shower/Base/SudakovFormFactor.cc
+++ b/Shower/Base/SudakovFormFactor.cc
@@ -1,368 +1,368 @@
// -*- C++ -*-
//
// SudakovFormFactor.cc is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2007 The Herwig Collaboration
//
// Herwig++ is licenced under version 2 of the GPL, see COPYING for details.
// Please respect the MCnet academic guidelines, see GUIDELINES for details.
//
//
// This is the implementation of the non-inlined, non-templated member
// functions of the SudakovFormFactor class.
//
#include "SudakovFormFactor.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
#include "ThePEG/Repository/EventGenerator.h"
#include "ThePEG/Interface/Reference.h"
#include "ThePEG/Interface/Switch.h"
#include "ThePEG/Interface/Parameter.h"
#include "Herwig++/Shower/ShowerHandler.h"
#include "ShowerParticle.h"
#include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
#include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
#include "ThePEG/Helicity/FermionSpinInfo.h"
using namespace Herwig;
using namespace ThePEG::Helicity;
void SudakovFormFactor::persistentOutput(PersistentOStream & os) const {
os << splittingFn_ << alpha_ << pdfmax_ << particles_ << pdffactor_
<< a_ << b_ << ounit(c_,GeV) << ounit(kinCutoffScale_,GeV) << cutOffOption_
<< ounit(vgcut_,GeV) << ounit(vqcut_,GeV)
<< ounit(pTmin_,GeV) << ounit(pT2min_,GeV2);
}
void SudakovFormFactor::persistentInput(PersistentIStream & is, int) {
is >> splittingFn_ >> alpha_ >> pdfmax_ >> particles_ >> pdffactor_
>> a_ >> b_ >> iunit(c_,GeV) >> iunit(kinCutoffScale_,GeV) >> cutOffOption_
>> iunit(vgcut_,GeV) >> iunit(vqcut_,GeV)
>> iunit(pTmin_,GeV) >> iunit(pT2min_,GeV2);
}
AbstractClassDescription<SudakovFormFactor> SudakovFormFactor::initSudakovFormFactor;
// Definition of the static class description member.
void SudakovFormFactor::Init() {
static ClassDocumentation<SudakovFormFactor> documentation
("The SudakovFormFactor class is the base class for the implementation of Sudakov"
" form factors in Herwig++");
static Reference<SudakovFormFactor,SplittingFunction>
interfaceSplittingFunction("SplittingFunction",
"A reference to the SplittingFunction object",
&Herwig::SudakovFormFactor::splittingFn_,
false, false, true, false);
static Reference<SudakovFormFactor,ShowerAlpha>
interfaceAlpha("Alpha",
"A reference to the Alpha object",
&Herwig::SudakovFormFactor::alpha_,
false, false, true, false);
static Parameter<SudakovFormFactor,double> interfacePDFmax
("PDFmax",
"Maximum value of PDF weight. ",
- &SudakovFormFactor::pdfmax_, 35.0, 1.0, 4000.0,
+ &SudakovFormFactor::pdfmax_, 35.0, 1.0, 100000.0,
false, false, Interface::limited);
static Switch<SudakovFormFactor,unsigned int> interfacePDFFactor
("PDFFactor",
"Include additional factors in the overestimate for the PDFs",
&SudakovFormFactor::pdffactor_, 0, false, false);
static SwitchOption interfacePDFFactorOff
(interfacePDFFactor,
"Off",
"Don't include any factors",
0);
static SwitchOption interfacePDFFactorOverZ
(interfacePDFFactor,
"OverZ",
"Include an additional factor of 1/z",
1);
static SwitchOption interfacePDFFactorOverOneMinusZ
(interfacePDFFactor,
"OverOneMinusZ",
"Include an additional factor of 1/(1-z)",
2);
static SwitchOption interfacePDFFactorOverZOneMinusZ
(interfacePDFFactor,
"OverZOneMinusZ",
"Include an additional factor of 1/z/(1-z)",
3);
static Switch<SudakovFormFactor,unsigned int> interfaceCutOffOption
("CutOffOption",
"The type of cut-off to use to end the shower",
&SudakovFormFactor::cutOffOption_, 0, false, false);
static SwitchOption interfaceCutOffOptionDefault
(interfaceCutOffOption,
"Default",
"Use the standard Herwig++ cut-off on virtualities with the minimum"
" virtuality depending on the mass of the branching particle",
0);
static SwitchOption interfaceCutOffOptionFORTRAN
(interfaceCutOffOption,
"FORTRAN",
"Use a FORTRAN-like cut-off on virtualities",
1);
static SwitchOption interfaceCutOffOptionpT
(interfaceCutOffOption,
"pT",
"Use a cut on the minimum allowed pT",
2);
static Parameter<SudakovFormFactor,double> interfaceaParameter
("aParameter",
"The a parameter for the kinematic cut-off",
&SudakovFormFactor::a_, 0.3, -10.0, 10.0,
false, false, Interface::limited);
static Parameter<SudakovFormFactor,double> interfacebParameter
("bParameter",
"The b parameter for the kinematic cut-off",
&SudakovFormFactor::b_, 2.3, -10.0, 10.0,
false, false, Interface::limited);
static Parameter<SudakovFormFactor,Energy> interfacecParameter
("cParameter",
"The c parameter for the kinematic cut-off",
&SudakovFormFactor::c_, GeV, 0.3*GeV, 0.1*GeV, 10.0*GeV,
false, false, Interface::limited);
static Parameter<SudakovFormFactor,Energy>
interfaceKinScale ("cutoffKinScale",
"kinematic cutoff scale for the parton shower phase"
" space (unit [GeV])",
&SudakovFormFactor::kinCutoffScale_, GeV,
2.3*GeV, 0.001*GeV, 10.0*GeV,false,false,false);
static Parameter<SudakovFormFactor,Energy> interfaceGluonVirtualityCut
("GluonVirtualityCut",
"For the FORTRAN cut-off option the minimum virtuality of the gluon",
&SudakovFormFactor::vgcut_, GeV, 0.85*GeV, 0.1*GeV, 10.0*GeV,
false, false, Interface::limited);
static Parameter<SudakovFormFactor,Energy> interfaceQuarkVirtualityCut
("QuarkVirtualityCut",
"For the FORTRAN cut-off option the minimum virtuality added to"
" the mass for particles other than the gluon",
&SudakovFormFactor::vqcut_, GeV, 0.85*GeV, 0.1*GeV, 10.0*GeV,
false, false, Interface::limited);
static Parameter<SudakovFormFactor,Energy> interfacepTmin
("pTmin",
"The minimum pT if using a cut-off on the pT",
&SudakovFormFactor::pTmin_, GeV, 1.0*GeV, ZERO, 10.0*GeV,
false, false, Interface::limited);
}
bool SudakovFormFactor::
PDFVeto(const Energy2 t, const double x,
const tcPDPtr parton0, const tcPDPtr parton1,
Ptr<BeamParticleData>::transient_const_pointer beam) const {
- tcPDFPtr pdf = tcPDFPtr();
+ tcPDFPtr pdf;
//using the pdf's associated with the ShowerHandler assures, that
//modified pdf's are used for the secondary interactions via
//CascadeHandler::resetPDFs(...)
if(ShowerHandler::currentHandler()->firstPDF().particle() == beam)
pdf = ShowerHandler::currentHandler()->firstPDF().pdf();
if(ShowerHandler::currentHandler()->secondPDF().particle() == beam)
pdf = ShowerHandler::currentHandler()->secondPDF().pdf();
assert(pdf);
Energy2 theScale = t;
if (theScale < sqr(ShowerHandler::currentHandler()->pdfFreezingScale()))
theScale = sqr(ShowerHandler::currentHandler()->pdfFreezingScale());
double newpdf(0.0), oldpdf(0.0);
//different treatment of MPI ISR is done via CascadeHandler::resetPDFs()
newpdf=pdf->xfx(beam,parton0,theScale,x/z());
oldpdf=pdf->xfx(beam,parton1,theScale,x);
if(newpdf<=0.) return true;
if(oldpdf<=0.) return false;
double ratio = newpdf/oldpdf;
double maxpdf(pdfmax_);
switch (pdffactor_) {
case 1:
maxpdf /= z();
break;
case 2:
maxpdf /= 1.-z();
break;
case 3:
maxpdf /= (z()*(1.-z()));
break;
}
// ratio / PDFMax must be a probability <= 1.0
if (ratio > maxpdf) {
generator()->log() << "PDFVeto warning: Ratio > " << name()
- << ":PDFmax (by a factor of"
+ << ":PDFmax (by a factor of "
<< ratio/maxpdf <<") for "
<< parton0->PDGName() << " to "
<< parton1->PDGName() << "\n";
}
return ratio < UseRandom::rnd()*maxpdf;
}
void SudakovFormFactor::addSplitting(const IdList & in) {
bool add=true;
for(unsigned int ix=0;ix<particles_.size();++ix) {
if(particles_[ix].size()==in.size()) {
bool match=true;
for(unsigned int iy=0;iy<in.size();++iy) {
if(particles_[ix][iy]!=in[iy]) {
match=false;
break;
}
}
if(match) {
add=false;
break;
}
}
}
if(add) particles_.push_back(in);
}
SpinfoPtr SudakovFormFactor::getMapping(RhoDMatrix & rho, RhoDMatrix & mapping,
ShowerParticle & particle,ShoKinPtr showerkin) {
// output spininfo
SpinfoPtr output;
// if the particle is final-state and not from the hard process
if(!particle.perturbative() && particle.isFinalState()) {
// mapping is the identity
mapping=RhoDMatrix(particle.dataPtr()->iSpin());
output=dynamic_ptr_cast<SpinfoPtr>(particle.spinInfo());
// should have spin info
if(!output) {
cerr << " particle does not have spinInfo " << endl;
exit(1);
}
}
// if particle is final-state and is from the hard process
else if(particle.perturbative() && particle.isFinalState()) {
// get the basis vectors
vector<Lorentz5Momentum> basis=showerkin->getBasis();
// we are doing the evolution in the back-to-back frame
// work out the boostvector
Boost boostv(-(basis[0]+basis[1]).boostVector());
// boost the momentum
Lorentz5Momentum porig(basis[0]);porig.boost(boostv);
// now rotate so along the z axis as needed for the splitting functions
Axis axis(porig.vect().unit());
LorentzRotation rot;
if(axis.perp2()>0.) {
double sinth(sqrt(1.-sqr(axis.z())));
rot.setRotate(acos(axis.z()),Axis(-axis.y()/sinth,axis.x()/sinth,0.));
porig.transform(rot);
}
else if(axis.z()>0.) {
porig.setZ(-porig.z());
}
// the rest depends on the spin of the particle
PDT::Spin spin(particle.dataPtr()->iSpin());
mapping=RhoDMatrix(spin);
// do the spin dependent bit
if(spin==PDT::Spin0) {
cerr << "testing spin 0 not yet implemented " << endl;
exit(0);
}
else if(spin==PDT::Spin1Half) {
FermionSpinPtr fspin=dynamic_ptr_cast<FermionSpinPtr>(particle.spinInfo());
// spin info exists get information from it
if(fspin) {
output=fspin;
// rotate the original basis
vector<LorentzSpinor<SqrtEnergy> > sbasis;
for(unsigned int ix=0;ix<2;++ix) {
sbasis.push_back(fspin->getProductionBasisState(ix));
sbasis.back().transform(rot);
}
// splitting basis
DiracRep dbasis(sbasis[0].Rep());
vector<LorentzSpinorBar<SqrtEnergy> > fbasis;
SpinorBarWaveFunction wave;
if(particle.id()>0)
wave=SpinorBarWaveFunction(porig,particle.dataPtr(),outgoing,dbasis);
else
wave=SpinorBarWaveFunction(porig,particle.dataPtr(),incoming,dbasis);
for(unsigned int ix=0;ix<2;++ix) {
wave.reset(ix);
fbasis.push_back(wave.dimensionedWave());
}
// work out the mapping
for(unsigned int ix=0;ix<2;++ix) {
for(unsigned int iy=0;iy<2;++iy) {
mapping(ix,iy)=sbasis[iy].scalar(fbasis[ix])/2./porig.mass();
if(particle.id()<0){mapping(ix,iy)=conj(mapping(ix,iy));}
cerr << "testing the mapping " << ix << " " << iy << " "
<< mapping(ix,iy) << endl;
}
}
}
// spin info does not exist create it
else {
cerr << "testing no basis case not yet handled " << endl;
exit(1);
}
}
else {
cerr << "testing spin 1 not yet implemented " << endl;
exit(0);
}
}
// set the decayed flag
output->decay();
rho=output->rhoMatrix();
return output;
}
Energy2 SudakovFormFactor::guesst(Energy2 t1,unsigned int iopt,
const IdList &ids,
double enhance,bool ident) const {
unsigned int pdfopt = iopt!=1 ? 0 : pdffactor_;
double c =
1./((splittingFn_->integOverP(zlimits_.second,ids,pdfopt) -
splittingFn_->integOverP(zlimits_.first ,ids,pdfopt))*
alpha_->overestimateValue()/Constants::twopi*enhance);
assert(iopt<=2);
if(iopt==1) {
c/=pdfmax_;
if(ident) c*=0.5;
}
else if(iopt==2) c*=-1.;
if(splittingFn_->interactionOrder()==1) {
return t1*pow(UseRandom::rnd(),c);
}
else {
assert(false && "Units are dubious here.");
int nm(splittingFn()->interactionOrder()-1);
c/=Math::powi(alpha_->overestimateValue()/Constants::twopi,nm);
return t1 / pow (1. - nm*c*log(UseRandom::rnd())
* Math::powi(t1*UnitRemoval::InvE2,nm)
,1./double(nm));
}
}
double SudakovFormFactor::guessz (unsigned int iopt, const IdList &ids) const {
unsigned int pdfopt = iopt!=1 ? 0 : pdffactor_;
double lower = splittingFn_->integOverP(zlimits_.first,ids,pdfopt);
return splittingFn_->invIntegOverP
(lower + UseRandom::rnd()*(splittingFn_->integOverP(zlimits_.second,ids,pdfopt) -
lower),ids,pdfopt);
}
void SudakovFormFactor::doinit() {
Interfaced::doinit();
pT2min_ = cutOffOption()==2 ? sqr(pTmin_) : ZERO;
}
diff --git a/Shower/Default/MECorrections/VectorBosonQQBarMECorrection.cc b/Shower/Default/MECorrections/VectorBosonQQBarMECorrection.cc
--- a/Shower/Default/MECorrections/VectorBosonQQBarMECorrection.cc
+++ b/Shower/Default/MECorrections/VectorBosonQQBarMECorrection.cc
@@ -1,496 +1,502 @@
// -*- C++ -*-
//
// VectorBosonQQBarMECorrection.cc is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2007 The Herwig Collaboration
//
// Herwig++ is licenced under version 2 of the GPL, see COPYING for details.
// Please respect the MCnet academic guidelines, see GUIDELINES for details.
//
//
// This is the implementation of the non-inlined, non-templated member
// functions of the VectorBosonQQBarMECorrection class.
//
#include "VectorBosonQQBarMECorrection.h"
#include "Herwig++/Shower/Base/ShowerParticle.h"
#include "ThePEG/PDT/EnumParticles.h"
#include "ThePEG/Handlers/EventHandler.h"
#include "ThePEG/Repository/EventGenerator.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "Herwig++/Shower/Base/Evolver.h"
#include "Herwig++/Shower/Base/KinematicsReconstructor.h"
#include "Herwig++/Shower/Base/PartnerFinder.h"
using namespace Herwig;
const double VectorBosonQQBarMECorrection::EPS=0.00000001;
NoPIOClassDescription<VectorBosonQQBarMECorrection> VectorBosonQQBarMECorrection::initVectorBosonQQBarMECorrection;
// Definition of the static class description member.
IBPtr VectorBosonQQBarMECorrection::clone() const {
return new_ptr(*this);
}
IBPtr VectorBosonQQBarMECorrection::fullclone() const {
return new_ptr(*this);
}
void VectorBosonQQBarMECorrection::Init() {
static ClassDocumentation<VectorBosonQQBarMECorrection> documentation
("The VectorBosonQQBarMECorrection class implements the matrix"
" element correction for e+e- -> q qbar and Z/W-> q qbar");
}
bool VectorBosonQQBarMECorrection::canHandle(ShowerTreePtr tree,
double & initial, double & final,
EvolverPtr evolver) {
// check radiation on
if(!evolver->isFSRadiationON()) return false;
// check 2 outgoing particles
if(tree->outgoingLines().size()!=2) return false;
// check 1 or 2 incoming particles
if(tree->incomingLines().size()!=1&&tree->incomingLines().size()!=2) return false;
// if one incoming particle must be W/Z or gamma
int id[2];
map<ShowerProgenitorPtr,ShowerParticlePtr>::const_iterator cit;
cit=tree->incomingLines().begin();
id[0]=cit->first->progenitor()->id();
if(tree->incomingLines().size()==1) {
if(abs(id[0])!=ParticleID::Wplus&&id[0]!=ParticleID::Z0&&
abs(id[0])!=ParticleID::gamma) return false;
}
// check incoming leptons beams
else {
++cit;
id[1]=cit->first->progenitor()->id();
if(id[0]!=-id[1]||abs(id[0])>15||abs(id[0])<11||abs(id[0])%2!=1) return false;
}
map<ShowerProgenitorPtr,tShowerParticlePtr>::const_iterator cjt;
// check outgoing quarks
cjt=tree->outgoingLines().begin();
id[0]=cjt->first->progenitor()->id();
++cjt;
id[1]=cjt->first->progenitor()->id();
if(id[0]!=-id[1]||abs(id[0])>6) return false;
+ // get the quark and antiquark
+ ParticleVector qq;
+ for(cjt=tree->outgoingLines().begin();cjt!=tree->outgoingLines().end();++cjt)
+ qq.push_back(cjt->first->copy());
+ // ensure quark first
+ if(qq[0]->id()<0) swap(qq[0],qq[1]);
+ // centre of mass energy
+ d_Q = (qq[0]->momentum() + qq[1]->momentum()).m();
+ // quark mass
+ d_m = 0.5*(qq[0]->momentum().m()+qq[1]->momentum().m());
+ // set the other parameters
+ setRho(sqr(d_m/d_Q));
+ setKtildeSymm();
// otherwise can do it
initial=1.;
final =1.;
return true;
}
void VectorBosonQQBarMECorrection::
applyHardMatrixElementCorrection(ShowerTreePtr tree) {
// get the quark and antiquark
ParticleVector qq;
map<ShowerProgenitorPtr,tShowerParticlePtr>::const_iterator cit;
for(cit=tree->outgoingLines().begin();cit!=tree->outgoingLines().end();++cit)
qq.push_back(cit->first->copy());
// ensure quark first
if(qq[0]->id()<0) swap(qq[0],qq[1]);
- // centre of mass energy
- d_Q = (qq[0]->momentum() + qq[1]->momentum()).m();
- // quark mass
- d_m = 0.5*(qq[0]->momentum().m()+qq[1]->momentum().m());
- // set the other parameters
- setRho(sqr(d_m/d_Q));
- setKtildeSymm();
// get the momenta
vector<Lorentz5Momentum> newfs = applyHard(qq);
// return if no emission
if(newfs.size()!=3) return;
// perform final check to ensure energy greater than constituent mass
for (int i=0; i<2; i++) {
if (newfs[i].e() < qq[i]->data().constituentMass()) return;
}
if (newfs[2].e() < getParticleData(ParticleID::g)->constituentMass())
return;
// set masses
for (int i=0; i<2; i++) newfs[i].setMass(qq[i]->mass());
newfs[2].setMass(ZERO);
// decide which particle emits
bool firstEmits=
newfs[2].vect().perp2(newfs[0].vect())<
newfs[2].vect().perp2(newfs[1].vect());
// create the new quark, antiquark and gluon
PPtr newg = getParticleData(ParticleID::g)->produceParticle(newfs[2]);
PPtr newq,newa;
if(firstEmits) {
newq = getParticleData(abs(qq[0]->id()))->produceParticle(newfs[0]);
newa = new_ptr(Particle(*qq[1]));
qq[1]->antiColourLine()->removeAntiColoured(newa);
newa->set5Momentum(newfs[1]);
}
else {
newq = new_ptr(Particle(*qq[0]));
qq[0]->colourLine()->removeColoured(newq);
newq->set5Momentum(newfs[0]);
newa = getParticleData(-abs(qq[0]->id()))->produceParticle(newfs[1]);
}
// get the original colour line
ColinePtr col;
if(qq[0]->id()>0) col=qq[0]->colourLine();
else col=qq[0]->antiColourLine();
// set the colour lines
if(firstEmits) {
col->addColoured(newq);
col->addAntiColoured(newg);
newa->colourNeighbour(newg);
}
else {
col->addAntiColoured(newa);
col->addColoured(newg);
newq->antiColourNeighbour(newg);
}
// change the existing quark and antiquark
PPtr orig;
for(cit=tree->outgoingLines().begin();cit!=tree->outgoingLines().end();++cit) {
if(cit->first->progenitor()->id()==newq->id()) {
// remove old particles from colour line
col->removeColoured(cit->first->copy());
col->removeColoured(cit->first->progenitor());
// insert new particles
cit->first->copy(newq);
ShowerParticlePtr sp(new_ptr(ShowerParticle(*newq,1,true)));
cit->first->progenitor(sp);
tree->outgoingLines()[cit->first]=sp;
cit->first->perturbative(!firstEmits);
if(firstEmits) orig=cit->first->original();
}
else {
// remove old particles from colour line
col->removeAntiColoured(cit->first->copy());
col->removeColoured(cit->first->progenitor());
// insert new particles
cit->first->copy(newa);
ShowerParticlePtr sp(new_ptr(ShowerParticle(*newa,1,true)));
cit->first->progenitor(sp);
tree->outgoingLines()[cit->first]=sp;
cit->first->perturbative(firstEmits);
if(!firstEmits) orig=cit->first->original();
}
}
// add the gluon
ShowerParticlePtr sg=new_ptr(ShowerParticle(*newg,1,true));
ShowerProgenitorPtr gluon=new_ptr(ShowerProgenitor(orig,newg,sg));
gluon->perturbative(false);
tree->outgoingLines().insert(make_pair(gluon,sg));
tree->hardMatrixElementCorrection(true);
}
vector<Lorentz5Momentum> VectorBosonQQBarMECorrection::
applyHard(const ParticleVector &p) {
double x, xbar;
vector<Lorentz5Momentum> fs;
// return if no emission
if (getHard(x, xbar) < UseRandom::rnd() || p.size() != 2) return fs;
// centre of mass energy
Lorentz5Momentum pcm = p[0]->momentum() + p[1]->momentum();
// momenta of quark,antiquark and gluon
Lorentz5Momentum pq, pa, pg;
if (p[0]->id() > 0) {
pq = p[0]->momentum();
pa = p[1]->momentum();
} else {
pa = p[0]->momentum();
pq = p[1]->momentum();
}
// boost to boson rest frame
Boost beta = (pcm.findBoostToCM());
pq.boost(beta);
pa.boost(beta);
// return if fails ?????
double xg = 2.-x-xbar;
if((1.-x)*(1.-xbar)*(1.-xg) < d_rho*xg*xg) return fs;
Axis u1, u2, u3;
// moduli of momenta in units of Q and cos theta
// stick to q direction?
// p1 is the one that is kept, p2 is the other fermion, p3 the gluon.
Energy e1, e2, e3;
Energy pp1, pp2, pp3;
bool keepq = true;
if (UseRandom::rnd() > sqr(x)/(sqr(x)+sqr(xbar)))
keepq = false;
if (keepq) {
pp1 = d_Q*sqrt(sqr(x)-4.*d_rho)/2.;
pp2 = d_Q*sqrt(sqr(xbar)-4.*d_rho)/2.;
e1 = d_Q*x/2.;
e2 = d_Q*xbar/2.;
u1 = pq.vect().unit();
} else {
pp2 = d_Q*sqrt(sqr(x)-4.*d_rho)/2.;
pp1 = d_Q*sqrt(sqr(xbar)-4.*d_rho)/2.;
e2 = d_Q*x/2.;
e1 = d_Q*xbar/2.;
u1 = pa.vect().unit();
}
pp3 = d_Q*xg/2.;
e3 = pp3;
u2 = u1.orthogonal();
u2 /= u2.mag();
u3 = u1.cross(u2);
u3 /= u3.mag();
double ct2=-2., ct3=-2.;
if (pp1 == ZERO || pp2 == ZERO || pp3 == ZERO) {
bool touched = false;
if (pp1 == ZERO) {
ct2 = 1;
ct3 = -1;
touched = true;
}
if (pp2 == ZERO || pp3 == ZERO) {
ct2 = 1;
ct3 = 1;
touched = true;
}
if (!touched)
throw Exception() << "VectorBosonQQBarMECorrection::applyHard()"
<< " did not set ct2/3"
<< Exception::abortnow;
} else {
ct3 = (sqr(pp1)+sqr(pp3)-sqr(pp2))/(2.*pp1*pp3);
ct2 = (sqr(pp1)+sqr(pp2)-sqr(pp3))/(2.*pp1*pp2);
}
double phi = Constants::twopi*UseRandom::rnd();
double cphi = cos(phi);
double sphi = sin(phi);
double st2 = sqrt(1.-sqr(ct2));
double st3 = sqrt(1.-sqr(ct3));
Vector3<Energy> pv1, pv2, pv3;
pv1 = pp1*u1;
pv2 = -ct2*pp2*u1 + st2*cphi*pp2*u2 + st2*sphi*pp2*u3;
pv3 = -ct3*pp3*u1 - st3*cphi*pp3*u2 - st3*sphi*pp3*u3;
if (keepq) {
pq = Lorentz5Momentum(pv1, e1);
pa = Lorentz5Momentum(pv2, e2);
} else {
pa = Lorentz5Momentum(pv1, e1);
pq = Lorentz5Momentum(pv2, e2);
}
pg = Lorentz5Momentum(pv3, e3);
pq.boost(-beta);
pa.boost(-beta);
pg.boost(-beta);
fs.push_back(pq);
fs.push_back(pa);
fs.push_back(pg);
return fs;
}
double VectorBosonQQBarMECorrection::getHard(double &x1, double &x2) {
double w = 0.0;
double y1 = UseRandom::rnd(),y2 = UseRandom::rnd();
// simply double MC efficiency
// -> weight has to be divided by two (Jacobian)
if (y1 + y2 > 1) {
y1 = 1.-y1;
y2 = 1.-y2;
}
bool inSoft = false;
if (y1 < 0.25) {
if (y2 < 0.25) {
inSoft = true;
if (y1 < y2) {
y1 = 0.25-y1;
y2 = y1*(1.5 - 2.*y2);
} else {
y2 = 0.25 - y2;
y1 = y2*(1.5 - 2.*y1);
}
} else {
if (y2 < y1 + 2.*sqr(y1)) return w;
}
} else {
if (y2 < 0.25) {
if (y1 < y2 + 2.*sqr(y2)) return w;
}
}
// inside PS?
x1 = 1.-y1;
x2 = 1.-y2;
if(y1*y2*(1.-y1-y2) < d_rho*sqr(y1+y2)) return w;
double k1 = getKfromX(x1, x2);
double k2 = getKfromX(x2, x1);
// Is it in the quark emission zone?
if (k1 < d_kt1) return 0.0;
// No...is it in the anti-quark emission zone?
if (k2 < d_kt2) return 0.0;
// Point is in dead zone: compute q qbar g weight
w = MEV(x1, x2);
// for axial:
// w = MEA(x1, x2);
// Reweight soft region
if (inSoft) {
if (y1 < y2) w *= 2.*y1;
else w *= 2.*y2;
}
// alpha and colour factors
- // DGRELL (this hard wired alpha_S still needs removing)
- w *= 1./3./Constants::pi*0.117997;
+ Energy2 pt2 = sqr(d_Q)*(1.-x1)*(1.-x2);
+ w *= 1./3./Constants::pi*coupling()->value(pt2);
return w;
}
bool VectorBosonQQBarMECorrection::
softMatrixElementVeto(ShowerProgenitorPtr initial,ShowerParticlePtr parent,Branching br)
{
// check we should be applying the veto
if(parent->id()!=initial->progenitor()->id()||
br.ids[0]!=br.ids[1]||
br.ids[2]!=ParticleID::g) return false;
// calculate pt
double d_z = br.kinematics->z();
Energy d_qt = br.kinematics->scale();
Energy2 d_m2 = parent->momentum().m2();
Energy pPerp = (1.-d_z)*sqrt( sqr(d_z*d_qt) - d_m2);
// if not hardest so far don't apply veto
if(pPerp<initial->highestpT()) return false;
// calculate the weight
double weight = 0.;
if(parent->id()>0) weight = qWeightX(d_qt, d_z);
else weight = qbarWeightX(d_qt, d_z);
// compute veto from weight
bool veto = !UseRandom::rndbool(weight);
// if not vetoed reset max
if(!veto) initial->highestpT(pPerp);
// if vetoing reset the scale
if(veto) parent->setEvolutionScale(br.kinematics->scale());
// return the veto
return veto;
}
void VectorBosonQQBarMECorrection::setRho(double r)
{
d_rho = r;
d_v = sqrt(1.-4.*d_rho);
}
void VectorBosonQQBarMECorrection::setKtildeSymm() {
d_kt1 = (1. + sqrt(1. - 4.*d_rho))/2.;
setKtilde2();
}
void VectorBosonQQBarMECorrection::setKtilde2() {
double num = d_rho * d_kt1 + 0.25 * d_v *(1.+d_v)*(1.+d_v);
double den = d_kt1 - d_rho;
d_kt2 = num/den;
}
double VectorBosonQQBarMECorrection::getZfromX(double x1, double x2) {
double uval = u(x2);
double num = x1 - (2. - x2)*uval;
double den = sqrt(x2*x2 - 4.*d_rho);
return uval + num/den;
}
double VectorBosonQQBarMECorrection::getKfromX(double x1, double x2) {
double zval = getZfromX(x1, x2);
return (1.-x2)/(zval*(1.-zval));
}
double VectorBosonQQBarMECorrection::MEV(double x1, double x2) {
// Vector part
double num = (x1+2.*d_rho)*(x1+2.*d_rho) + (x2+2.*d_rho)*(x2+2.*d_rho)
- 8.*d_rho*(1.+2.*d_rho);
double den = (1.+2.*d_rho)*(1.-x1)*(1.-x2);
return (num/den - 2.*d_rho/((1.-x1)*(1.-x1))
- 2*d_rho/((1.-x2)*(1.-x2)))/d_v;
}
double VectorBosonQQBarMECorrection::MEA(double x1, double x2) {
// Axial part
double num = (x1+2.*d_rho)*(x1+2.*d_rho) + (x2+2.*d_rho)*(x2+2.*d_rho)
+ 2.*d_rho*((5.-x1-x2)*(5.-x1-x2) - 19.0 + 4*d_rho);
double den = d_v*d_v*(1.-x1)*(1.-x2);
return (num/den - 2.*d_rho/((1.-x1)*(1.-x1))
- 2*d_rho/((1.-x2)*(1.-x2)))/d_v;
}
double VectorBosonQQBarMECorrection::u(double x2) {
return 0.5*(1. + d_rho/(1.-x2+d_rho));
}
void VectorBosonQQBarMECorrection::
getXXbar(double kti, double z, double &x, double &xbar) {
double w = sqr(d_v) + kti*(-1. + z)*z*(2. + kti*(-1. + z)*z);
if (w < 0) {
x = -1.;
xbar = -1;
} else {
x = (1. + sqr(d_v)*(-1. + z) + sqr(kti*(-1. + z))*z*z*z
+ z*sqrt(w)
- kti*(-1. + z)*z*(2. + z*(-2 + sqrt(w))))/
(1. - kti*(-1. + z)*z + sqrt(w));
xbar = 1. + kti*(-1. + z)*z;
}
}
double VectorBosonQQBarMECorrection::qWeight(double x, double xbar) {
double rval;
double xg = 2. - xbar - x;
// always return one in the soft gluon region
if(xg < EPS) return 1.0;
// check it is in the phase space
if((1.-x)*(1.-xbar)*(1.-xg) < d_rho*xg*xg) return 0.0;
double k1 = getKfromX(x, xbar);
double k2 = getKfromX(xbar, x);
// Is it in the quark emission zone?
if(k1 < d_kt1) {
rval = MEV(x, xbar)/PS(x, xbar);
// is it also in the anti-quark emission zone?
if(k2 < d_kt2) rval *= 0.5;
return rval;
}
return 1.0;
}
double VectorBosonQQBarMECorrection::qbarWeight(double x, double xbar) {
double rval;
double xg = 2. - xbar - x;
// always return one in the soft gluon region
if(xg < EPS) return 1.0;
// check it is in the phase space
if((1.-x)*(1.-xbar)*(1.-xg) < d_rho*xg*xg) return 0.0;
- double k1 = getKfromX(xbar, x);
- double k2 = getKfromX(x, xbar);
+ double k1 = getKfromX(x, xbar);
+ double k2 = getKfromX(xbar, x);
// Is it in the antiquark emission zone?
if(k2 < d_kt2) {
rval = MEV(x, xbar)/PS(xbar, x);
// is it also in the quark emission zone?
if(k1 < d_kt1) rval *= 0.5;
return rval;
}
return 1.0;
}
double VectorBosonQQBarMECorrection::qWeightX(Energy qtilde, double z) {
double x, xb;
getXXbar(sqr(qtilde/d_Q), z, x, xb);
// if exceptionally out of phase space, leave this emission, as there
// is no good interpretation for the soft ME correction.
if (x < 0 || xb < 0) return 1.0;
return qWeight(x, xb);
}
double VectorBosonQQBarMECorrection::qbarWeightX(Energy qtilde, double z) {
double x, xb;
- getXXbar(sqr(qtilde/d_Q), z, x, xb);
+ getXXbar(sqr(qtilde/d_Q), z, xb, x);
// see above in qWeightX.
if (x < 0 || xb < 0) return 1.0;
return qbarWeight(x, xb);
}
double VectorBosonQQBarMECorrection::PS(double x, double xbar) {
double u = 0.5*(1. + d_rho / (1.-xbar+d_rho));
double z = u + (x - (2.-xbar)*u)/sqrt(xbar*xbar - 4.*d_rho);
double brack = (1.+z*z)/(1.-z)- 2.*d_rho/(1-xbar);
// interesting: the splitting function without the subtraction
// term. Actually gives a much worse approximation in the collinear
// limit. double brack = (1.+z*z)/(1.-z);
double den = (1.-xbar)*sqrt(xbar*xbar - 4.*d_rho);
return brack/den;
}
diff --git a/Shower/ShowerHandler.cc b/Shower/ShowerHandler.cc
--- a/Shower/ShowerHandler.cc
+++ b/Shower/ShowerHandler.cc
@@ -1,671 +1,682 @@
// -*- C++ -*-
//
// ShowerHandler.cc is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2007 The Herwig Collaboration
//
// Herwig++ is licenced under version 2 of the GPL, see COPYING for details.
// Please respect the MCnet academic guidelines, see GUIDELINES for details.
//
//
// This is the implementation of the non-inlined, non-templated member
// functions of the ShowerHandler class.
//
#include "ShowerHandler.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Interface/Reference.h"
#include "ThePEG/Interface/Parameter.h"
#include "ThePEG/Interface/ParVector.h"
#include "ThePEG/Interface/Switch.h"
#include "ThePEG/PDF/PartonExtractor.h"
#include "ThePEG/PDF/PartonBinInstance.h"
#include "Herwig++/PDT/StandardMatchers.h"
#include "ThePEG/Cuts/Cuts.h"
#include "ThePEG/Handlers/StandardXComb.h"
#include "ThePEG/Utilities/Throw.h"
#include "Herwig++/Shower/Base/Evolver.h"
#include "Herwig++/Shower/Base/ShowerParticle.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
#include "ThePEG/Repository/EventGenerator.h"
#include "Herwig++/Utilities/EnumParticles.h"
#include "Herwig++/PDF/MPIPDF.h"
#include "Herwig++/PDF/MinBiasPDF.h"
#include "ThePEG/Handlers/EventHandler.h"
#include "Herwig++/Shower/Base/ShowerTree.h"
#include "Herwig++/Shower/Base/KinematicsReconstructor.h"
#include "Herwig++/Shower/Base/PartnerFinder.h"
#include "Herwig++/Shower/Base/MECorrectionBase.h"
#include "Herwig++/PDF/HwRemDecayer.h"
#include <cassert>
using namespace Herwig;
ShowerHandler::~ShowerHandler() {}
ShowerHandler * ShowerHandler::currentHandler_ = 0;
void ShowerHandler::doinit() {
CascadeHandler::doinit();
// copy particles to decay before showering from input vector to the
// set used in the simulation
particlesDecayInShower_.insert(inputparticlesDecayInShower_.begin(),
inputparticlesDecayInShower_.end());
}
IBPtr ShowerHandler::clone() const {
return new_ptr(*this);
}
IBPtr ShowerHandler::fullclone() const {
return new_ptr(*this);
}
ShowerHandler::ShowerHandler() :
pdfFreezingScale_(2.5*GeV),
maxtry_(10),maxtryMPI_(10),maxtryDP_(10), subProcess_() {
inputparticlesDecayInShower_.push_back( 6 ); // top
inputparticlesDecayInShower_.push_back( 23 ); // Z0
inputparticlesDecayInShower_.push_back( 24 ); // W+/-
inputparticlesDecayInShower_.push_back( 25 ); // h0
}
void ShowerHandler::doinitrun(){
CascadeHandler::doinitrun();
//can't use isMPIOn here, because the EventHandler is not set at that stage
if(MPIHandler_){
MPIHandler_->initialize();
if(MPIHandler_->softInt())
remDec_->initSoftInteractions(MPIHandler_->Ptmin(), MPIHandler_->beta());
}
}
void ShowerHandler::dofinish(){
CascadeHandler::dofinish();
if(MPIHandler_) MPIHandler_->finalize();
}
void ShowerHandler::persistentOutput(PersistentOStream & os) const {
os << evolver_ << remDec_ << ounit(pdfFreezingScale_,GeV) << maxtry_
<< maxtryMPI_ << maxtryDP_ << inputparticlesDecayInShower_
<< particlesDecayInShower_ << MPIHandler_;
}
void ShowerHandler::persistentInput(PersistentIStream & is, int) {
is >> evolver_ >> remDec_ >> iunit(pdfFreezingScale_,GeV) >> maxtry_
>> maxtryMPI_ >> maxtryDP_ >> inputparticlesDecayInShower_
>> particlesDecayInShower_ >> MPIHandler_;
}
ClassDescription<ShowerHandler> ShowerHandler::initShowerHandler;
// Definition of the static class description member.
void ShowerHandler::Init() {
static ClassDocumentation<ShowerHandler> documentation
("Main driver class for the showering.");
static Reference<ShowerHandler,Evolver>
interfaceEvolver("Evolver",
"A reference to the Evolver object",
&Herwig::ShowerHandler::evolver_,
false, false, true, false);
static Reference<ShowerHandler,HwRemDecayer>
interfaceRemDecayer("RemDecayer",
"A reference to the Remnant Decayer object",
&Herwig::ShowerHandler::remDec_,
false, false, true, false);
static Parameter<ShowerHandler,Energy> interfacePDFFreezingScale
("PDFFreezingScale",
"The PDF freezing scale",
&ShowerHandler::pdfFreezingScale_, GeV, 2.5*GeV, 2.0*GeV, 10.0*GeV,
false, false, Interface::limited);
static Parameter<ShowerHandler,unsigned int> interfaceMaxTry
("MaxTry",
"The maximum number of attempts for the main showering loop",
&ShowerHandler::maxtry_, 10, 1, 100,
false, false, Interface::limited);
static Parameter<ShowerHandler,unsigned int> interfaceMaxTryMPI
("MaxTryMPI",
"The maximum number of regeneration attempts for an additional scattering",
&ShowerHandler::maxtryMPI_, 10, 0, 100,
false, false, Interface::limited);
static Parameter<ShowerHandler,unsigned int> interfaceMaxTryDP
("MaxTryDP",
"The maximum number of regeneration attempts for an additional hard scattering",
&ShowerHandler::maxtryDP_, 10, 0, 100,
false, false, Interface::limited);
static ParVector<ShowerHandler,long> interfaceDecayInShower
("DecayInShower",
"PDG codes of the particles to be decayed in the shower",
&ShowerHandler::inputparticlesDecayInShower_, -1, 0l, -10000000l, 10000000l,
false, false, Interface::limited);
static Reference<ShowerHandler,UEBase> interfaceMPIHandler
("MPIHandler",
"The object that administers all additional scatterings.",
&ShowerHandler::MPIHandler_, false, false, true, true);
+
+ static Reference<ShowerHandler,PDFBase> interfacePDFA
+ ("PDFA",
+ "The PDF for beam particle A. Overrides the particle's own PDF setting.",
+ &ShowerHandler::PDFA_, false, false, true, true, false);
+
+ static Reference<ShowerHandler,PDFBase> interfacePDFB
+ ("PDFB",
+ "The PDF for beam particle B. Overrides the particle's own PDF setting.",
+ &ShowerHandler::PDFB_, false, false, true, true, false);
}
void ShowerHandler::cascade() {
+ tcPDFPtr first = firstPDF().pdf();
+ tcPDFPtr second = secondPDF().pdf();
+
+ if ( PDFA_ ) first = PDFA_;
+ if ( PDFB_ ) second = PDFB_;
+
+ resetPDFs(make_pair(first,second));
+
// get the incoming partons
tPPair incomingPartons =
eventHandler()->currentCollision()->primarySubProcess()->incoming();
// and the parton bins
PBIPair incomingBins =
make_pair(lastExtractor()->partonBinInstance(incomingPartons.first),
lastExtractor()->partonBinInstance(incomingPartons.second));
// and the incoming hadrons
tPPair incomingHadrons =
eventHandler()->currentCollision()->incoming();
// check if incoming hadron == incoming parton
// and get the incoming hadron if exists or parton otherwise
incoming_ = make_pair(incomingBins.first ?
incomingBins.first ->particle() : incomingPartons.first,
incomingBins.second ?
incomingBins.second->particle() : incomingPartons.second);
// check the collision is of the beam particles
// and if not boost collision to the right frame
// i.e. the hadron-hadron CMF of the collision
bool btotal(false);
LorentzRotation rtotal;
if(incoming_.first != incomingHadrons.first ||
incoming_.second != incomingHadrons.second ) {
btotal = true;
boostCollision(false);
}
// set the current ShowerHandler
currentHandler_ = this;
// first shower the hard process
try {
SubProPtr sub = eventHandler()->currentCollision()->primarySubProcess();
incomingPartons = cascade(sub);
}
catch(ShowerTriesVeto &veto){
throw Exception() << "Failed to generate the shower after "
<< veto.tries
<< " attempts in Evolver::showerHardProcess()"
<< Exception::eventerror;
}
// if a non-hadron collision return (both incoming non-hadronic)
if( ( !incomingBins.first||
!HadronMatcher::Check(incomingBins.first ->particle()->data()))&&
( !incomingBins.second||
!HadronMatcher::Check(incomingBins.second->particle()->data()))) {
// boost back to lab if needed
if(btotal) boostCollision(true);
// unset the current ShowerHandler
currentHandler_ = 0;
return;
}
// get the remnants for hadronic collision
pair<tRemPPtr,tRemPPtr> remnants(getRemnants(incomingBins));
// set the starting scale of the forced splitting to the PDF freezing scale
remDec_->initialize(remnants, incoming_, *currentStep(), pdfFreezingScale());
// do the first forcedSplitting
try {
remDec_->doSplit(incomingPartons, make_pair(firstPDF() .pdf(),
secondPDF().pdf()), true);
}
catch (ExtraScatterVeto) {
throw Exception() << "Remnant extraction failed in "
- << "ShowerHandler::cascade()"
+ << "ShowerHandler::cascade() from primary interaction"
<< Exception::eventerror;
}
// if no MPI return
if( !isMPIOn() ) {
remDec_->finalize();
// boost back to lab if needed
if(btotal) boostCollision(true);
// unset the current ShowerHandler
currentHandler_ = 0;
return;
}
// generate the multiple scatters use modified pdf's now:
+ // We need newpdf to be in scope through the rest of this function.
pair <PDFPtr, PDFPtr> newpdf;
setMPIPDFs(newpdf);
// additional "hard" processes
unsigned int tries(0);
// This is the loop over additional hard scatters (most of the time
// only one, but who knows...)
for(unsigned int i=1; i <= getMPIHandler()->additionalHardProcs(); i++){
//counter for regeneration
unsigned int multSecond = 0;
// generate the additional scatters
while( multSecond < getMPIHandler()->multiplicity(i) ) {
// generate the hard scatter
tStdXCombPtr lastXC = getMPIHandler()->generate(i);
SubProPtr sub = lastXC->construct();
// add to the Step
newStep()->addSubProcess(sub);
// increment the counters
tries++;
multSecond++;
if(tries == maxtryDP_)
throw Exception() << "Failed to establish the requested number "
<< "of additional hard processes. If this error "
<< "occurs often, your selection of additional "
<< "scatter is probably unphysical"
<< Exception::eventerror;
// Generate the shower. If not possible veto the event
try {
incomingPartons = cascade(sub);
}
catch(ShowerTriesVeto &veto){
throw Exception() << "Failed to generate the shower of "
<< "a secondary hard process after "
<< veto.tries
<< " attempts in Evolver::showerHardProcess()"
<< Exception::eventerror;
}
try {
// do the forcedSplitting
remDec_->doSplit(incomingPartons, make_pair(firstPDF().pdf(),
secondPDF().pdf()), false);
- // check if there is enough energy to extract
- if( remnants.first ->momentum().e() -
- incomingPartons.first ->momentum().e() < 1.0e-3*MeV ||
- remnants.second->momentum().e() -
- incomingPartons.second->momentum().e() < 1.0e-3*MeV )
- throw ExtraScatterVeto();
}
catch(ExtraScatterVeto){
//remove all particles associated with the subprocess
newStep()->removeParticle(incomingPartons.first);
newStep()->removeParticle(incomingPartons.second);
//remove the subprocess from the list
newStep()->removeSubProcess(sub);
//regenerate the scattering
multSecond--;
continue;
}
// connect with the remnants but don't set Remnant colour,
// because that causes problems due to the multiple colour lines.
if ( !remnants.first ->extract(incomingPartons.first , false) ||
!remnants.second->extract(incomingPartons.second, false) )
throw Exception() << "Remnant extraction failed in "
- << "ShowerHandler::cascade()"
+ << "ShowerHandler::cascade() for additional scatter"
<< Exception::runerror;
}
}
// the underlying event processes
unsigned int ptveto(1), veto(0);
unsigned int max(getMPIHandler()->multiplicity());
for(unsigned int i=0; i<max; i++) {
// check how often this scattering has been regenerated
if(veto > maxtryMPI_) break;
//generate PSpoint
tStdXCombPtr lastXC = getMPIHandler()->generate();
SubProPtr sub = lastXC->construct();
//If Algorithm=1 additional scatters of the signal type
// with pt > ptmin have to be vetoed
//with probability 1/(m+1), where m is the number of occurances in this event
if( getMPIHandler()->Algorithm() == 1 ){
//get the pT
Energy pt = sub->outgoing().front()->momentum().perp();
if(pt > getMPIHandler()->PtForVeto() && UseRandom::rnd() < 1./(ptveto+1) ){
ptveto++;
i--;
continue;
}
}
// add to the SubProcess to the step
newStep()->addSubProcess(sub);
// Run the Shower. If not possible veto the scattering
try {
incomingPartons = cascade(sub);
}
// discard this extra scattering, but try the next one
catch(ShowerTriesVeto) {
newStep()->removeSubProcess(sub);
//regenerate the scattering
veto++;
i--;
continue;
}
try{
//do the forcedSplitting
remDec_->doSplit(incomingPartons, make_pair(firstPDF().pdf(),
secondPDF().pdf()), false);
- // check if there is enough energy to extract
- if( remnants.first ->momentum().e() -
- incomingPartons.first ->momentum().e() < 1.0e-3*MeV ||
- remnants.second->momentum().e() -
- incomingPartons.second->momentum().e() < 1.0e-3*MeV )
- throw ExtraScatterVeto();
}
catch (ExtraScatterVeto) {
//remove all particles associated with the subprocess
newStep()->removeParticle(incomingPartons.first);
newStep()->removeParticle(incomingPartons.second);
//remove the subprocess from the list
newStep()->removeSubProcess(sub);
//regenerate the scattering
veto++;
i--;
continue;
}
//connect with the remnants but don't set Remnant colour,
//because that causes problems due to the multiple colour lines.
if ( !remnants.first ->extract(incomingPartons.first , false) ||
!remnants.second->extract(incomingPartons.second, false) )
throw Exception() << "Remnant extraction failed in "
- << "ShowerHandler::cascade()"
+ << "ShowerHandler::cascade() for MPI hard scattering"
<< Exception::runerror;
//reset veto counter
veto = 0;
}
// finalize the remnants
remDec_->finalize(getMPIHandler()->colourDisrupt(),
getMPIHandler()->softMultiplicity());
// boost back to lab if needed
if(btotal) boostCollision(true);
// unset the current ShowerHandler
currentHandler_ = 0;
}
void ShowerHandler::fillEventRecord() {
// create a new step
StepPtr pstep = newStep();
assert(!done_.empty());
assert(done_[0]->isHard());
// insert the steps
for(unsigned int ix=0;ix<done_.size();++ix) {
done_[ix]->fillEventRecord(pstep,
evolver_->isISRadiationON(),
evolver_->isFSRadiationON());
}
}
void ShowerHandler::findShoweringParticles() {
// clear the storage
hard_=ShowerTreePtr();
decay_.clear();
done_.clear();
// temporary storage of the particles
set<PPtr> hardParticles;
// outgoing particles from the hard process
PVector outgoing = currentSubProcess()->outgoing();
set<PPtr> outgoingset(outgoing.begin(),outgoing.end());
// loop over the tagged particles
tPVector thetagged;
if( firstInteraction() ){
thetagged = tagged();
}
else{
thetagged.insert(thetagged.end(),
outgoing.begin(),outgoing.end());
}
bool isHard=false;
for (tParticleVector::const_iterator
taggedP = thetagged.begin();
taggedP != thetagged.end(); ++taggedP) {
// if a remnant don't consider
if(eventHandler()->currentCollision()->isRemnant(*taggedP))
continue;
// find the parent and whether its a colourless s-channel resonance
bool isDecayProd=false;
tPPtr parent;
if(!(*taggedP)->parents().empty()) {
parent = (*taggedP)->parents()[0];
// check if from s channel decaying colourless particle
isDecayProd = decayProduct(parent);
}
// add to list of outgoing hard particles if needed
isHard |=(outgoingset.find(*taggedP) != outgoingset.end());
if(isDecayProd) hardParticles.insert(findParent(parent,isHard,outgoingset));
else hardParticles.insert(*taggedP);
}
// there must be something to shower
if(hardParticles.empty())
throw Exception() << "No particles to shower in "
<< "ShowerHandler::fillShoweringParticles"
<< Exception::eventerror;
if(!isHard)
throw Exception() << "Starting on decay not yet implemented in "
<< "ShowerHandler::findShoweringParticles()"
<< Exception::runerror;
// create the hard process ShowerTree
ParticleVector out(hardParticles.begin(),hardParticles.end());
hard_=new_ptr(ShowerTree(out, decay_));
hard_->setParents();
}
tPPair ShowerHandler::cascade(tSubProPtr sub) {
// get the current step
current_ = currentStep();
// get the current subprocess
subProcess_ = sub;
// start of the try block for the whole showering process
unsigned int countFailures=0;
while (countFailures<maxtry_) {
try {
// find the particles in the hard process and the decayed particles to shower
findShoweringParticles();
// if no hard process
if(!hard_) throw Exception() << "Shower starting with a decay"
<< "is not implemented"
<< Exception::runerror;
// perform the shower for the hard process
evolver_->showerHardProcess(hard_);
done_.push_back(hard_);
hard_->updateAfterShower(decay_);
// if no decaying particles to shower break out of the loop
if(decay_.empty()) break;
// shower the decay products
while(!decay_.empty()) {
// find particle whose production process has been showered
ShowerDecayMap::iterator dit = decay_.begin();
while(!dit->second->parent()->hasShowered() && dit!=decay_.end()) ++dit;
assert(dit!=decay_.end());
// get the particle
ShowerTreePtr decayingTree = dit->second;
// remove it from the multimap
decay_.erase(dit);
// make sure the particle has been decayed
decayingTree->decay(decay_);
// now shower the decay
evolver_->showerDecay(decayingTree);
done_.push_back(decayingTree);
decayingTree->updateAfterShower(decay_);
}
// suceeded break out of the loop
break;
}
catch (KinematicsReconstructionVeto) {
++countFailures;
}
}
// if loop exited because of too many tries, throw event away
if (countFailures >= maxtry_) {
hard_=ShowerTreePtr();
decay_.clear();
done_.clear();
throw Exception() << "Too many tries for main while loop "
<< "in ShowerHandler::cascade()."
<< Exception::eventerror;
}
//enter the particles in the event record
fillEventRecord();
// clear storage
hard_=ShowerTreePtr();
decay_.clear();
done_.clear();
// non hadronic case return
if (!HadronMatcher::Check(incoming_.first ->data()) &&
!HadronMatcher::Check(incoming_.second->data()) )
return incoming_;
// remake the remnants (needs to be after the colours are sorted
// out in the insertion into the event record)
if ( firstInteraction() ) return remakeRemnant(sub->incoming());
//Return the new pair of incoming partons. remakeRemnant is not
//necessary here, because the secondary interactions are not yet
//connected to the remnants.
return make_pair(findFirstParton(sub->incoming().first ),
findFirstParton(sub->incoming().second));
}
PPtr ShowerHandler::findParent(PPtr original, bool & isHard,
set<PPtr> outgoingset) const {
PPtr parent=original;
isHard |=(outgoingset.find(original) != outgoingset.end());
if(!original->parents().empty()) {
PPtr orig=original->parents()[0];
if(current_->find(orig)&&decayProduct(orig)) {
parent=findParent(orig,isHard,outgoingset);
}
}
return parent;
}
ShowerHandler::RemPair
ShowerHandler::getRemnants(PBIPair incomingBins) {
RemPair remnants;
// first beam particle
if(incomingBins.first&&!incomingBins.first->remnants().empty()) {
remnants.first =
dynamic_ptr_cast<tRemPPtr>(incomingBins.first->remnants()[0] );
if(remnants.first) {
ParticleVector children=remnants.first->children();
for(unsigned int ix=0;ix<children.size();++ix) {
if(children[ix]->dataPtr()==remnants.first->dataPtr())
remnants.first = dynamic_ptr_cast<RemPPtr>(children[ix]);
}
//remove existing colour lines from the remnants
if(remnants.first->colourLine())
remnants.first->colourLine()->removeColoured(remnants.first);
if(remnants.first->antiColourLine())
remnants.first->antiColourLine()->removeAntiColoured(remnants.first);
}
}
// seconnd beam particle
if(incomingBins.second&&!incomingBins. second->remnants().empty()) {
remnants.second =
dynamic_ptr_cast<tRemPPtr>(incomingBins.second->remnants()[0] );
if(remnants.second) {
ParticleVector children=remnants.second->children();
for(unsigned int ix=0;ix<children.size();++ix) {
if(children[ix]->dataPtr()==remnants.second->dataPtr())
remnants.second = dynamic_ptr_cast<RemPPtr>(children[ix]);
}
//remove existing colour lines from the remnants
if(remnants.second->colourLine())
remnants.second->colourLine()->removeColoured(remnants.second);
if(remnants.second->antiColourLine())
remnants.second->antiColourLine()->removeAntiColoured(remnants.second);
}
}
assert(remnants.first || remnants.second);
return remnants;
}
tPPair ShowerHandler::remakeRemnant(tPPair oldp){
// get the parton extractor
PartonExtractor & pex = *lastExtractor();
// get the new partons
tPPair newp = make_pair(findFirstParton(oldp.first ),
findFirstParton(oldp.second));
// if the same do nothing
if(newp == oldp) return oldp;
// Creates the new remnants and returns the new PartonBinInstances
PBIPair newbins = pex.newRemnants(oldp, newp, newStep());
newStep()->addIntermediate(newp.first);
newStep()->addIntermediate(newp.second);
// return the new partons
return newp;
}
PPtr ShowerHandler::findFirstParton(tPPtr seed) const{
if(seed->parents().empty()) return seed;
tPPtr parent = seed->parents()[0];
//if no parent there this is a loose end which will
//be connected to the remnant soon.
if(!parent || parent == incoming_.first ||
parent == incoming_.second ) return seed;
else return findFirstParton(parent);
}
bool ShowerHandler::decayProduct(tPPtr particle) const {
// must be time-like and not incoming
if(particle->momentum().m2()<=ZERO||
particle == currentSubProcess()->incoming().first||
particle == currentSubProcess()->incoming().second) return false;
// if non-coloured this is enough
if(!particle->dataPtr()->coloured()) return true;
// if coloured must be unstable
if(particle->dataPtr()->stable()) return false;
// must not be the s-channel intermediate
if(find(currentSubProcess()->incoming().first->children().begin(),
currentSubProcess()->incoming().first->children().end(),particle)!=
currentSubProcess()->incoming().first->children().end()&&
find(currentSubProcess()->incoming().second->children().begin(),
currentSubProcess()->incoming().second->children().end(),particle)!=
currentSubProcess()->incoming().second->children().end()&&
currentSubProcess()->incoming().first ->children().size()==1&&
currentSubProcess()->incoming().second->children().size()==1)
return false;
// must not have same particle type as a child
int id = particle->id();
for(unsigned int ix=0;ix<particle->children().size();++ix)
if(particle->children()[ix]->id()==id) return false;
// otherwise its a decaying particle
return true;
}
namespace {
void addChildren(tPPtr in,set<tPPtr> particles) {
particles.insert(in);
for(unsigned int ix=0;ix<in->children().size();++ix)
addChildren(in->children()[ix],particles);
}
}
void ShowerHandler::boostCollision(bool boost) {
// calculate boost from lab to rest
if(!boost) {
Lorentz5Momentum ptotal=incoming_.first ->momentum()+incoming_.second->momentum();
boost_ = LorentzRotation(-ptotal.boostVector());
Axis axis((boost_*incoming_.first ->momentum()).vect().unit());
if(axis.perp2()>0.) {
double sinth(sqrt(sqr(axis.x())+sqr(axis.y())));
boost_.rotate(acos(-axis.z()),Axis(-axis.y()/sinth,axis.x()/sinth,0.));
}
}
// first call performs the boost and second inverse
// get the particles to be boosted
set<tPPtr> particles;
addChildren(incoming_.first,particles);
addChildren(incoming_.second,particles);
// apply the boost
for(set<tPPtr>::const_iterator cit=particles.begin();
cit!=particles.end();++cit) {
(*cit)->transform(boost_);
}
if(!boost) boost_.invert();
}
+// DO NOT CHANGE THIS SIGNATURE to return the PDFPtr pair. They go out of scope!
void ShowerHandler::setMPIPDFs(pair <PDFPtr, PDFPtr> & newpdf) {
+
// first have to check for MinBiasPDF
- tcMinBiasPDFPtr first =
- dynamic_ptr_cast<tcMinBiasPDFPtr>(firstPDF().pdf());
+ tcMinBiasPDFPtr first = dynamic_ptr_cast<tcMinBiasPDFPtr>(firstPDF().pdf());
if(first)
newpdf.first = new_ptr(MPIPDF(first->originalPDF()));
else
newpdf.first = new_ptr(MPIPDF(firstPDF().pdf()));
- tcMinBiasPDFPtr second =
- dynamic_ptr_cast<tcMinBiasPDFPtr>(secondPDF().pdf());
+
+
+ tcMinBiasPDFPtr second = dynamic_ptr_cast<tcMinBiasPDFPtr>(secondPDF().pdf());
if(second)
newpdf.second = new_ptr(MPIPDF(second->originalPDF()));
else
newpdf.second = new_ptr(MPIPDF(secondPDF().pdf()));
+
+
// reset the PDFs stored in the base class
resetPDFs(newpdf);
}
diff --git a/Shower/ShowerHandler.h b/Shower/ShowerHandler.h
--- a/Shower/ShowerHandler.h
+++ b/Shower/ShowerHandler.h
@@ -1,446 +1,456 @@
// -*- C++ -*-
//
// ShowerHandler.h is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2007 The Herwig Collaboration
//
// Herwig++ is licenced under version 2 of the GPL, see COPYING for details.
// Please respect the MCnet academic guidelines, see GUIDELINES for details.
//
#ifndef HERWIG_ShowerHandler_H
#define HERWIG_ShowerHandler_H
//
// This is the declaration of the ShowerHandler class.
//
#include "ThePEG/Handlers/EventHandler.h"
#include "ThePEG/Handlers/CascadeHandler.h"
#include "Herwig++/Shower/UEBase.h"
#include "Herwig++/Shower/Base/Evolver.fh"
#include "Herwig++/Shower/Base/ShowerParticle.fh"
#include "Herwig++/Shower/Base/ShowerTree.fh"
#include "Herwig++/PDF/HwRemDecayer.fh"
#include "ThePEG/EventRecord/RemnantParticle.fh"
#include "ShowerHandler.fh"
namespace Herwig {
using namespace ThePEG;
/** \ingroup Shower
*
* This class is the main driver of the shower: it is responsible for
* the proper handling of all other specific collaborating classes
* and for the storing of the produced particles in the event record.
*
* @see \ref ShowerHandlerInterfaces "The interfaces"
*
* @see ThePEG::CascadeHandler
* @see MPIHandler
* @see HwRemDecayer
*/
class ShowerHandler: public CascadeHandler {
public:
/** Typedef for a pair of ThePEG::RemnantParticle pointers. */
typedef pair<tRemPPtr, tRemPPtr> RemPair;
/**
* The default constructor.
*/
ShowerHandler();
/**
* Destructor
*/
virtual ~ShowerHandler();
public:
/**
* The main method which manages the multiple interactions and starts
* the shower by calling cascade(sub, lastXC).
*/
virtual void cascade();
/**
* It returns true if the particle with the specified id
* is in the list of those that should be decayed during the showering
* showering.
*/
bool decaysInShower(const long id) const {
return ( particlesDecayInShower_.find( abs(id) ) !=
particlesDecayInShower_.end() );
}
public:
/**@name Methods related to PDF freezing */
//@{
/**
* Get the PDF freezing scale
*/
Energy pdfFreezingScale() const {return pdfFreezingScale_;}
//@}
public:
/** @name Functions used by the persistent I/O system. */
//@{
/**
* Function used to write out object persistently.
* @param os the persistent output stream written to.
*/
void persistentOutput(PersistentOStream & os) const;
/**
* Function used to read in object persistently.
* @param is the persistent input stream read from.
* @param version the version number of the object when written.
*/
void persistentInput(PersistentIStream & is, int version);
//@}
/**
* The standard Init function used to initialize the interfaces.
* Called exactly once for each class by the class description system
* before the main function starts or
* when this class is dynamically loaded.
*/
static void Init();
public:
/** @name Functions to access information. */
//@{
/**
* Return true if currently the primary subprocess is showered.
*/
bool firstInteraction() const {
return ( subProcess_ ==
eventHandler()->currentCollision()->primarySubProcess() );
}
/**
* Return the currently used SubProcess.
*/
tSubProPtr currentSubProcess() const {
assert(subProcess_);
return subProcess_;
}
/**
* Return true if multiple parton interactions are switched on
* and can be used for this beam setup.
*/
bool isMPIOn() const {
return MPIHandler_ && MPIHandler_->beamOK();
}
//@}
protected:
/** @name Clone Methods. */
//@{
/**
* Make a simple clone of this object.
* @return a pointer to the new object.
*/
virtual IBPtr clone() const;
/** Make a clone of this object, possibly modifying the cloned object
* to make it sane.
* @return a pointer to the new object.
*/
virtual IBPtr fullclone() const;
//@}
protected:
/**
* The main method which manages the showering of a subprocess.
*/
tPPair cascade(tSubProPtr sub);
/**
* At the end of the Showering, transform ShowerParticle objects
* into ThePEG particles and fill the event record with them.
* Notice that the parent/child relationships and the
* transformation from ShowerColourLine objects into ThePEG
* ColourLine ones must be properly handled.
*/
void fillEventRecord();
/**
* Identify the particles in the hard process and decayed particles
* which need to be showered
*/
void findShoweringParticles();
/**
* Find the final unstable time-like parent of a particle
* @param parent The ultimate parent for the decaying particle
* @param isHard Whether nay particles in chain are from the hard process
* @param outgoing The outgoing particles from the hard process
*/
PPtr findParent(PPtr parent, bool & isHard, set<PPtr> outgoing) const;
/**
* Find the parton extracted from the incoming particle after ISR
*/
PPtr findFirstParton(tPPtr seed) const;
/**
* Fix Remnant connections after ISR
*/
tPPair remakeRemnant(tPPair oldp);
/**
* Get the remnants from the ThePEG::PartonBinInstance es and
* do some checks.
*/
RemPair getRemnants(PBIPair incbins);
/**
* Make the remnant after the shower
*/
void makeRemnants();
/**
* Reset the PDF's after the hard collision has been showered
*/
void setMPIPDFs(pair <PDFPtr, PDFPtr> & newpdf);
/**
* Test for decay products
*/
bool decayProduct(tPPtr) const;
/**
* Access to the Evolver
*/
tEvolverPtr evolver() const {return evolver_;}
/**
* Boost all the particles in the collision so that the collision always occurs
* in the rest frame with the incoming particles along the z axis
*/
void boostCollision(bool boost);
protected:
/** @name Standard Interfaced functions. */
//@{
/**
* Initialize this object after the setup phase before saving an
* EventGenerator to disk.
* @throws InitException if object could not be initialized properly.
*/
virtual void doinit();
/**
* Initialize this object. Called in the run phase just before
* a run begins.
*/
virtual void doinitrun();
/**
* Called at the end of the run phase.
*/
virtual void dofinish();
//@}
private:
/**
* The static object used to initialize the description of this class.
* Indicates that this is a concrete class with persistent data.
*/
static ClassDescription<ShowerHandler> initShowerHandler;
/**
* The assignment operator is private and must never be called.
* In fact, it should not even be implemented.
*/
ShowerHandler & operator=(const ShowerHandler &);
private:
/**
* Access function for the MPIHandler, it should only be called after
* checking with isMPIOn.
*/
tUEBasePtr getMPIHandler() const {
assert(MPIHandler_);
return MPIHandler_;
}
private:
/**
* a MPIHandler to administer the creation of several (semihard)
* partonic interactions.
*/
UEBasePtr MPIHandler_;
/**
* Pointer to the evolver
*/
EvolverPtr evolver_;
/**
* Pointer to the HwRemDecayer
*/
HwRemDecPtr remDec_;
/**
+ * The PDF for beam particle A. Overrides the particle's own PDF setting.
+ */
+ PDFPtr PDFA_;
+
+ /**
+ * The PDF for beam particle B. Overrides the particle's own PDF setting.
+ */
+ PDFPtr PDFB_;
+
+ /**
* The PDF freezing scale
*/
Energy pdfFreezingScale_;
/**
* Maximum number of attempts for the
* main showering loop
*/
unsigned int maxtry_;
/**
* Maximum number of attempts for the regeneration of an additional
* scattering, before the number of scatters is reduced.
*/
unsigned int maxtryMPI_;
/**
* Maximum number of attempts for the regeneration of an additional
* hard scattering, before this event is vetoed.
*/
unsigned int maxtryDP_;
/**
* PDG codes of the particles which decay during showering
* this is fast storage for use during running
*/
set<long> particlesDecayInShower_;
/**
* PDG codes of the particles which decay during showering
* this is a vector that is interfaced so they can be changed
*/
vector<long> inputparticlesDecayInShower_;
/**
* The ShowerTree for the hard process
*/
ShowerTreePtr hard_;
/**
* The incoming beam particles for the current collision
*/
tPPair incoming_;
/**
* Typedef for the ShowerTree for the decays
*/
typedef multimap<Energy,ShowerTreePtr,std::greater<Energy> > ShowerDecayMap;
/**
* The ShowerTree for the decays
*/
ShowerDecayMap decay_;
/**
* The ShowerTrees for which the initial shower
*/
vector<ShowerTreePtr> done_;
/**
* Const pointer to the current step
*/
tcStepPtr current_;
/**
* Const pointer to the currently handeled ThePEG::SubProcess
*/
tSubProPtr subProcess_;
/**
* pointer to "this", the current ShowerHandler.
*/
static ShowerHandler * currentHandler_;
/**
* Boost to get back to the lab
*/
LorentzRotation boost_;
public:
/**
* struct that is used to catch exceptions which are thrown
* due to energy conservation issues of additional scatters
*/
struct ExtraScatterVeto {};
/**
* struct that is used to catch exceptions which are thrown
* due to fact that the Shower has been invoked more than
* a defined threshold on a certain configuration
*/
struct ShowerTriesVeto {
/** variable to store the number of attempts */
const int tries;
/** constructor */
ShowerTriesVeto(int t) : tries(t) {}
};
/**
* pointer to "this", the current ShowerHandler.
*/
static const ShowerHandler * currentHandler() {
assert(currentHandler_);
return currentHandler_;
}
};
}
#include "ThePEG/Utilities/ClassTraits.h"
namespace ThePEG {
/** @cond TRAITSPECIALIZATIONS */
/** This template specialization informs ThePEG about the
* base classes of ShowerHandler. */
template <>
struct BaseClassTrait<Herwig::ShowerHandler,1> {
/** Typedef of the first base class of ShowerHandler. */
typedef CascadeHandler NthBase;
};
/** This template specialization informs ThePEG about the name of
* the ShowerHandler class and the shared object where it is defined. */
template <>
struct ClassTraits<Herwig::ShowerHandler>
: public ClassTraitsBase<Herwig::ShowerHandler> {
/** Return a platform-independent class name */
static string className() { return "Herwig::ShowerHandler"; }
/**
* The name of a file containing the dynamic library where the class
* ShowerHandler is implemented. It may also include several, space-separated,
* libraries if the class ShowerHandler depends on other classes (base classes
* excepted). In this case the listed libraries will be dynamically
* linked in the order they are specified.
*/
static string library() { return "HwShower.so"; }
};
/** @endcond */
}
#endif /* HERWIG_ShowerHandler_H */
diff --git a/include/Makefile.am b/include/Makefile.am
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -1,38 +1,35 @@
BUILT_SOURCES = done-all-links
AUTOMAKE_OPTIONS = -Wno-portability
DIRLINKS = $(top_srcdir)/Analysis \
$(top_srcdir)/Decay \
$(top_srcdir)/Hadronization \
$(top_srcdir)/MatrixElement \
$(top_srcdir)/Models \
$(top_srcdir)/PDF \
$(top_srcdir)/PDT \
$(top_srcdir)/Shower \
$(top_srcdir)/UnderlyingEvent \
$(top_srcdir)/Utilities
-CONFIGHEADERS = $(top_builddir)/Config/HepMCHelper.h
-
LOOPTOOLHEADERS = $(top_srcdir)/Looptools/include/clooptools.h
CLEANFILES = done-all-links
-done-all-links: $(DIRLINKS) $(CONFIGHEADERS) $(LOOPTOOLHEADERS)
+done-all-links: $(DIRLINKS) $(LOOPTOOLHEADERS)
mkdir -p Herwig++/Config Herwig++/Looptools
$(LN_S) -f $(addprefix ../, $(DIRLINKS)) Herwig++
- $(LN_S) -f $(addprefix ../../, $(CONFIGHEADERS)) Herwig++/Config
$(LN_S) -f $(addprefix ../../, $(LOOPTOOLHEADERS)) Herwig++/Looptools
touch done-all-links
install-data-local:
find Herwig++ -follow \( -name '*.h' -or -name '*.icc' \
-or -name '*.tcc' -or -name '*.fh' -or -name '*.xh' \) \
-exec $(install_sh_DATA) \{\} $(DESTDIR)$(includedir)/\{\} \;
uninstall-local:
rm -rf $(DESTDIR)$(includedir)/Herwig++
clean-local:
rm -rf Herwig++
diff --git a/m4/herwig.m4 b/m4/herwig.m4
--- a/m4/herwig.m4
+++ b/m4/herwig.m4
@@ -1,393 +1,394 @@
# check for gcc bug http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34130
AC_DEFUN([HERWIG_CHECK_ABS_BUG],
[
AC_REQUIRE([HERWIG_COMPILERFLAGS])
if test "$GCC" = "yes"; then
AC_MSG_CHECKING([for gcc abs bug])
AC_RUN_IFELSE(
AC_LANG_PROGRAM(
[ int foo (int i) { return -2 * __builtin_abs(i - 2); } ],
[ if ( foo(1) != -2 || foo(3) != -2 ) return 1; ]
),
[ AC_MSG_RESULT([not found. Compiler is ok.]) ],
[
AC_MSG_RESULT([found. Builtin abs() is buggy.])
AC_MSG_CHECKING([if -fno-builtin-abs works])
oldcxxflags=$CXXFLAGS
CXXFLAGS="$CXXFLAGS -fno-builtin-abs"
AC_RUN_IFELSE(
AC_LANG_PROGRAM(
[
#include <cstdlib>
int foo (int i) { return -2 * std::abs(i - 2); }
],
[
if (foo(1) != -2 || foo(3) != -2) return 1;
]
),
[
AC_MSG_RESULT([yes. Setting -fno-builtin-abs.])
AM_CXXFLAGS="$AM_CXXFLAGS -fno-builtin-abs"
AM_CFLAGS="$AM_CFLAGS -fno-builtin-abs"
],
[
AC_MSG_RESULT([no. Setting -fno-builtin.])
AC_MSG_WARN([
*****************************************************************************
For this version of gcc, -fno-builtin-abs alone did not work to avoid the
gcc abs() bug. Instead, all gcc builtin functions are now disabled.
Update gcc if possible.
*****************************************************************************])
AM_CXXFLAGS="$AM_CXXFLAGS -fno-builtin"
AM_CFLAGS="$AM_CFLAGS -fno-builtin"
]
)
CXXFLAGS=$oldcxxflags
]
)
fi
])
dnl ##### THEPEG #####
AC_DEFUN([HERWIG_CHECK_THEPEG],
[
defaultlocation="${prefix}"
test "x$defaultlocation" = xNONE && defaultlocation="${ac_default_prefix}"
AC_MSG_CHECKING([for libThePEG in])
AC_ARG_WITH(thepeg,
AC_HELP_STRING([--with-thepeg=DIR],[location of ThePEG installation]),
[],
[with_thepeg="${defaultlocation}"])
AC_MSG_RESULT([$with_thepeg])
if test "x$with_thepeg" = "xno"; then
AC_MSG_ERROR([Cannot build Herwig++ without ThePEG. Please set --with-thepeg.])
fi
THEPEGLDFLAGS="-L${with_thepeg}/lib/ThePEG"
THEPEGPATH="${with_thepeg}"
oldldflags="$LDFLAGS"
oldlibs="$LIBS"
LDFLAGS="$LDFLAGS $THEPEGLDFLAGS"
AC_CHECK_LIB([ThePEG],[debugThePEG],[],
[AC_MSG_ERROR([No ThePEG libraries in $THEPEGLDFLAGS. Please set --with-thepeg.])])
AC_SUBST([THEPEGLIB],[-lThePEG])
AC_SUBST(THEPEGLDFLAGS)
AC_SUBST(THEPEGPATH)
LIBS="$oldlibs"
LDFLAGS="$oldldflags"
AC_MSG_CHECKING([for ThePEG headers in])
AC_ARG_WITH([thepeg-headers],
AC_HELP_STRING([--with-thepeg-headers=DIR],[location of ThePEG include directory]),
[],
[with_thepeg_headers="${with_thepeg}/include"])
AC_MSG_RESULT([$with_thepeg_headers])
if test "x$with_thepeg_headers" = "xno"; then
AC_MSG_ERROR([Cannot build Herwig++ without ThePEG headers. Please set --with-thepeg-headers.])
fi
THEPEGINCLUDE="-I$with_thepeg_headers"
oldcppflags="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $THEPEGINCLUDE"
AC_CHECK_HEADER([ThePEG/Config/ThePEG.h],[],
[AC_MSG_ERROR([No ThePEG headers in $with_thepeg_headers. Please set --with-thepeg-headers.])])
CPPFLAGS="$oldcppflags"
AC_SUBST(THEPEGINCLUDE)
])
dnl ##### FastJet #####
AC_DEFUN([HERWIG_CHECK_FASTJET],[
FASTJETPATH=""
FASTJETLIBS=""
FASTJETINCLUDE=""
LOAD_FASTJET=""
CREATE_FASTJET="#create"
AC_MSG_CHECKING([for FastJet location])
AC_ARG_WITH(fastjet,
AC_HELP_STRING([--with-fastjet=DIR],[Location of FastJet installation @<:@default=system libs@:>@]),
[],
[with_fastjet=system])
if test "x$with_fastjet" = "xno"; then
AC_MSG_RESULT([FastJet support disabled.])
elif test "x$with_fastjet" = "xsystem"; then
AC_MSG_RESULT([in system libraries])
oldlibs="$LIBS"
AC_CHECK_LIB(fastjet,main,
[],
[with_fastjet=no
AC_MSG_WARN([
FastJet not found in system libraries])
])
FASTJETLIBS="$LIBS"
LIBS=$oldlibs
else
AC_MSG_RESULT([$with_fastjet])
FASTJETPATH="$with_fastjet"
FASTJETINCLUDE="-I$with_fastjet/include"
FASTJETLIBS="-L$with_fastjet/lib -R$with_fastjet/lib -lfastjet"
fi
if test "x$with_fastjet" != "xno"; then
# Now lets see if the libraries work properly
oldLIBS="$LIBS"
oldLDFLAGS="$LDFLAGS"
oldCPPFLAGS="$CPPFLAGS"
LIBS="$LIBS $FASTJETLIBS"
LDFLAGS="$LDFLAGS"
CPPFLAGS="$CPPFLAGS $FASTJETINCLUDE"
AC_MSG_CHECKING([that FastJet works])
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <fastjet/ClusterSequence.hh>
]],[[fastjet::JetDefinition jet_def(fastjet::ee_kt_algorithm, fastjet::E_scheme, fastjet::Best); ]])],
[AC_MSG_RESULT([yes])],[AC_MSG_RESULT([no])
AC_MSG_ERROR([Use '--with-fastjet=' to set a path or use '--without-fastjet'.])
])
AC_CHECK_HEADERS([fastjet/ClusterSequence.hh])
LIBS="$oldLIBS"
LDFLAGS="$oldLDFLAGS"
CPPFLAGS="$oldCPPFLAGS"
CREATE_FASTJET="create"
LOAD_FASTJET="library HwLEPJetAnalysis.so"
fi
AC_SUBST(FASTJETINCLUDE)
AC_SUBST(CREATE_FASTJET)
AC_SUBST(LOAD_FASTJET)
AC_SUBST(FASTJETLIBS)
AM_CONDITIONAL(WANT_LIBFASTJET,[test ! -z "$FASTJETPATH"])
])
dnl ##### LOOPTOOLS #####
AC_DEFUN([HERWIG_LOOPTOOLS],
[
AC_REQUIRE([AC_PROG_FC])
AC_REQUIRE([AC_FC_LIBRARY_LDFLAGS])
AC_REQUIRE([AC_PROG_CC])
AC_REQUIRE([HERWIG_COMPILERFLAGS])
AC_MSG_CHECKING([if Looptools build works])
enable_looptools=yes
if test "x$GCC" = "xyes"; then
case "${host}" in
x86_64-*)
AM_FCFLAGS="$AM_FCFLAGS -fdefault-integer-8"
;;
esac
AC_LANG_PUSH([Fortran])
oldFCFLAGS="$FCFLAGS"
FCFLAGS="$AM_FCFLAGS"
AC_COMPILE_IFELSE(
AC_LANG_PROGRAM([],[ print *[,]"Hello"]),
[],
[AC_MSG_RESULT([no])
AC_MSG_ERROR([needs gfortran on 64bit machines])]
)
FCFLAGS="$oldFCFLAGS"
AC_LANG_POP([Fortran])
fi
AC_MSG_RESULT([$enable_looptools])
AC_SUBST([F77],[$FC])
AC_SUBST([FFLAGS],[$FCFLAGS])
AC_SUBST([AM_FFLAGS],[$AM_FCFLAGS])
AC_SUBST([FLIBS],[$FCLIBS])
])
dnl ##### PDF PATH #####
AC_DEFUN([HERWIG_PDF_PATH],
[
AC_MSG_CHECKING([which Herwig++ PDF data to use])
AC_ARG_WITH(pdf,
AC_HELP_STRING([--with-pdf=DIR],[installation path of Herwig++PDF data tarball]),
[],
[with_pdf=${prefix}]
)
-HERWIG_PDF_DEFAULT=${with_pdf}/share/Herwig++PDF/mrst/2001/lo2002.dat
-HERWIG_PDF_NLO=${with_pdf}/share/Herwig++PDF/mrst/2002/mrst2002nlo.dat
+HERWIG_PDF_PREFIX=${with_pdf}/share/Herwig++PDF/mrst
-if test -f "${HERWIG_PDF_DEFAULT}"; then
+if test -f "${HERWIG_PDF_PREFIX}/2008/mrstMCal.dat"; then
AC_MSG_RESULT([$with_pdf])
localPDFneeded=false
else
AC_MSG_RESULT([Using built-in PDF data set. For other data sets, set --with-pdf.])
- HERWIG_PDF_DEFAULT=PDF/mrst/2001/lo2002.dat
- HERWIG_PDF_NLO=PDF/mrst/2002/mrst2002nlo.dat
+ HERWIG_PDF_PREFIX=PDF/mrst
localPDFneeded=true
fi
+HERWIG_PDF_DEFAULT=${HERWIG_PDF_PREFIX}/2008/mrstMCal.dat
+HERWIG_PDF_NLO=${HERWIG_PDF_PREFIX}/2002/mrst2002nlo.dat
+
AM_CONDITIONAL(WANT_LOCAL_PDF,[test "x$localPDFneeded" = "xtrue"])
AC_SUBST(HERWIG_PDF_DEFAULT)
AC_SUBST(HERWIG_PDF_NLO)
])
dnl ###### GSL ######
AC_DEFUN([HERWIG_CHECK_GSL],
[
AC_MSG_CHECKING([for gsl location])
GSLINCLUDE=""
GSLLIBS=""
AC_ARG_WITH(gsl,
AC_HELP_STRING([--with-gsl=DIR],[location of gsl installation @<:@default=system libs@:>@]),
[],
[with_gsl=system])
if test "x$with_gsl" = "xno"; then
AC_MSG_ERROR([libgsl is required. Please install the GNU scientific library and header files.])
fi
if test "x$with_gsl" = "xsystem"; then
AC_MSG_RESULT([in system libraries])
oldlibs="$LIBS"
AC_CHECK_LIB(m,main)
AC_CHECK_LIB(gslcblas,main)
AC_CHECK_LIB(gsl,main,[],
[
AC_MSG_ERROR([Cannot find libgsl. Please install the GNU scientific library and header files or use --with-gsl=.])
]
)
GSLLIBS="$LIBS"
LIBS=$oldlibs
else
if test "`uname -m`" = "x86_64" -a -e "$with_gsl/lib64/libgsl.a" -a -d "$with_gsl/include/gsl"; then
AC_MSG_RESULT([found in $with_gsl])
GSLLIBS="-L$with_gsl/lib64 -R$with_gsl/lib64 -lgslcblas -lgsl"
GSLINCLUDE="-I$with_gsl/include"
elif test -e "$with_gsl/lib/libgsl.a" -a -d "$with_gsl/include/gsl"; then
AC_MSG_RESULT([found in $with_gsl])
GSLLIBS="-L$with_gsl/lib -R$with_gsl/lib -lgslcblas -lgsl"
GSLINCLUDE="-I$with_gsl/include"
else
AC_MSG_RESULT([not found])
AC_MSG_ERROR([Can't find $with_gsl/lib/libgsl.a or the headers in $with_gsl/include])
fi
fi
AC_SUBST(GSLINCLUDE)
AC_SUBST(GSLLIBS)
])
AC_DEFUN([HERWIG_VERSIONSTRING],
[
if test -d $srcdir/.svn; then
AC_CHECK_PROG(have_svnversion,[svnversion],[yes],[no])
fi
AM_CONDITIONAL(USE_SVNVERSION,[test "x$have_svnversion" = "xyes"])
])
dnl ##### COMPILERFLAGS #####
AC_DEFUN([HERWIG_COMPILERFLAGS],
[
AC_REQUIRE([HERWIG_CHECK_THEPEG])
AM_CPPFLAGS="-I\$(top_builddir)/include $THEPEGINCLUDE \$(GSLINCLUDE)"
AC_MSG_CHECKING([for debugging mode])
AC_ARG_ENABLE(debug,
AC_HELP_STRING([--enable-debug],[debug mode, use --enable-debug=slow for additional options that slow down the run.]),
[],
[enable_debug=no]
)
AC_MSG_RESULT([$enable_debug])
if test "x$enable_debug" = "xno"; then
AM_CPPFLAGS="$AM_CPPFLAGS -DNDEBUG"
else
debugflags="-g"
fi
dnl -Wfloat-equal -fvisibility-inlines-hidden -Wctor-dtor-privacy -Weffc++
if test -n "$GCC"; then
warnflags="-ansi -pedantic -Wall -W"
if test "x$enable_debug" = "xslow"; then
debugflags="$debugflags -fno-inline"
AM_CPPFLAGS="$AM_CPPFLAGS -D_GLIBCXX_DEBUG"
fi
fi
AC_SUBST(AM_CPPFLAGS)
AC_SUBST(AM_CFLAGS, ["$warnflags $debugflags"])
AC_SUBST(AM_CXXFLAGS,["$warnflags $debugflags"])
AC_SUBST(AM_FCFLAGS, ["$debugflags"])
AC_SUBST(AM_LDFLAGS)
])
AC_DEFUN([HERWIG_ENABLE_MODELS],
[
AC_MSG_CHECKING([for BSM models to include])
AC_ARG_ENABLE(models,
AC_HELP_STRING([--enable-models=LIST],[Comma-separated list of BSM models to enable. Options are (mssm ued rs) or --disable-models to turn them all off.]),
[],
[enable_models=all]
)
if test "x$enable_models" = "xyes" -o "x$enable_models" = "xall"; then
all=yes
fi
AC_MSG_RESULT([$enable_models])
if test ! "$all"; then
oldIFS="$IFS"
IFS=","
for i in $enable_models; do
declare $i=yes
done
IFS="$oldIFS"
fi
AC_SUBST([CREATE_BSM_ANALYSIS],["# create"])
if test "$mssm" -a "$ued"; then
CREATE_BSM_ANALYSIS="create"
fi
AM_CONDITIONAL(WANT_MSSM,[test "$mssm" -o "$all"])
AM_CONDITIONAL(WANT_UED,[test "$ued" -o "$all"])
AM_CONDITIONAL(WANT_RS,[test "$rs" -o "$all"])
])
AC_DEFUN([HERWIG_OVERVIEW],
[
FCSTRING=`$FC --version | head -1`
CXXSTRING=`$CXX --version | head -1`
CCSTRING=`$CC --version | head -1`
cat << _HW_EOF_ > config.herwig
*****************************************************
*** $PACKAGE_STRING configuration summary
*** Please include this information in bug reports!
***--------------------------------------------------
*** Prefix: $prefix
***
*** BSM models: $enable_models
*** Herwig debug mode: $enable_debug
***
*** GSL: $with_gsl
***
*** ThePEG: $with_thepeg
*** ThePEG headers: $with_thepeg_headers
***
*** Fastjet: $with_fastjet
***
*** Host: $host
*** CXX: $CXXSTRING
*** FC: $FCSTRING
*** CC: $CCSTRING
*****************************************************
_HW_EOF_
])
diff --git a/src/Herwig++.cc b/src/Herwig++.cc
--- a/src/Herwig++.cc
+++ b/src/Herwig++.cc
@@ -1,31 +1,33 @@
// -*- C++ -*-
//
// Herwig++.cc is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2007 The Herwig Collaboration
//
// Herwig++ is licenced under version 2 of the GPL, see COPYING for details.
// Please respect the MCnet academic guidelines, see GUIDELINES for details.
//
#include "HerwigRun.h"
#include <iostream>
#include "ThePEG/Utilities/Exception.h"
int main(int argc, char * argv[]) {
// HerwigRun's constructor does all the work
try {
Herwig::HerwigRun hw(argc, argv);
return hw.good() ? EXIT_SUCCESS : EXIT_FAILURE;
}
catch ( ThePEG::Exception & e ) {
+ std::cerr << argv[0] << ": ThePEG::Exception caught. "
+ << "See logfile for details.\n";
return EXIT_FAILURE;
}
catch ( std::exception & e ) {
std::cerr << argv[0] << ": " << e.what() << '\n';
return EXIT_FAILURE;
}
catch (...) {
std::cerr << argv[0] << ": Unknown exception caught.\n";
return EXIT_FAILURE;
}
}
diff --git a/src/HerwigVersion.cc b/src/HerwigVersion.cc
deleted file mode 100644
--- a/src/HerwigVersion.cc
+++ /dev/null
@@ -1,9 +0,0 @@
-#include "Herwig++/Config/Herwig.h"
-
-std::string Herwig::HerwigVersion::versionstring = "";
-
-#ifdef HERWIG_DATADIR
-std::string Herwig::HerwigVersion::pkgdatadir = HERWIG_DATADIR;
-#else
-#error "HERWIG_DATADIR must be defined."
-#endif
diff --git a/src/defaults/Analysis.in.in b/src/defaults/Analysis.in.in
--- a/src/defaults/Analysis.in.in
+++ b/src/defaults/Analysis.in.in
@@ -1,90 +1,91 @@
# @configure_input@
#########################################################
# Analysis handler setup
#
# By default, only 'Basics' is active. Add the commented
# lines to your input file to switch on other analyses.
#########################################################
mkdir /Herwig/Analysis
cd /Herwig/Analysis
library HwAnalysis.so
#
# basic analysis to check consistency of events
# (only analysis handler switched on by default)
#
create Herwig::BasicConsistency Basics
insert /Herwig/Generators/LEPGenerator:AnalysisHandlers 0 Basics
insert /Herwig/Generators/LHCGenerator:AnalysisHandlers 0 Basics
insert /Herwig/Generators/DISGenerator:AnalysisHandlers 0 Basics
#
# Analysis Handlers for hadron-hadron collisions
# (switched off by default)
#
# simple analysis of W/Z events
create Herwig::SimpleLHCAnalysis DrellYan
# simple analysis of top-antitop events
create Herwig::TTbarAnalysis TTbar
# simple analysis of gamma+jet events
create Herwig::GammaJetAnalysis GammaJet
# simple analysis of gamma-gamma events
create Herwig::GammaGammaAnalysis GammaGamma
# simple analysis of higgs+jet events
create Herwig::HiggsJetAnalysis HiggsJet
# BSM analysis of cascade decays
@CREATE_BSM_ANALYSIS@ Herwig::CascadeAnalysis Cascade HwSusy.so HwUED.so HwBSMAnalysis.so
#
# Analysis Handlers for LEP 91.2 GeV collisions
# (switched off by default)
#
# hadron multiplicities compared to LEP data
create Herwig::LEPMultiplicityCount LEPMultiplicity HwLEPAnalysis.so
# b fractions in specific hadrons
create Herwig::LEPBMultiplicity BMultiplicity HwLEPAnalysis.so
# b fragmentation functions
create Herwig::BFragmentationAnalysisHandler BFrag HwLEPAnalysis.so
# master LEP event shape analysis and object which does the work
create Herwig::EventShapesMasterAnalysis Shapes
create Herwig::EventShapes LEPShapes
set Shapes:EventShapes LEPShapes
# LEP event shapes
create Herwig::LEPEventShapes LEPEvent
set LEPEvent:EventShapes LEPShapes
insert Shapes:Slaves 0 LEPEvent
# LEP identified particles
create Herwig::IdentifiedParticleAnalysis LEPIdent
# LEP single particle analysis
create Herwig::SingleParticleAnalysis LEPSingle
set LEPSingle:EventShapes LEPShapes
insert Shapes:Slaves 0 LEPSingle
#
# Analysis Handlers for Belle and CLEO data below the Upsilon(4S)
# (switched off by default)
#
# BELLE data on charm hadron spetra
create Herwig::BELLECharmAnalysis BELLECharm HwLEPAnalysis.so
# CLEO data on charm meson spectra
create Herwig::CLEOCharmAnalysis CLEOCharm HwLEPAnalysis.so
#
# Handlers which depend on Fastjet for LEP data
# (switched off by default)
#
# four jet analysis
@CREATE_FASTJET@ Herwig::LEPFourJetsAnalysis LEPFourJet HwLEPJetAnalysis.so
# general jet analysis
@CREATE_FASTJET@ Herwig::LEPJetAnalysis LEPJet HwLEPJetAnalysis.so
#
# Handlers which depend on HepMC
# (switched off by default)
-# Schematic overview of an event (requires --with-hepmc to be set at configure time
+# Schematic overview of an event
+# (requires --with-hepmc to be set in ThePEG
# and the graphviz program 'dot' to produce a plot)
#@CREATE_HEPMC@ Herwig::GraphvizPlot Plot HwHepMCAnalysis.so
# A HepMC dump file (requires --with-hepmc to be set at configure time)
#@CREATE_HEPMC@ Herwig::HepMCFile HepMCFile HwHepMCAnalysis.so
diff --git a/src/defaults/Hadronization.in b/src/defaults/Hadronization.in
--- a/src/defaults/Hadronization.in
+++ b/src/defaults/Hadronization.in
@@ -1,95 +1,95 @@
############################################################
# Setup of default hadronization
#
# There are no user servicable parts inside.
#
# Anything that follows below should only be touched if you
# know what you're doing.
#############################################################
cd /Herwig/Particles
create ThePEG::ParticleData Cluster
setup Cluster 81 Cluster 0.00990 0.0 0.0 0.0 0 0 0 0
create ThePEG::ParticleData Remnant
setup Remnant 82 Remnant 0.00990 0.0 0.0 0.0 0 0 0 0
mkdir /Herwig/Hadronization
cd /Herwig/Hadronization
create Herwig::ClusterHadronizationHandler ClusterHadHandler
create Herwig::PartonSplitter PartonSplitter
create Herwig::ClusterFinder ClusterFinder
create Herwig::ColourReconnector ColourReconnector
create Herwig::ClusterFissioner ClusterFissioner
create Herwig::LightClusterDecayer LightClusterDecayer
create Herwig::ClusterDecayer ClusterDecayer
create Herwig::HwppSelector HadronSelector
set ClusterHadHandler:PartonSplitter PartonSplitter
set ClusterHadHandler:ClusterFinder ClusterFinder
set ClusterHadHandler:ColourReconnector ColourReconnector
set ClusterHadHandler:ClusterFissioner ClusterFissioner
set ClusterHadHandler:LightClusterDecayer LightClusterDecayer
set ClusterHadHandler:ClusterDecayer ClusterDecayer
set ClusterHadHandler:MinVirtuality2 0.1*GeV2
set ClusterHadHandler:MaxDisplacement 1.0e-10*millimeter
set ClusterHadHandler:UnderlyingEventHandler NULL
##################################################
# The UA5 soft underlying event model
# (disabled by default)
##################################################
create Herwig::UA5Handler UA5 HwUA5.so
set UA5:ClusterFissioner ClusterFissioner
set UA5:ClusterDecayer ClusterDecayer
#set ClusterHadHandler:UnderlyingEventHandler UA5
##################################################
set ClusterFissioner:HadronSelector HadronSelector
set LightClusterDecayer:HadronSelector HadronSelector
set ClusterDecayer:HadronSelector HadronSelector
set ColourReconnector:ColourReconnection No
# Clustering parameters for light quarks
-set ClusterFissioner:ClMaxLight 3.15*GeV
+set ClusterFissioner:ClMaxLight 3.25*GeV
set ClusterFissioner:ClPowLight 1.28
-set ClusterFissioner:PSplitLight 1.20
+set ClusterFissioner:PSplitLight 1.14
set ClusterDecayer:ClDirLight 1
set ClusterDecayer:ClSmrLight 0.78
# Clustering parameters for b-quarks
-set ClusterFissioner:ClMaxBottom 3.1*GeV
-set ClusterFissioner:ClPowBottom 1.18
-set ClusterFissioner:PSplitBottom 1.00
+set ClusterFissioner:ClMaxBottom 3.2*GeV
+set ClusterFissioner:ClPowBottom 1.24
+set ClusterFissioner:PSplitBottom 0.75
set ClusterDecayer:ClDirBottom 1
-set ClusterDecayer:ClSmrBottom 0.10
-set LightClusterDecayer:SingleHadronLimitBottom 0.16
+set ClusterDecayer:ClSmrBottom 0.00
+set LightClusterDecayer:SingleHadronLimitBottom 0.12
# Clustering parameters for c-quarks
-set ClusterFissioner:ClMaxCharm 3.00*GeV
+set ClusterFissioner:ClMaxCharm 2.95*GeV
set ClusterFissioner:ClPowCharm 1.52
-set ClusterFissioner:PSplitCharm 1.18
+set ClusterFissioner:PSplitCharm 1.11
set ClusterDecayer:ClDirCharm 1
set ClusterDecayer:ClSmrCharm 0.26
set LightClusterDecayer:SingleHadronLimitCharm 0.0
# Clustering parameters for exotic quarks
# (e.g. hadronizing Susy particles)
set ClusterFissioner:ClMaxExotic 2.7*GeV
set ClusterFissioner:ClPowExotic 1.46
set ClusterFissioner:PSplitExotic 1.00
set ClusterDecayer:ClDirExotic 1
set ClusterDecayer:ClSmrExotic 0.78
set LightClusterDecayer:SingleHadronLimitExotic 0.1
#
set HadronSelector:PwtDquark 1.0
set HadronSelector:PwtUquark 1.0
set HadronSelector:PwtSquark 0.68
set HadronSelector:PwtCquark 1.0
set HadronSelector:PwtBquark 1.0
set HadronSelector:PwtDIquark 0.49
-set HadronSelector:SngWt 0.77
+set HadronSelector:SngWt 0.74
set HadronSelector:DecWt 0.62
set HadronSelector:Mode 1
diff --git a/src/defaults/Shower.in b/src/defaults/Shower.in
--- a/src/defaults/Shower.in
+++ b/src/defaults/Shower.in
@@ -1,197 +1,197 @@
############################################################
# Setup of default parton shower
#
# Useful switches for users are marked near the top of
# this file.
#
# Don't edit this file directly, but reset the switches
# in your own input files!
############################################################
library HwMPI.so
library HwShower.so
mkdir /Herwig/Shower
cd /Herwig/Shower
create Herwig::ShowerHandler ShowerHandler
set ShowerHandler:MPIHandler /Herwig/UnderlyingEvent/MPIHandler
set ShowerHandler:RemDecayer /Herwig/Partons/RemnantDecayer
#####################################
# initial setup, don't change these!
#####################################
create Herwig::SplittingGenerator SplittingGenerator
create Herwig::ShowerAlphaQCD AlphaQCD
create Herwig::Evolver Evolver
create Herwig::QTildeModel ShowerModel
create Herwig::QTildeFinder PartnerFinder
create Herwig::QTildeReconstructor KinematicsReconstructor
set KinematicsReconstructor:ReconstructionOption Colour
set /Herwig/Partons/RemnantDecayer:AlphaS AlphaQCD
set ShowerHandler:Evolver Evolver
set ShowerModel:PartnerFinder PartnerFinder
set ShowerModel:KinematicsReconstructor KinematicsReconstructor
set Evolver:ShowerModel ShowerModel
set Evolver:SplittingGenerator SplittingGenerator
##################################################################
# Intrinsic pT
#
# Recommended:
# 1.9 GeV for Tevatron W/Z production.
# 2.1 GeV for LHC W/Z production at 10 TeV
# 2.2 GeV for LHC W/Z production at 14 TeV
#
# Set all parameters to 0 to disable
##################################################################
set Evolver:IntrinsicPtGaussian 1.9*GeV
set Evolver:IntrinsicPtBeta 0
set Evolver:IntrinsicPtGamma 0*GeV
set Evolver:IntrinsicPtIptmax 0*GeV
#############################################################
# Main control switches for the parton shower.
#############################################################
set SplittingGenerator:ISR Yes
set SplittingGenerator:FSR Yes
#############################################################
#############################################################
# End of interesting user servicable section.
#
# Anything that follows below should only be touched if you
# know what you're doing.
#
# Really.
#############################################################
#
# create the matrix element corrections
#
# vector boson decay
create Herwig::VectorBosonQQBarMECorrection qqbarg
insert ShowerModel:MECorrections 0 qqbarg
set qqbarg:Coupling AlphaQCD
# top decay
create Herwig::TopDecayMECorrection TopME
insert ShowerModel:MECorrections 1 TopME
set TopME:Coupling AlphaQCD
# drell-yan
create Herwig::DrellYanMECorrection DrellYan
insert ShowerModel:MECorrections 2 DrellYan
set DrellYan:Coupling AlphaQCD
# higgs
create Herwig::GGtoHMECorrection GGtoHME
insert ShowerModel:MECorrections 3 GGtoHME
set GGtoHME:Coupling AlphaQCD
#
# a few default values
set Evolver:MECorrMode 1
set AlphaQCD:ScaleFactor 1.0
set AlphaQCD:NPAlphaS 2
set AlphaQCD:Qmin 0.935
set AlphaQCD:NumberOfLoops 3
set AlphaQCD:InputOption 1
-set AlphaQCD:AlphaMZ 0.127
+set AlphaQCD:AlphaMZ 0.120
#
#
# Lets set up all the splittings
create Herwig::QtoQGSplitFn QtoQGSplitFn
create Herwig::GtoQQbarSplitFn GtoQQbarSplitFn
create Herwig::GtoGGSplitFn GtoGGSplitFn
create Herwig::QtoGQSplitFn QtoGQSplitFn
#
# Now the Sudakovs
create Herwig::QTildeSudakov SudakovCommon
set SudakovCommon:Alpha AlphaQCD
-set SudakovCommon:cutoffKinScale 2.80*GeV
+set SudakovCommon:cutoffKinScale 2.650*GeV
set SudakovCommon:PDFmax 1.0
cp SudakovCommon QtoQGSudakov
set QtoQGSudakov:SplittingFunction QtoQGSplitFn
set QtoQGSudakov:PDFmax 1.9
cp SudakovCommon GtoGGSudakov
set GtoGGSudakov:SplittingFunction GtoGGSplitFn
set GtoGGSudakov:PDFmax 2.0
cp SudakovCommon GtoQQbarSudakov
set GtoQQbarSudakov:SplittingFunction GtoQQbarSplitFn
set GtoQQbarSudakov:PDFmax 120.0
cp SudakovCommon GtobbbarSudakov
set GtobbbarSudakov:SplittingFunction GtoQQbarSplitFn
-set GtobbbarSudakov:PDFmax 4000.0
+set GtobbbarSudakov:PDFmax 40000.0
cp SudakovCommon GtoccbarSudakov
set GtoccbarSudakov:SplittingFunction GtoQQbarSplitFn
set GtoccbarSudakov:PDFmax 2000.0
cp SudakovCommon QtoGQSudakov
set QtoGQSudakov:SplittingFunction QtoGQSplitFn
cp SudakovCommon utoGuSudakov
set utoGuSudakov:SplittingFunction QtoGQSplitFn
set utoGuSudakov:PDFFactor OverOneMinusZ
set utoGuSudakov:PDFmax 5.0
cp SudakovCommon dtoGdSudakov
set dtoGdSudakov:SplittingFunction QtoGQSplitFn
set dtoGdSudakov:PDFFactor OverOneMinusZ
#
# Now add the final splittings
#
set SplittingGenerator:AddFinalSplitting u->u,g; QtoQGSudakov
set SplittingGenerator:AddFinalSplitting d->d,g; QtoQGSudakov
set SplittingGenerator:AddFinalSplitting s->s,g; QtoQGSudakov
set SplittingGenerator:AddFinalSplitting c->c,g; QtoQGSudakov
set SplittingGenerator:AddFinalSplitting b->b,g; QtoQGSudakov
set SplittingGenerator:AddFinalSplitting t->t,g; QtoQGSudakov
#
set SplittingGenerator:AddFinalSplitting g->g,g; GtoGGSudakov
#
set SplittingGenerator:AddFinalSplitting g->u,ubar; GtoQQbarSudakov
set SplittingGenerator:AddFinalSplitting g->d,dbar; GtoQQbarSudakov
set SplittingGenerator:AddFinalSplitting g->s,sbar; GtoQQbarSudakov
set SplittingGenerator:AddFinalSplitting g->c,cbar; GtoccbarSudakov
set SplittingGenerator:AddFinalSplitting g->b,bbar; GtobbbarSudakov
set SplittingGenerator:AddFinalSplitting g->t,tbar; GtoQQbarSudakov
#
# Now lets add the initial splittings. Remember the form a->b,c; means
# that particle a is the particle given and we backward branch to
# particle b which is initial state and particle c which is final state
#
set SplittingGenerator:AddInitialSplitting u->u,g; QtoQGSudakov
set SplittingGenerator:AddInitialSplitting d->d,g; QtoQGSudakov
set SplittingGenerator:AddInitialSplitting s->s,g; QtoQGSudakov
set SplittingGenerator:AddInitialSplitting c->c,g; QtoQGSudakov
set SplittingGenerator:AddInitialSplitting b->b,g; QtoQGSudakov
set SplittingGenerator:AddInitialSplitting t->t,g; QtoQGSudakov
#
set SplittingGenerator:AddInitialSplitting g->g,g; GtoGGSudakov
#
set SplittingGenerator:AddInitialSplitting g->d,dbar; GtoQQbarSudakov
set SplittingGenerator:AddInitialSplitting g->u,ubar; GtoQQbarSudakov
set SplittingGenerator:AddInitialSplitting g->s,sbar; GtoQQbarSudakov
set SplittingGenerator:AddInitialSplitting g->c,cbar; GtoccbarSudakov
set SplittingGenerator:AddInitialSplitting g->b,bbar; GtobbbarSudakov
set SplittingGenerator:AddInitialSplitting g->t,tbar; GtoQQbarSudakov
#
set SplittingGenerator:AddInitialSplitting d->g,d; dtoGdSudakov
set SplittingGenerator:AddInitialSplitting u->g,u; utoGuSudakov
set SplittingGenerator:AddInitialSplitting s->g,s; QtoGQSudakov
set SplittingGenerator:AddInitialSplitting c->g,c; QtoGQSudakov
set SplittingGenerator:AddInitialSplitting b->g,b; QtoGQSudakov
set SplittingGenerator:AddInitialSplitting t->g,t; QtoGQSudakov
set SplittingGenerator:AddInitialSplitting dbar->g,dbar; dtoGdSudakov
set SplittingGenerator:AddInitialSplitting ubar->g,ubar; utoGuSudakov
set SplittingGenerator:AddInitialSplitting sbar->g,sbar; QtoGQSudakov
set SplittingGenerator:AddInitialSplitting cbar->g,cbar; QtoGQSudakov
set SplittingGenerator:AddInitialSplitting bbar->g,bbar; QtoGQSudakov
set SplittingGenerator:AddInitialSplitting tbar->g,tbar; QtoGQSudakov
diff --git a/src/defaults/bosons.in b/src/defaults/bosons.in
--- a/src/defaults/bosons.in
+++ b/src/defaults/bosons.in
@@ -1,17 +1,17 @@
#
# file containing the particle data for the bosons
#
create ThePEG::BeamParticleData gamma
setup gamma 22 gamma 0 0. 0 0 0 0 3 1
create ThePEG::ParticleData h0
setup h0 25 h0 115 0.003196 0.03196 0 0 0 1 0
set h0:VariableRatio 1
create ThePEG::ConstituentParticleData g
-setup g 21 g 0 0. 0 0 0 8 3 1 0.9
+setup g 21 g 0 0. 0 0 0 8 3 1 0.95
create ThePEG::ParticleData Z0
setup Z0 23 Z0 91.1876 2.4952 24.952 0 0 0 3 0
create ThePEG::ParticleData W+
setup W+ 24 W+ 80.403 2.141 21.41 0 3 0 3 0
create ThePEG::ParticleData W-
setup W- -24 W- 80.403 2.141 21.41 0 -3 0 3 0
makeanti W- W+

File Metadata

Mime Type
text/x-diff
Expires
Tue, Nov 19, 2:41 PM (1 d, 12 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3804783
Default Alt Text
(622 KB)

Event Timeline