diff --git a/Decay/General/VectorCurrentDecayer.cc b/Decay/General/VectorCurrentDecayer.cc --- a/Decay/General/VectorCurrentDecayer.cc +++ b/Decay/General/VectorCurrentDecayer.cc @@ -1,273 +1,273 @@ // -*- C++ -*- // // VectorCurrentDecayer.cc is a part of Herwig - A multi-purpose Monte Carlo event generator // Copyright (C) 2002-2019 The Herwig Collaboration // // Herwig is licenced under version 3 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 VectorCurrentDecayer class. // #include "VectorCurrentDecayer.h" #include "ThePEG/Utilities/DescribeClass.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/ParVector.h" #include "ThePEG/Interface/Reference.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "Herwig/Decay/GeneralDecayMatrixElement.h" #include "Herwig/Models/General/BSMModel.h" using namespace Herwig; IBPtr VectorCurrentDecayer::clone() const { return new_ptr(*this); } IBPtr VectorCurrentDecayer::fullclone() const { return new_ptr(*this); } void VectorCurrentDecayer::persistentOutput(PersistentOStream & os) const { os << inpart_ << currentOut_ << current_ << mode_ << wgtloc_ << wgtmax_ << weights_ << cSMmed_; } void VectorCurrentDecayer::persistentInput(PersistentIStream & is, int) { is >> inpart_ >> currentOut_ >> current_ >> mode_ >> wgtloc_ >> wgtmax_ >> weights_ >> cSMmed_; } // The following static variable is needed for the type // description system in ThePEG. DescribeClass describeHerwigVectorCurrentDecayer("Herwig::VectorCurrentDecayer", "Herwig.so"); void VectorCurrentDecayer::Init() { static ClassDocumentation documentation ("The VectorCurrentDecayer class is designed for the decays of low mass vector bosons"); } void VectorCurrentDecayer::setDecayInfo(PDPtr in, const vector & outCurrent, WeakCurrentPtr current) { inpart_ = in; currentOut_ = outCurrent; current_ = current; // cast the model Ptr::ptr model = dynamic_ptr_cast::ptr>(generator()->standardModel()); bool foundU(false),foundD(false),foundS(false); // find the vertices we need and extract the couplings for(unsigned int ix = 0; ix < model->numberOfVertices(); ++ix ) { VertexBasePtr vertex = model->vertex(ix); if(vertex->getNpoint()!=3) continue; for(unsigned int iloc = 0;iloc < 3; ++iloc) { vector ext = vertex->search(iloc, in->id()); if(ext.empty()) continue; for(unsigned int ioff=0;ioffsetCoupling(sqr(in->mass()),getParticleData(1),getParticleData(-1),in); cSMmed_[0] = vertex->norm(); } else if(abs(ext[ioff])==2 && abs(ext[ioff+1])==2 && ext[ioff]==-ext[ioff+1]) { foundU = true; vertex->setCoupling(sqr(in->mass()),getParticleData(2),getParticleData(-2),in); cSMmed_[1] = vertex->norm(); } else if(abs(ext[ioff])==3 && abs(ext[ioff+1])==3 && ext[ioff]==-ext[ioff+1]) { foundS = true; vertex->setCoupling(sqr(in->mass()),getParticleData(3),getParticleData(-3),in); cSMmed_[2] = vertex->norm(); } } } } if(!foundD) { throw InitException() << "Cannot find down quark coupling in VectorCurrentDecayer::doinit()"; } if(!foundU) { throw InitException() << "Cannot find up quark coupling in VectorCurrentDecayer::doinit()"; } if(!foundS) { throw InitException() << "Cannot find strange quark coupling in VectorCurrentDecayer::doinit()"; } } int VectorCurrentDecayer::modeNumber(bool & cc, tcPDPtr parent, const tPDVector & children) const { vector id; id.push_back(parent->id()); for(unsigned int ix=0;ixid()); return modeNumber(cc,id); } void VectorCurrentDecayer::doinitrun() { current_->initrun(); DecayIntegrator::doinitrun(); } void VectorCurrentDecayer::doinit() { DecayIntegrator::doinit(); // make sure the current got initialised current_->init(); // find the mode for(unsigned int ix=0;ixnumberOfModes();++ix) { // get the external particles for this mode int iq(0),ia(0); tPDVector ptemp = current_->particles(inpart_->iCharge(),ix,iq,ia); // check this is the right mode if(ptemp.size()!=currentOut_.size()) continue; vector matched(ptemp.size(),false); bool match = true; for(unsigned int iy=0;iycreateMode(inpart_->iCharge(),tcPDPtr(),FlavourInfo(), ix,mode,0,-1,channel,inpart_->mass()); if(done) { // the maximum weight and the channel weights // the weights for the channel if(weights_.empty()) { weights_.resize(mode->channels().size(),1./(mode->channels().size())); } mode_ = ix; // special for the two body modes if(out.size()==2) { weights_.clear(); mode=new_ptr(PhaseSpaceMode(inpart_,out,1.)); } mode->maxWeight(wgtmax_); mode->setWeights(weights_); addMode(mode); } break; } } int VectorCurrentDecayer::modeNumber(bool & cc, vector id) const { // incoming particle long idtemp; tPDPtr p0=getParticleData(id[0]); idtemp = p0->CC() ? -id[0] : id[0]; if( id[0] ==inpart_->id()) cc=false; else if(idtemp==inpart_->id()) cc=true ; else return -1; vector idout; for(vector::iterator it=++id.begin();it!=id.end();++it) { idout.push_back(*it); } unsigned int icurr=current_->decayMode(idout); if(mode_==icurr) return 0; else return -1; } void VectorCurrentDecayer:: constructSpinInfo(const Particle & part, ParticleVector decay) const { VectorWaveFunction::constructSpinInfo(vectors_,const_ptr_cast(&part), Helicity::incoming,true,false); weakCurrent()->constructSpinInfo(ParticleVector(decay.begin(),decay.end())); } double VectorCurrentDecayer::me2(const int ichan, const Particle & part, const tPDVector & outgoing, const vector & momenta, MEOption meopt) const { using namespace ThePEG::Helicity; // polarization vectors for the incoming particle if(meopt==Initialize) { VectorWaveFunction::calculateWaveFunctions(vectors_,rho_, const_ptr_cast(&part), incoming,false); // fix rho if no correlations fixRho(rho_); } // work out the mapping for the hadron vector int nOut = momenta.size(); vector constants(nOut+1); vector iSpin(nOut); vector hadrons(nOut); int itemp(1); int ix(nOut); do { --ix; iSpin[ix] = outgoing[ix]->iSpin(); itemp *= iSpin[ix]; constants[ix] = itemp; hadrons[ix] = outgoing[ix]->id(); } while(ix>0); constants[nOut] = 1; Energy2 scale(sqr(part.mass())); // calculate the hadron current Energy q = part.mass(); // currents for the different flavour components vector hadronI0(current_->current(tcPDPtr(), FlavourInfo(IsoSpin::IZero, IsoSpin::I3Zero,Strangeness::Zero), mode(),ichan,q,outgoing,momenta,DecayIntegrator::Calculate)); vector hadronI1(current_->current(tcPDPtr(), FlavourInfo(IsoSpin::IOne, IsoSpin::I3Zero,Strangeness::Zero), mode(),ichan,q,outgoing,momenta,DecayIntegrator::Calculate)); vector hadronssbar(current_->current(tcPDPtr(), FlavourInfo(IsoSpin::IZero, IsoSpin::I3Zero,Strangeness::ssbar), mode(),ichan,q,outgoing,momenta,DecayIntegrator::Calculate)); // compute the matrix element GeneralDecayMEPtr newME(new_ptr(GeneralDecayMatrixElement(PDT::Spin1,iSpin))); vector ihel(momenta.size()+1); unsigned int hI0_size = hadronI0.size(); unsigned int hI1_size = hadronI1.size(); unsigned int hss_size = hadronssbar.size(); unsigned int maxsize = max(max(hadronI0.size(),hadronI1.size()),hss_size); for(unsigned int hhel=0;hhel0;--ix) { ihel[ix]=(hhel%constants[ix-1])/constants[ix]; } for(ihel[0]=0;ihel[0]<3;++ihel[0]) { Complex amp = 0.; // work on coefficients for the I1 and I0 bits if(hI0_size != 0 ) - amp += (cSMmed_[0]+cSMmed_[1])/sqrt(2.)/q*(vectors_[ihel[0]].wave().dot(hadronI0[hhel])); + amp += Complex((cSMmed_[0]+cSMmed_[1])/sqrt(2.)/q*(vectors_[ihel[0]].wave().dot(hadronI0[hhel]))); if(hI1_size !=0) - amp += (cSMmed_[0]-cSMmed_[1])/sqrt(2.)/q*(vectors_[ihel[0]].wave().dot(hadronI1[hhel])); + amp += Complex((cSMmed_[0]-cSMmed_[1])/sqrt(2.)/q*(vectors_[ihel[0]].wave().dot(hadronI1[hhel]))); if(hss_size !=0) - amp += cSMmed_[2] /q*(vectors_[ihel[0]].wave().dot(hadronssbar[hhel])); + amp += Complex(cSMmed_[2] /q*(vectors_[ihel[0]].wave().dot(hadronssbar[hhel]))); (*newME)(ihel) = amp; } } // store the matrix element ME(newME); // return the answer double output = (ME()->contract(rho_)).real(); return output; } Energy VectorCurrentDecayer::partialWidth(tPDPtr part, vector out) { vector id; id.push_back(part->id()); for(unsigned int ix=0;ixid()); bool cc; int mode=modeNumber(cc,id); imode(mode); return initializePhaseSpaceMode(mode,true,true); } diff --git a/Decay/ScalarMeson/PScalar4FermionsDecayer.cc b/Decay/ScalarMeson/PScalar4FermionsDecayer.cc --- a/Decay/ScalarMeson/PScalar4FermionsDecayer.cc +++ b/Decay/ScalarMeson/PScalar4FermionsDecayer.cc @@ -1,398 +1,398 @@ // -*- C++ -*- // // PScalar4FermionsDecayer.cc is a part of Herwig - A multi-purpose Monte Carlo event generator // Copyright (C) 2002-2019 The Herwig Collaboration // // Herwig is licenced under version 3 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 PScalar4FermionsDecayer class. // #include "PScalar4FermionsDecayer.h" #include "ThePEG/Utilities/DescribeClass.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/StandardModel/StandardModelBase.h" #include "ThePEG/PDT/DecayMode.h" #include "ThePEG/Interface/ParVector.h" #include "ThePEG/Helicity/ScalarSpinInfo.h" #include "ThePEG/Helicity/FermionSpinInfo.h" #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" #include "ThePEG/Helicity/epsilon.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "Herwig/Decay/GeneralDecayMatrixElement.h" using namespace Herwig; using namespace ThePEG::Helicity; void PScalar4FermionsDecayer::doinitrun() { DecayIntegrator::doinitrun(); if(initialize()) { for(unsigned int ix=0;ix<_incoming.size();++ix) _maxweight[ix] = mode(ix)->maxWeight(); } } PScalar4FermionsDecayer::PScalar4FermionsDecayer() : _coupling(1,0.025159062/GeV), _incoming(1,111), _outgoing1(1,11), _outgoing2(1,11), _maxweight(1,0.000234211), _includeVMD(1,2),_VMDid(1,113), _VMDmass(1,0.7758*GeV), _VMDwidth(1,0.1503*GeV), _initsize(1) { // intermediates generateIntermediates(false); } void PScalar4FermionsDecayer::doinit() { DecayIntegrator::doinit(); // check the parameters are consistent unsigned int isize=_coupling.size(); if(isize!=_incoming.size() || isize!=_outgoing1.size() || isize!=_outgoing2.size()|| isize!=_maxweight.size() || isize!=_includeVMD.size()|| isize!=_VMDid.size() || isize!=_VMDmass.size() || isize!=_VMDwidth.size()) throw InitException() << "Inconsistent parameters in PScalar4FermionsDecayer" << Exception::abortnow; // create the integration channels for each mode tPDPtr gamma=getParticleData(ParticleID::gamma); for(unsigned int ix=0;ix<_incoming.size();++ix) { tPDPtr in = getParticleData(_incoming[ix]); tPDVector out={getParticleData( _outgoing1[ix]), getParticleData(-_outgoing1[ix]), getParticleData( _outgoing2[ix]), getParticleData(-_outgoing2[ix])}; PhaseSpaceModePtr mode = new_ptr(PhaseSpaceMode(in,out,_maxweight[ix])); PhaseSpaceChannel newChannel((PhaseSpaceChannel(mode),0,gamma,0,gamma,1,1,1,2,2,3,2,4)); newChannel.setJacobian(1,PhaseSpaceChannel::PhaseSpaceResonance::Power,-1.1); newChannel.setJacobian(2,PhaseSpaceChannel::PhaseSpaceResonance::Power,-1.1); mode->addChannel(newChannel); PhaseSpaceChannel newChannel2((PhaseSpaceChannel(mode),0,gamma,0,gamma,1,3,1,2,2,1,2,4)); newChannel2.setJacobian(1,PhaseSpaceChannel::PhaseSpaceResonance::Power,-1.1); newChannel2.setJacobian(2,PhaseSpaceChannel::PhaseSpaceResonance::Power,-1.1); mode->addChannel(newChannel2); addMode(mode); } // set up the values for the VMD factor if needed (copy the default mass and width // into the array) for(unsigned ix=0;ixmass(); _VMDwidth[ix]=getParticleData(_VMDid[ix])->width(); } } } int PScalar4FermionsDecayer::modeNumber(bool & cc,tcPDPtr parent, const tPDVector & children) const { // must be four outgoing particles if(children.size()!=4) return -1; // get the id's of the outgoing particles int id[4]={0,0,0,0}; bool done[4]={false,false,false,false}; unsigned int ix(0),iy(0); // ids of the particles int id0(parent->id()),idtemp(-1),idl1(-1),idl2(-1),idt[2]; tPDVector::const_iterator pit = children.begin(); for ( ;pit!=children.end();++pit) { id[ix]=(**pit).id(); done[ix]=false; ++ix; } // find the two lepton pairs // find the first fermion ix=0; do { if( id[ix]>0 && !done[ix] ) { done[ix]=true; idtemp=id[ix]; } ++ix; } while(ix<4&&idtemp<0); if(idtemp<0) return -1; // find its antiparticle ix=0; do { if( id[ix]==-idtemp && !done[ix] ) { done[ix]=true; idl1=idtemp; } ++ix; } while( ix<4 && idl1<0 ); if(idl1<0) return -1; // find the second particle antiparticle pair for(ix=0;ix<4;++ix) { if(!done[ix]) { idt[iy]=id[ix]; ++iy; } } if(idt[0]==-idt[1]) idl2=abs(idt[0]); if(idl2<0) return -1; // loop over the modes and see if this is one of them ix=0; int imode(-1); do { if(_incoming[ix]==id0) { if((idl1==_outgoing1[ix]&&idl2==_outgoing2[ix])|| (idl2==_outgoing1[ix]&&idl1==_outgoing2[ix])) imode=ix; } ++ix; } while(imode<0&&ix<_incoming.size()); cc=false; return imode; } void PScalar4FermionsDecayer::persistentOutput(PersistentOStream & os) const { os << ounit(_coupling,1/MeV) << _incoming << _outgoing1 << _outgoing2 << _maxweight << _includeVMD << _VMDid << ounit(_VMDmass,MeV) << ounit(_VMDwidth,MeV); } void PScalar4FermionsDecayer::persistentInput(PersistentIStream & is, int) { is >> iunit(_coupling,1/MeV) >> _incoming >> _outgoing1 >> _outgoing2 >> _maxweight >> _includeVMD >> _VMDid >> iunit(_VMDmass,MeV) >> iunit(_VMDwidth,MeV); } // The following static variable is needed for the type // description system in ThePEG. DescribeClass describeHerwigPScalar4FermionsDecayer("Herwig::PScalar4FermionsDecayer", "HwSMDecay.so"); void PScalar4FermionsDecayer::Init() { static ClassDocumentation documentation ("The PScalar4FermionsDecayer class is designed for the decay" " of a pseudosclar meson to four fermions. It is intended for the decay of" "the pion to two electron-positron pairs."); static ParVector interfaceIncoming ("Incoming", "The PDG code for the incoming particle", &PScalar4FermionsDecayer::_incoming, 0, 0, 0, -10000, 10000, false, false, true); static ParVector interfaceOutcoming1 ("Outgoing1", "The PDG code for the first outgoing fermion", &PScalar4FermionsDecayer::_outgoing1, 0, 0, 0, -10000, 10000, false, false, true); static ParVector interfaceOutcoming2 ("Outgoing2", "The PDG code for the second outgoing fermion", &PScalar4FermionsDecayer::_outgoing2, 0, 0, 0, -10000, 10000, false, false, true); static ParVector interfaceCoupling ("Coupling", "The coupling for the decay mode", &PScalar4FermionsDecayer::_coupling, 1/MeV, 0, ZERO, -10000/MeV, 10000/MeV, false, false, true); static ParVector interfaceMaxWeight ("MaxWeight", "The maximum weight for the decay mode", &PScalar4FermionsDecayer::_maxweight, 0, 0, 0, -10000, 10000, false, false, true); static ParVector interfaceIncludeVMD ("IncludeVMD", "There are three options for 0 the VMD factor is not included, for 1 the factor " "is included using the default mass and width of the particle specified by" " VMDID, and for 2 the factor is included using the mass and width specified" " by VMDwidth and VMDmass.", &PScalar4FermionsDecayer::_includeVMD, 0, 0, 0, 0, 2, false, false, true); static ParVector interfaceVMDID ("VMDID", "The PDG code for the particle to be used for the VMD factor.", &PScalar4FermionsDecayer::_VMDid, 0, 0, 0, -10000, 10000, false, false, true); static ParVector interfaceVMDmass ("VMDmass", "The mass to use for the particle in the VMD factor", &PScalar4FermionsDecayer::_VMDmass, 1.*MeV, -1, ZERO, -10000*MeV, 10000*MeV, false, false, true); static ParVector interfaceVMDwidth ("VMDwidth", "The width to use for the particle in the VMD factor", &PScalar4FermionsDecayer::_VMDwidth, 1.*MeV, -1, ZERO, -10000*MeV, 10000*MeV, false, false, true); } void PScalar4FermionsDecayer:: constructSpinInfo(const Particle & part, ParticleVector decay) const { // set up the spin information for the decay products ScalarWaveFunction::constructSpinInfo(const_ptr_cast(&part), incoming,true); // set up the spin information for the decay products for(unsigned int ix=0;ix<2;++ix) { SpinorBarWaveFunction:: constructSpinInfo(_wavebar[ix],decay[2*ix ],outgoing,true); SpinorWaveFunction:: constructSpinInfo(_wave[ix] ,decay[2*ix+1],outgoing,true); } } double PScalar4FermionsDecayer::me2(const int,const Particle & part, const tPDVector &, const vector & momenta, MEOption meopt) const { if(!ME()) ME(new_ptr(GeneralDecayMatrixElement(PDT::Spin0,PDT::Spin1Half,PDT::Spin1Half, PDT::Spin1Half,PDT::Spin1Half))); bool identical((_outgoing1[imode()]==_outgoing2[imode()])); if(meopt==Initialize) { ScalarWaveFunction:: calculateWaveFunctions(_rho,const_ptr_cast(&part),incoming); } // calculate the spinors for(unsigned int ix=0;ix<2;++ix) { _wavebar[ix].resize(2); _wave [ix].resize(2); for(unsigned int ihel=0;ihel<2;++ihel) { _wavebar[ix][ihel] = HelicityFunctions::dimensionedSpinorBar(-momenta[2*ix ],ihel,Helicity::outgoing); _wave [ix][ihel] = HelicityFunctions::dimensionedSpinor (-momenta[2*ix+1],ihel,Helicity::outgoing); } } // // momenta of the outgoing photons Lorentz5Momentum poff[4]; poff[0]=momenta[0]+momenta[1]; poff[0].rescaleMass(); poff[1]=momenta[2]+momenta[3]; poff[1].rescaleMass(); if(identical) { poff[2]=momenta[2]+momenta[1]; poff[2].rescaleMass(); poff[3]=momenta[0]+momenta[3]; poff[3].rescaleMass(); } // compute the currents for the two leptonic decays LorentzPolarizationVectorE current[4][2][2]; unsigned int it,ix,iy,iz; for(iz=0;iz<2;++iz) { it = iz==0 ? 1 : 0; for(ix=0;ix<2;++ix) { for(iy=0;iy<2;++iy) { current[iz][iy][ix] = _wave[iz][ix].vectorCurrent(_wavebar[iz][iy]); // the second two currents if(identical) current[iz+2][iy][ix] = _wave[it][ix].vectorCurrent(_wavebar[iz][iy]); } } } // invariants Energy2 m12(sqr(poff[0].mass())); Energy2 m34(sqr(poff[1].mass())); Energy2 m14(ZERO), m23(ZERO); complex prop1(1./m12/m34),prop2(0./sqr(MeV2)); Complex ii(0.,1.); if(identical) { m14=poff[2].mass()*poff[2].mass(); m23=poff[3].mass()*poff[3].mass(); prop2=1./m14/m23; } // the VMD factor if needed if(_includeVMD[imode()]>0) { Energy2 mrho2(_VMDmass[imode()]*_VMDmass[imode()]); Energy2 mwrho(_VMDmass[imode()]*_VMDwidth[imode()]); prop1 = prop1*(-mrho2+ii*mwrho)/(m12-mrho2+ii*mwrho)* (-mrho2+ii*mwrho)/(m34-mrho2+ii*mwrho); if(identical) { prop2 = prop2*(-mrho2+ii*mwrho)/(m14-mrho2+ii*mwrho)* (-mrho2+ii*mwrho)/(m23-mrho2+ii*mwrho); } } // prefactor Complex pre(_coupling[imode()]*4.*Constants::pi *SM().alphaEM()*part.mass()); Complex diag; // now compute the matrix element LorentzVector > eps; vector ispin(5,0); for(ispin[1]=0; ispin[1]<2;++ispin[1]) { for(ispin[2]=0;ispin[2]<2;++ispin[2]) { for(ispin[3]=0;ispin[3]<2;++ispin[3]) { for(ispin[4]=0;ispin[4]<2;++ispin[4]) { // the first diagram eps = epsilon(current[0][ispin[1]][ispin[2]],poff[1], current[1][ispin[3]][ispin[4]]); - diag = prop1*(eps*poff[0]); + diag = Complex(prop1*(eps*poff[0])); // exchanged diagram if identical particles // (sign due normal ordering) if(identical) { eps = epsilon(current[2][ispin[1]][ispin[4]],poff[3], current[3][ispin[3]][ispin[2]]); - diag-= prop2*(eps*poff[2]); + diag-= Complex(prop2*(eps*poff[2])); } (*ME())(ispin)=pre*diag; } } } } double me=ME()->contract(_rho).real(); if(identical) me *= 0.25; return me; } // output the setup info for the particle database void PScalar4FermionsDecayer::dataBaseOutput(ofstream & output, bool header) const { if(header) output << "update decayers set parameters=\""; // parameters for the DecayIntegrator base class DecayIntegrator::dataBaseOutput(output,false); for(unsigned int ix=0;ix<_incoming.size();++ix) { if(ix<_initsize) { output << "newdef " << name() << ":Incoming " << ix << " " << _incoming[ix] << "\n"; output << "newdef " << name() << ":Outgoing1 " << ix << " " << _outgoing1[ix] << "\n"; output << "newdef " << name() << ":Outgoing2 " << ix << " " << _outgoing2[ix] << "\n"; output << "newdef " << name() << ":Coupling " << ix << " " << _coupling[ix]*MeV << "\n"; output << "newdef " << name() << ":MaxWeight " << ix << " " << _maxweight[ix] << "\n"; output << "newdef " << name() << ":IncludeVMD " << ix << " " << _includeVMD[ix] << "\n"; output << "newdef " << name() << ":VMDID " << ix << " " << _VMDid[ix] << "\n"; output << "newdef " << name() << ":VMDmass " << ix << " " << _VMDmass[ix]/MeV << "\n"; output << "newdef " << name() << ":VMDwidth " << ix << " " << _VMDwidth[ix]/MeV << "\n"; } else { output << "insert " << name() << ":Incoming " << ix << " " << _incoming[ix] << "\n"; output << "insert " << name() << ":Outgoing1 " << ix << " " << _outgoing1[ix] << "\n"; output << "insert " << name() << ":Outgoing2 " << ix << " " << _outgoing2[ix] << "\n"; output << "insert " << name() << ":Coupling " << ix << " " << _coupling[ix]*MeV << "\n"; output << "insert " << name() << ":MaxWeight " << ix << " " << _maxweight[ix] << "\n"; output << "insert " << name() << ":IncludeVMD " << ix << " " << _includeVMD[ix] << "\n"; output << "insert " << name() << ":VMDID " << ix << " " << _VMDid[ix] << "\n"; output << "insert " << name() << ":VMDmass " << ix << " " << _VMDmass[ix]/MeV << "\n"; output << "insert " << name() << ":VMDwidth " << ix << " " << _VMDwidth[ix]/MeV << "\n"; } } if(header) output << "\n\" where BINARY ThePEGName=\"" << fullName() << "\";" << endl; } diff --git a/Decay/ScalarMeson/PScalarPScalarVectorDecayer.cc b/Decay/ScalarMeson/PScalarPScalarVectorDecayer.cc --- a/Decay/ScalarMeson/PScalarPScalarVectorDecayer.cc +++ b/Decay/ScalarMeson/PScalarPScalarVectorDecayer.cc @@ -1,283 +1,283 @@ // -*- C++ -*- // // PScalarPScalarVectorDecayer.cc is a part of Herwig - A multi-purpose Monte Carlo event generator // Copyright (C) 2002-2019 The Herwig Collaboration // // Herwig is licenced under version 3 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 PScalarPScalarVectorDecayer class. // #include "PScalarPScalarVectorDecayer.h" #include "ThePEG/Utilities/DescribeClass.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/ParVector.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/PDT/DecayMode.h" #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "Herwig/Decay/TwoBodyDecayMatrixElement.h" #include "ThePEG/Helicity/HelicityFunctions.h" using namespace Herwig; using namespace ThePEG::Helicity; void PScalarPScalarVectorDecayer::doinitrun() { DecayIntegrator::doinitrun(); if(initialize()) { for(unsigned int ix=0;ix<_incoming.size();++ix) if(mode(ix)) _maxweight[ix] = mode(ix)->maxWeight(); } } PScalarPScalarVectorDecayer::PScalarPScalarVectorDecayer() { _incoming = { 100111, 100211, 100211, 100311, 100321, 100311, 100321, 100311, 100321, 100311, 100321, 100331, 100331,9020221,9020221, 10221, 10221,9030221,9030221}; _outgoingP = { -211, 111, 211, 311, 321, 321, 311, 111, 111, -211, 211, -321, -311, -321, -311, -211, 111, -211, 111}; _outgoingV = { 213, 213, 113, 113, 113, -213, 213, 313, 323, 323, 313, 323, 313, 323, 313, 20213, 20113, 20213, 20113}; _coupling = { 3.57, 3.57, 3.57, 1., 1., 1.41, 1.41, 1.55, 1.55, 2.19, 2.19, 2.92, 2.92, 0.956, 0.956, 2.68, 2.68, 1.147, 1.147}; _maxweight = { 4.5, 4.5, 4.5, 4., 4., 4., 4., 2., 2., 2., 2., 3.5, 3.5, 4., 4., 4.5, 4.5, 3.2, 3.2}; // initial size of the arrays _initsize=_incoming.size(); // intermediates generateIntermediates(false); } void PScalarPScalarVectorDecayer::doinit() { DecayIntegrator::doinit(); // check the parameters arew consistent unsigned int isize=_coupling.size(); if(isize!=_incoming.size() || isize!=_outgoingP.size()|| isize!=_outgoingV.size() || isize!=_maxweight.size()) throw InitException() << "Inconsistent parameters in PScalarPScalarVectorDecayer" << Exception::abortnow; // set up the integration channels PhaseSpaceModePtr mode; for(unsigned int ix=0;ix<_incoming.size();++ix) { tPDPtr in = getParticleData( _incoming[ix]); tPDVector out = {getParticleData(_outgoingP[ix]), getParticleData(_outgoingV[ix])}; if(in&&out[0]&&out[1]) mode = new_ptr(PhaseSpaceMode(in,out,_maxweight[ix])); else mode=PhaseSpaceModePtr(); addMode(mode); } } int PScalarPScalarVectorDecayer::modeNumber(bool & cc,tcPDPtr parent, const tPDVector & children) const { if(children.size()!=2) return -1; int id(parent->id()); int idbar = parent->CC() ? parent->CC()->id() : id; int id1(children[0]->id()); int id1bar = children[0]->CC() ? children[0]->CC()->id() : id1; int id2(children[1]->id()); int id2bar = children[1]->CC() ? children[1]->CC()->id() : id2; int imode(-1); unsigned int ix(0); cc=false; do { if(id ==_incoming[ix]) { if((id1 ==_outgoingP[ix]&&id2 ==_outgoingV[ix])|| (id2 ==_outgoingP[ix]&&id1 ==_outgoingV[ix])) imode=ix; } if(idbar==_incoming[ix]) { if((id1bar==_outgoingP[ix]&&id2bar==_outgoingV[ix])|| (id2bar==_outgoingP[ix]&&id1bar==_outgoingV[ix])) { imode=ix; cc=true; } } ++ix; } while(ix<_incoming.size()&&imode<0); return imode; } void PScalarPScalarVectorDecayer::persistentOutput(PersistentOStream & os) const { os << _coupling << _incoming << _outgoingP << _outgoingV << _maxweight; } void PScalarPScalarVectorDecayer::persistentInput(PersistentIStream & is, int) { is >> _coupling >> _incoming >> _outgoingP >> _outgoingV >> _maxweight; } // The following static variable is needed for the type // description system in ThePEG. DescribeClass describeHerwigPScalarPScalarVectorDecayer("Herwig::PScalarPScalarVectorDecayer", "HwSMDecay.so"); void PScalarPScalarVectorDecayer::Init() { static ClassDocumentation documentation ("The PScalarPScalarVectorDecayer class is designed for" " the decay of a pseduoscalar meson to two spin-1 particles."); static ParVector interfaceIncoming ("Incoming", "The PDG code for the incoming particle", &PScalarPScalarVectorDecayer::_incoming, 0, 0, 0, -10000000, 10000000, false, false, true); static ParVector interfaceOutgoingScalar ("OutgoingPScalar", "The PDG code for the outgoing pseudoscalar meson", &PScalarPScalarVectorDecayer::_outgoingP, 0, 0, 0, -10000000, 10000000, false, false, true); static ParVector interfaceOutgoingVector ("OutgoingVector", "The PDG code for the outgoing vector meson", &PScalarPScalarVectorDecayer::_outgoingV, 0, 0, 0, -10000000, 10000000, false, false, true); static ParVector interfaceCoupling ("Coupling", "The coupling for the decay mode", &PScalarPScalarVectorDecayer::_coupling, 0, 0, 0, 0., 100., false, false, true); static ParVector interfaceMaxWeight ("MaxWeight", "The maximum weight for the decay mode", &PScalarPScalarVectorDecayer::_maxweight, 0, 0, 0, 0., 100., false, false, true); } void PScalarPScalarVectorDecayer:: constructSpinInfo(const Particle & part, ParticleVector decay) const { // set up the spin information for the decay products ScalarWaveFunction::constructSpinInfo(const_ptr_cast(&part), incoming,true); ScalarWaveFunction::constructSpinInfo(decay[0],outgoing,true); VectorWaveFunction::constructSpinInfo(_vectors,decay[1], outgoing,true,false); } double PScalarPScalarVectorDecayer::me2(const int,const Particle & part, const tPDVector & outgoing, const vector & momenta, MEOption meopt) const { if(!ME()) ME(new_ptr(TwoBodyDecayMatrixElement(PDT::Spin0,PDT::Spin0,PDT::Spin1))); if(meopt==Initialize) { ScalarWaveFunction:: calculateWaveFunctions(_rho,const_ptr_cast(&part),incoming); } _vectors.resize(3); bool massless = outgoing[1]->id()==ParticleID::gamma; for(unsigned int ix=0;ix<3;++ix) { if(massless && ix==1) continue; _vectors[ix] = HelicityFunctions::polarizationVector(-momenta[1],ix,Helicity::outgoing); } // calculate the matrix element Lorentz5Momentum psum(part.momentum()+momenta[0]); for(unsigned int ix=0;ix<3;++ix) { - (*ME())(0,0,ix)=_coupling[imode()]/part.mass()*(_vectors[ix]*psum); + (*ME())(0,0,ix) = Complex(_coupling[imode()]/part.mass()*(_vectors[ix]*psum)); } double me=ME()->contract(_rho).real(); // test of the matrix element // Energy pcm = Kinematics::pstarTwoBodyDecay(part.mass(),momenta[0].mass(), // momenta[1].mass()); // double test = 4.*sqr(_coupling[imode()]*pcm/momenta[1].mass()); // cerr << "testing matrix element for " << part.PDGName() << " -> " // << outgoing[0]->PDGName() << " " << outgoing[1]->PDGName() << " " // << me << " " << (me-test)/(me+test) << "\n"; // output the answer return me; } // specify the 1-2 matrix element to be used in the running width calculation bool PScalarPScalarVectorDecayer::twoBodyMEcode(const DecayMode & dm, int & mecode, double & coupling) const { int imode(-1); int id(dm.parent()->id()); int idbar = dm.parent()->CC() ? dm.parent()->CC()->id() : id; ParticleMSet::const_iterator pit(dm.products().begin()); int id1((**pit).id()); int id1bar = (**pit).CC() ? (**pit).CC()->id() : id1; ++pit; int id2((**pit).id()); int id2bar = (**pit).CC() ? (**pit).CC()->id() : id2; unsigned int ix(0); bool order(true); do { if(id ==_incoming[ix]) { if(id1==_outgoingP[ix]&&id2==_outgoingV[ix]) { imode=ix; order=true; } if(id2==_outgoingP[ix]&&id1==_outgoingV[ix]) { imode=ix; order=false; } } if(idbar==_incoming[ix]&&imode<0) { if(id1bar==_outgoingP[ix]&&id2bar==_outgoingV[ix]) { imode=ix; order=true; } if(id2bar==_outgoingP[ix]&&id1bar==_outgoingV[ix]) { imode=ix; order=false; } } ++ix; } while(ix<_incoming.size()&&imode<0); coupling=_coupling[imode]; mecode=10; return order; } // output the setup information for the particle database void PScalarPScalarVectorDecayer::dataBaseOutput(ofstream & output, bool header) const { if(header) output << "update decayers set parameters=\""; // parameters for the DecayIntegrator base class DecayIntegrator::dataBaseOutput(output,false); // the rest of the parameters for(unsigned int ix=0;ix<_incoming.size();++ix) { if(ix<_initsize) { output << "newdef " << name() << ":Incoming " << ix << " " << _incoming[ix] << "\n"; output << "newdef " << name() << ":OutgoingPScalar " << ix << " " << _outgoingP[ix] << "\n"; output << "newdef " << name() << ":OutgoingVector " << ix << " " << _outgoingV[ix] << "\n"; output << "newdef " << name() << ":Coupling " << ix << " " << _coupling[ix] << "\n"; output << "newdef " << name() << ":MaxWeight " << ix << " " << _maxweight[ix] << "\n"; } else { output << "insert " << name() << ":Incoming " << ix << " " << _incoming[ix] << "\n"; output << "insert " << name() << ":OutgoingPScalar " << ix << " " << _outgoingP[ix] << "\n"; output << "insert " << name() << ":OutgoingVector " << ix << " " << _outgoingV[ix] << "\n"; output << "insert " << name() << ":Coupling " << ix << " " << _coupling[ix] << "\n"; output << "insert " << name() << ":MaxWeight " << ix << " " << _maxweight[ix] << "\n"; } } if(header) output << "\n\" where BINARY ThePEGName=\"" << fullName() << "\";" << endl; } diff --git a/Decay/ScalarMeson/PScalarVectorVectorDecayer.cc b/Decay/ScalarMeson/PScalarVectorVectorDecayer.cc --- a/Decay/ScalarMeson/PScalarVectorVectorDecayer.cc +++ b/Decay/ScalarMeson/PScalarVectorVectorDecayer.cc @@ -1,275 +1,275 @@ // -*- C++ -*- // // PScalarVectorVectorDecayer.cc is a part of Herwig - A multi-purpose Monte Carlo event generator // Copyright (C) 2002-2019 The Herwig Collaboration // // Herwig is licenced under version 3 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 PScalarVectorVectorDecayer class. // #include "PScalarVectorVectorDecayer.h" #include "ThePEG/Utilities/DescribeClass.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/ParVector.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "Herwig/Utilities/Kinematics.h" #include "ThePEG/PDT/DecayMode.h" #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "ThePEG/Helicity/epsilon.h" #include "Herwig/Decay/TwoBodyDecayMatrixElement.h" using namespace Herwig; using namespace ThePEG::Helicity; void PScalarVectorVectorDecayer::doinitrun() { DecayIntegrator::doinitrun(); if(initialize()) { for(unsigned int ix=0;ix<_incoming.size();++ix) _maxweight[ix] = mode(ix)->maxWeight(); } } PScalarVectorVectorDecayer::PScalarVectorVectorDecayer() : _incoming(10), _outgoing1(10), _outgoing2(10), _coupling(10), _maxweight(10) { // decay eta -> omega gamma _incoming[0] = 331; _outgoing1[0] = 223; _outgoing2[0] = 22; _coupling[0] = 0.1412/GeV; _maxweight[0] = 1.2; // decay pi -> gamma gamma _incoming[1] = 111; _outgoing1[1] = 22; _outgoing2[1] = 22; _coupling[1] = 0.0178/GeV; _maxweight[1] = 1.1; // decay eta -> gamma gamma _incoming[2] = 221; _outgoing1[2] = 22; _outgoing2[2] = 22; _coupling[2] = 0.0176/GeV; _maxweight[2] = 1.1; // decay eta' -> gamma gamma _incoming[3] = 331; _outgoing1[3] = 22; _outgoing2[3] = 22; _coupling[3] = 0.0221/GeV; _maxweight[3] = 1.1; // decay eta_c -> rho rho _incoming[4] = 441; _outgoing1[4] = 213; _outgoing2[4] = -213; _coupling[4] = 0.0525/GeV; _maxweight[4] = 2.7; _incoming[5] = 441; _outgoing1[5] = 113; _outgoing2[5] = 113; _coupling[5] = 0.0371/GeV; _maxweight[5] = 2.7; // decay eta-c -> phi phi _incoming[6] = 441; _outgoing1[6] = 333; _outgoing2[6] = 333; _coupling[6] = 0.0267/GeV; _maxweight[6] = 9.; // decay eta-c -> gamma gamma _incoming[7] = 441; _outgoing1[7] = 22; _outgoing2[7] = 22; _coupling[7] = 0.00521/GeV; _maxweight[7] = 1.2; // decay eta_c -> K* K* _incoming[8] = 441; _outgoing1[8] = 323; _outgoing2[8] = -323; _coupling[8] = 0.0308/GeV; _maxweight[8] = 5.3; _incoming[9] = 441; _outgoing1[9] = 313; _outgoing2[9] = -313; _coupling[9] = 0.0308/GeV; _maxweight[9] = 5.3; // initial size of the vectors _initsize = _incoming.size(); // intermediates generateIntermediates(false); } void PScalarVectorVectorDecayer::doinit() { DecayIntegrator::doinit(); // check the parameters arew consistent unsigned int isize(_coupling.size()); if(isize!=_incoming.size() || isize!=_outgoing1.size()|| isize!=_outgoing2.size() || isize!=_maxweight.size()) throw InitException() << "Inconsistent parameters in PScalarVectorVectorDecayer" << Exception::abortnow; // set up the integration channels vector wgt; PhaseSpaceModePtr mode; for(unsigned int ix=0;ix<_incoming.size();++ix) { tPDPtr in = getParticleData( _incoming[ix]); tPDVector out = {getParticleData(_outgoing1[ix]), getParticleData(_outgoing2[ix])}; if(in&&out[0]&&out[1]) mode = new_ptr(PhaseSpaceMode(in,out,_maxweight[ix])); else mode=PhaseSpaceModePtr(); addMode(mode); } } int PScalarVectorVectorDecayer::modeNumber(bool & cc,tcPDPtr parent, const tPDVector & children) const { cc = false; if(children.size()!=2) return -1; int id(parent->id()); int id1(children[0]->id()); int id2(children[1]->id()); unsigned int ix(0); int imode(-1); do { if(_incoming[ix]==id) { if((id1==_outgoing1[ix]&&id2==_outgoing2[ix])|| (id2==_outgoing1[ix]&&id1==_outgoing2[ix])) imode=ix; } ++ix; } while(imode<0&&ix<_incoming.size()); return imode; } void PScalarVectorVectorDecayer::persistentOutput(PersistentOStream & os) const { os << ounit(_coupling,1/GeV) << _incoming << _outgoing1 << _outgoing2 << _maxweight; } void PScalarVectorVectorDecayer::persistentInput(PersistentIStream & is, int) { is >> iunit(_coupling,1/GeV) >> _incoming >> _outgoing1 >> _outgoing2 >> _maxweight; } // The following static variable is needed for the type // description system in ThePEG. DescribeClass describeHerwigPScalarVectorVectorDecayer("Herwig::PScalarVectorVectorDecayer", "HwSMDecay.so"); void PScalarVectorVectorDecayer::Init() { static ClassDocumentation documentation ("The PScalarVectorVectorDecayer class is designed for" " the decay of a pseduoscalar meson to two spin-1 particles."); static ParVector interfaceIncoming ("Incoming", "The PDG code for the incoming particle", &PScalarVectorVectorDecayer::_incoming, 0, 0, 0, -10000000, 10000000, false, false, true); static ParVector interfaceOutcoming1 ("FirstOutgoing", "The PDG code for the first outgoing particle", &PScalarVectorVectorDecayer::_outgoing1, 0, 0, 0, -10000000, 10000000, false, false, true); static ParVector interfaceOutcoming2 ("SecondOutgoing", "The PDG code for the second outgoing particle", &PScalarVectorVectorDecayer::_outgoing2, 0, 0, 0, -10000000, 10000000, false, false, true); static ParVector interfaceCoupling ("Coupling", "The coupling for the decay mode", &PScalarVectorVectorDecayer::_coupling, 1/GeV, 0, ZERO, ZERO, 10000/GeV, false, false, true); static ParVector interfaceMaxWeight ("MaxWeight", "The maximum weight for the decay mode", &PScalarVectorVectorDecayer::_maxweight, 0, 0, 0, 0., 200., false, false, true); } void PScalarVectorVectorDecayer:: constructSpinInfo(const Particle & part, ParticleVector decay) const { // set up the spin information for the decay products ScalarWaveFunction::constructSpinInfo(const_ptr_cast(&part), incoming,true); bool photon[2]={false,false}; for(unsigned int ix=0;ix<2;++ix) photon[ix] = decay[ix]->id()==ParticleID::gamma; for(unsigned int ix=0;ix<2;++ix) VectorWaveFunction::constructSpinInfo(_vectors[ix],decay[ix], outgoing,true,photon[ix]); } double PScalarVectorVectorDecayer::me2(const int,const Particle & part, const tPDVector & outgoing, const vector & momenta, MEOption meopt) const { if(!ME()) ME(new_ptr(TwoBodyDecayMatrixElement(PDT::Spin0,PDT::Spin1,PDT::Spin1))); bool photon[2]={false,false}; for(unsigned int ix=0;ix<2;++ix) photon[ix] = outgoing[ix]->id()==ParticleID::gamma; if(meopt==Initialize) { ScalarWaveFunction:: calculateWaveFunctions(_rho,const_ptr_cast(&part),incoming); } for(unsigned int ix=0;ix<2;++ix) { _vectors[ix].resize(3); for(unsigned int ihel=0;ihel<3;++ihel) { if(photon[ix] && ihel==1) continue; _vectors[ix][ihel] = HelicityFunctions::polarizationVector(-momenta[ix],ihel,Helicity::outgoing); } } // now compute the matrix element InvEnergy2 fact(_coupling[imode()]/part.mass()); for(unsigned int ix=0;ix<3;++ix) { if(photon[0] && ix==1) continue; for(unsigned int iy=0;iy<3;++iy) { if(photon[1] && iy==1) continue; - (*ME())(0,ix,iy)=fact*epsilon(_vectors[0][ix],momenta[1], - _vectors[1][iy])*momenta[0]; + (*ME())(0,ix,iy)=Complex(fact*epsilon(_vectors[0][ix],momenta[1], + _vectors[1][iy])*momenta[0]); } } double output = ME()->contract(_rho).real(); // test of the matrix element // double test = 2.*sqr(fact*part.mass())* // sqr(Kinematics::pstarTwoBodyDecay(part.mass(),momenta[0].mass(),momenta[1].mass())); // cerr << "testing the matrix element for " << part.PDGName() << " -> " // << outgoing[0]->PDGName() << " " << outgoing[1]->PDGName() << " " // << output << " " << (output-test)/(output+test) << "\n"; return output; } // specify the 1-2 matrix element to be used in the running width calculation bool PScalarVectorVectorDecayer::twoBodyMEcode(const DecayMode & dm, int & itype, double & coupling) const { int imode(-1); int id(dm.parent()->id()); ParticleMSet::const_iterator pit(dm.products().begin()); int id1((**pit).id());++pit; int id2((**pit).id()); unsigned int ix(0); do { if(_incoming[ix]==id) { if((id1==_outgoing1[ix]&&id2==_outgoing2[ix])|| (id2==_outgoing1[ix]&&id1==_outgoing2[ix])) imode=ix; } ++ix; } while(imode<0&&ix<_incoming.size()); coupling=_coupling[imode]*dm.parent()->mass(); itype = 3; return id1==_outgoing1[imode]&&id2==_outgoing2[imode]; } // output the setup info for the particle database void PScalarVectorVectorDecayer::dataBaseOutput(ofstream & output, bool header) const { if(header) output << "update decayers set parameters=\""; // parameters for the DecayIntegrator base class DecayIntegrator::dataBaseOutput(output,false); for(unsigned int ix=0;ix<_incoming.size();++ix) { if(ix<_initsize) { output << "newdef " << name() << ":Incoming " << ix << " " << _incoming[ix] << "\n"; output << "newdef " << name() << ":FirstOutgoing " << ix << " " << _outgoing1[ix] << "\n"; output << "newdef " << name() << ":SecondOutgoing " << ix << " " << _outgoing2[ix] << "\n"; output << "newdef " << name() << ":Coupling " << ix << " " << _coupling[ix]*GeV << "\n"; output << "newdef " << name() << ":MaxWeight " << ix << " " << _maxweight[ix] << "\n"; } else { output << "insert " << name() << ":Incoming " << ix << " " << _incoming[ix] << "\n"; output << "insert " << name() << ":FirstOutgoing " << ix << " " << _outgoing1[ix] << "\n"; output << "insert " << name() << ":SecondOutgoing " << ix << " " << _outgoing2[ix] << "\n"; output << "insert " << name() << ":Coupling " << ix << " " << _coupling[ix]*GeV << "\n"; output << "insert " << name() << ":MaxWeight " << ix << " " << _maxweight[ix] << "\n"; } } if(header) output << "\n\" where BINARY ThePEGName=\"" << fullName() << "\";" << endl; } diff --git a/Decay/ScalarMeson/ScalarMesonTensorScalarDecayer.cc b/Decay/ScalarMeson/ScalarMesonTensorScalarDecayer.cc --- a/Decay/ScalarMeson/ScalarMesonTensorScalarDecayer.cc +++ b/Decay/ScalarMeson/ScalarMesonTensorScalarDecayer.cc @@ -1,281 +1,281 @@ // -*- C++ -*- // // ScalarMesonTensorScalarDecayer.cc is a part of Herwig - A multi-purpose Monte Carlo event generator // Copyright (C) 2002-2019 The Herwig Collaboration // // Herwig is licenced under version 3 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 ScalarMesonTensorScalarDecayer class. // #include "ScalarMesonTensorScalarDecayer.h" #include "ThePEG/Utilities/DescribeClass.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/ParVector.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/PDT/DecayMode.h" #include "ThePEG/Helicity/WaveFunction/TensorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h" #include "Herwig/Decay/TwoBodyDecayMatrixElement.h" using namespace Herwig; using namespace ThePEG::Helicity; void ScalarMesonTensorScalarDecayer::doinitrun() { DecayIntegrator::doinitrun(); if(initialize()) { for(unsigned int ix=0;ix<_incoming.size();++ix) if(mode(ix)) _maxweight[ix] = mode(ix)->maxWeight(); } } ScalarMesonTensorScalarDecayer::ScalarMesonTensorScalarDecayer() : _incoming(3), _outgoingT(3), _outgoingS(3), _coupling(3), _maxweight(3) { // D+ -> f_2 pi _incoming[0] = 411; _outgoingT[0] = 225; _outgoingS[0] = 211; _coupling[0] = 8.23E-7/GeV; _maxweight[0] = 5; // chi_c0 -> K*_0 K*_2 _incoming[1] = 10441; _outgoingT[1] = 325; _outgoingS[1] = -10321; _coupling[1] = 0.0217/GeV; _maxweight[1] = 5; _incoming[2] = 10441; _outgoingT[2] = 315; _outgoingS[2] = -10311; _coupling[2] = 0.0217/GeV; _maxweight[2] = 5; // initial size of the arrays _initsize=_incoming.size(); // intermediates generateIntermediates(false); } void ScalarMesonTensorScalarDecayer::doinit() { DecayIntegrator::doinit(); // check the parameters arew consistent unsigned int isize=_coupling.size(); if(isize!=_incoming.size() || isize!=_outgoingT.size()|| isize!=_outgoingS.size() || isize!=_maxweight.size()) throw InitException() << "Inconsistent parameters in " << "ScalarMesonTensorScalarDecayer" << Exception::abortnow; // set up the integration channels for(unsigned int ix=0;ix<_incoming.size();++ix) { tPDPtr in = getParticleData(_incoming[ix]); tPDVector out = {getParticleData(_outgoingT[ix]), getParticleData(_outgoingS[ix])}; PhaseSpaceModePtr mode; if(in&&out[0]&&out[1]) mode = new_ptr(PhaseSpaceMode(in,out,_maxweight[ix])); else mode=PhaseSpaceModePtr(); addMode(mode); } } int ScalarMesonTensorScalarDecayer::modeNumber(bool & cc,tcPDPtr parent, const tPDVector & children) const { if(children.size()!=2) return -1; int id0(parent->id()); int id0bar = parent->CC() ? parent->CC()->id() : id0; int id1(children[0]->id()); int id1bar = children[0]->CC() ? children[0]->CC()->id() : id1; int id2(children[1]->id()); int id2bar = children[1]->CC() ? children[1]->CC()->id() : id2; unsigned int ix(0); int imode(-1); do { if(id0 ==_incoming[ix]) { if((id1 ==_outgoingT[ix]&&id2 ==_outgoingS[ix])|| (id2 ==_outgoingT[ix]&&id1 ==_outgoingS[ix])) { imode=ix; cc=false; } } if(id0bar==_incoming[ix]&&imode<0) { if((id1bar==_outgoingT[ix]&&id2bar==_outgoingS[ix])|| (id2bar==_outgoingT[ix]&&id1bar==_outgoingS[ix])) { imode=ix; cc=true; } } ++ix; } while(ix<_incoming.size()&&imode<0); return imode; } void ScalarMesonTensorScalarDecayer::persistentOutput(PersistentOStream & os) const { os << ounit(_coupling,1/GeV) << _incoming << _outgoingT << _outgoingS << _maxweight; } void ScalarMesonTensorScalarDecayer::persistentInput(PersistentIStream & is, int) { is >> iunit(_coupling,1/GeV) >> _incoming >> _outgoingT >> _outgoingS >> _maxweight; } // The following static variable is needed for the type // description system in ThePEG. DescribeClass describeHerwigScalarMesonTensorScalarDecayer("Herwig::ScalarMesonTensorScalarDecayer", "HwSMDecay.so"); void ScalarMesonTensorScalarDecayer::Init() { static ClassDocumentation documentation ("The ScalarMesonTensorScalarDecayer class is designed for" " the decay of a pseduoscalar meson to two spin-1 particles."); static ParVector interfaceIncoming ("Incoming", "The PDG code for the incoming particle", &ScalarMesonTensorScalarDecayer::_incoming, 0, 0, 0, -10000000, 10000000, false, false, true); static ParVector interfaceOutcomingT ("OutgoingTensor", "The PDG code for the outgoing tensor", &ScalarMesonTensorScalarDecayer::_outgoingT, 0, 0, 0, -10000000, 10000000, false, false, true); static ParVector interfaceOutcomingS ("OutgoingScalar", "The PDG code for the outgoing scalar", &ScalarMesonTensorScalarDecayer::_outgoingS, 0, 0, 0, -10000000, 10000000, false, false, true); static ParVector interfaceCoupling ("Coupling", "The coupling for the decay mode", &ScalarMesonTensorScalarDecayer::_coupling, 1/GeV, 0, ZERO, ZERO, 100./GeV, false, false, true); static ParVector interfaceMaxWeight ("MaxWeight", "The maximum weight for the decay mode", &ScalarMesonTensorScalarDecayer::_maxweight, 0, 0, 0, 0., 100., false, false, true); } void ScalarMesonTensorScalarDecayer:: constructSpinInfo(const Particle & part, ParticleVector decay) const { // set up the spin information for the decay products ScalarWaveFunction::constructSpinInfo(const_ptr_cast(&part), incoming,true); TensorWaveFunction::constructSpinInfo(_tensors,decay[0], outgoing,true,false); ScalarWaveFunction::constructSpinInfo(decay[1],outgoing,true); } double ScalarMesonTensorScalarDecayer::me2(const int,const Particle & part, const tPDVector & outgoing, const vector & momenta, MEOption meopt) const { if(!ME()) ME(new_ptr(TwoBodyDecayMatrixElement(PDT::Spin0,PDT::Spin2,PDT::Spin0))); if(meopt==Initialize) { ScalarWaveFunction:: calculateWaveFunctions(_rho,const_ptr_cast(&part),incoming); } TensorWaveFunction twave(momenta[0],outgoing[0],Helicity::outgoing); _tensors.resize(5); for(unsigned int ihel=0;ihel<5;++ihel) { twave.reset(ihel); _tensors[ihel] = twave.wave(); } // calculate the matrix element InvEnergy2 fact(_coupling[imode()]/part.mass()); LorentzPolarizationVectorE vtemp; for(unsigned int ix=0;ix<5;++ix) { vtemp = _tensors[ix]*part.momentum(); - (*ME())(0,ix,0) = fact * momenta[1].dot(vtemp); + (*ME())(0,ix,0) = Complex(fact * momenta[1].dot(vtemp)); } double me = ME()->contract(_rho).real(); // // test of the matrix element // Energy pcm = Kinematics::pstarTwoBodyDecay(part.mass(),momenta[0].mass(), // momenta[1].mass()); // double test = 2.*pow<4,1>(pcm)*sqr(_coupling[imode()]*part.mass())/ // 3./pow<4,1>(momenta[0].mass()); // cerr << "testing matrix element for " << part.PDGName() << " -> " // << outgoing[0]->PDGName() << " " << outgoing[1]->PDGName() << " " // << me << " " << (me-test)/(me+test) << "\n"; // output the answer return me; } // specify the 1-2 matrix element to be used in the running width calculation bool ScalarMesonTensorScalarDecayer::twoBodyMEcode(const DecayMode & dm, int & itype, double & coupling) const { int id(dm.parent()->id()); int idbar = dm.parent()->CC() ? dm.parent()->CC()->id() : id; ParticleMSet::const_iterator pit(dm.products().begin()); int id1((**pit).id()); int id1bar = (**pit).CC() ? (**pit).CC()->id() : id1; ++pit; int id2((**pit).id()); int id2bar = (**pit).CC() ? (**pit).CC()->id() : id2; unsigned int ix(0); bool order(false); int imode(-1); do { if(id ==_incoming[ix]) { if(id1==_outgoingT[ix]&&id2==_outgoingS[ix]) { imode=ix; order=true; } if(id2==_outgoingT[ix]&&id1==_outgoingS[ix]) { imode=ix; order=false; } } if(idbar==_incoming[ix]&&imode<0) { if(id1bar==_outgoingT[ix]&&id2bar==_outgoingS[ix]) { imode=ix; order=true; } if(id2bar==_outgoingT[ix]&&id1bar==_outgoingS[ix]) { imode=ix; order=false; } } ++ix; } while(ix<_incoming.size()&&imode<0); coupling=_coupling[imode]*dm.parent()->mass(); itype = 11; return order; } // output the setup information for the particle database void ScalarMesonTensorScalarDecayer::dataBaseOutput(ofstream & output, bool header) const { if(header) output << "update decayers set parameters=\""; // parameters for the DecayIntegrator base class DecayIntegrator::dataBaseOutput(output,false); // the rest of the parameters for(unsigned int ix=0;ix<_incoming.size();++ix) { if(ix<_initsize) { output << "newdef " << name() << ":Incoming " << ix << " " << _incoming[ix] << "\n"; output << "newdef " << name() << ":OutgoingTensor " << ix << " " << _outgoingT[ix] << "\n"; output << "newdef " << name() << ":OutgoingScalar " << ix << " " << _outgoingS[ix] << "\n"; output << "newdef " << name() << ":Coupling " << ix << " " << _coupling[ix]*GeV << "\n"; output << "newdef " << name() << ":MaxWeight " << ix << " " << _maxweight[ix] << "\n"; } else { output << "insert " << name() << ":Incoming " << ix << " " << _incoming[ix] << "\n"; output << "insert " << name() << ":OutgoingTensor " << ix << " " << _outgoingT[ix] << "\n"; output << "insert " << name() << ":OutgoingScalar " << ix << " " << _outgoingS[ix] << "\n"; output << "insert " << name() << ":Coupling " << ix << " " << _coupling[ix]*GeV << "\n"; output << "insert " << name() << ":MaxWeight " << ix << " " << _maxweight[ix] << "\n"; } } if(header) output << "\n\" where BINARY ThePEGName=\"" << fullName() << "\";" << endl; } diff --git a/Decay/Tau/TauDecayer.cc b/Decay/Tau/TauDecayer.cc --- a/Decay/Tau/TauDecayer.cc +++ b/Decay/Tau/TauDecayer.cc @@ -1,360 +1,360 @@ // -*- C++ -*- // // TauDecayer.cc is a part of Herwig - A multi-purpose Monte Carlo event generator // Copyright (C) 2002-2019 The Herwig Collaboration // // Herwig is licenced under version 3 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/Utilities/DescribeClass.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 "Herwig/Decay/GeneralDecayMatrixElement.h" #include "ThePEG/Helicity/FermionSpinInfo.h" #include "ThePEG/StandardModel/StandardModelBase.h" #include "ThePEG/Helicity/HelicityFunctions.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 tPDPtr tau = getParticleData(ParticleID::tauminus); tPDPtr nu = getParticleData(ParticleID::nu_tau); Energy mtau(tau->mass()); vector channelwgts; modeMap_.clear(); for(unsigned int ix=0;ixnumberOfModes();++ix) { // get the external particles for this mode tPDVector out = {nu}; int iq(0),ia(0); tPDVector ptemp = current_->particles(-3,ix,iq,ia); out.insert(std::end(out), std::begin(ptemp), std::end(ptemp)); // the maximum weight double maxweight = wgtMax_.size()>numberModes() ? wgtMax_[numberModes()] : 1.; // create the mode PhaseSpaceModePtr mode = new_ptr(PhaseSpaceMode(tau,out,maxweight)); // create the first piece of the channel PhaseSpaceChannel channel((PhaseSpaceChannel(mode),0,1)); if(!current_->createMode(-3,tcPDPtr(),FlavourInfo(),ix,mode,1,0,channel,mtau)) continue; // the channel weights // the weights for the channel if(wgtLoc_.size()>numberModes()&& wgtLoc_[numberModes()]+mode->channels().size()<=weights_.size()) { channelwgts=vector(weights_.begin()+wgtLoc_[numberModes()], weights_.begin()+wgtLoc_[numberModes()]+mode->channels().size()); } else { channelwgts.resize(mode->channels().size(),1./(mode->channels().size())); } modeMap_.push_back(ix); // special for the two body modes if(out.size()==2) { channelwgts.clear(); mode=new_ptr(PhaseSpaceMode(tau,out,maxweight)); } mode->setWeights(channelwgts); // need to do the weights addMode(mode); } current_->reset(); current_->touch(); current_->update(); } void TauDecayer::doinitrun() { current_->initrun(); DecayIntegrator::doinitrun(); if(initialize()) { weights_.clear(); wgtLoc_.clear(); wgtMax_.clear(); for(unsigned int ix=0;ixmaxWeight()); wgtLoc_.push_back(weights_.size()); for(unsigned int iy=0;iychannels().size();++iy) { weights_.push_back(mode(ix)->channels()[iy].weight()); } } } } bool TauDecayer::accept(tcPDPtr parent, const tPDVector & children) const { bool allowed(false); // find the neutrino int idnu(0),idtemp,idin(parent->id()); vector 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 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;ixid()==ParticleID::tauplus; return imode; } void TauDecayer::persistentOutput(PersistentOStream & os) const { os << modeMap_ << current_ << wgtLoc_ << wgtMax_ << weights_ << polOpt_ << tauMpol_ << tauPpol_; } void TauDecayer::persistentInput(PersistentIStream & is, int) { is >> modeMap_ >> current_ >> wgtLoc_ >> wgtMax_ >> weights_ >> polOpt_ >> tauMpol_ >> tauPpol_; } // The following static variable is needed for the type // description system in ThePEG. DescribeClass describeHerwigTauDecayer("Herwig::TauDecayer", "HwTauDecay.so"); void TauDecayer::Init() { static ClassDocumentation documentation ("The TauDecayer class is designed to use a weak current" " to perform the decay of the tau."); static Reference interfaceWeakCurrent ("WeakCurrent", "The reference for the decay current to be used.", &TauDecayer::current_, false, false, true, false, false); static ParVector 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 interfaceWeightMax ("MaximumWeight", "The maximum weight for a given channel.", &TauDecayer::wgtMax_, 0, 0, 0, 0., 100., false, false, true); static ParVector interfaceWeights ("Weights", "The weights for the integration.", &TauDecayer::weights_, 0, 0, 0, 0., 1., false, false, true); static Switch 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 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 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); } void TauDecayer:: constructSpinInfo(const Particle & part, ParticleVector decay) const { if(part.id()==ParticleID::tauminus) { SpinorWaveFunction :: constructSpinInfo(inSpin_,const_ptr_cast(&part),incoming,true); SpinorBarWaveFunction:: constructSpinInfo(inBar_,decay[0],outgoing,true); } else { SpinorBarWaveFunction:: constructSpinInfo(inBar_ ,const_ptr_cast(&part),incoming,true); SpinorWaveFunction:: constructSpinInfo(inSpin_,decay[0],outgoing,true); } current_->constructSpinInfo(ParticleVector(decay.begin()+1,decay.end())); } // combine the currents to give the matrix element double TauDecayer::me2(const int ichan, const Particle & part, const tPDVector & outgoing, const vector & momenta, MEOption meopt) const { // map the mode to those in the current int mode(modeMap_[imode()]); // extract info on the decaying particle if(meopt==Initialize) { // spin density matrix for the decaying particle rho_ = RhoDMatrix(PDT::Spin1Half); if(part.id()==ParticleID::tauminus) SpinorWaveFunction ::calculateWaveFunctions(inSpin_,rho_, const_ptr_cast(&part), incoming); else SpinorBarWaveFunction::calculateWaveFunctions(inBar_ ,rho_, const_ptr_cast(&part), incoming); // fix rho if no correlations fixRho(rho_); if(polOpt_) { rho_(0,1) = rho_(1,0) = 0.; if(part.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(outgoing.size()+1); iSpin_ = vector(outgoing.size()); int itemp(1); unsigned int ix(outgoing.size()); do { --ix; iSpin_[ix] = outgoing[ix]->iSpin(); itemp *= iSpin_[ix]; constants_[ix] = itemp; } while(ix>0); constants_[outgoing.size()] = 1; constants_[0 ] = constants_[1]; } if(!ME()) ME(new_ptr(GeneralDecayMatrixElement(PDT::Spin1Half,iSpin_))); // calculate the spinors for the decay products if(part.id()==ParticleID::tauminus) { inBar_.resize(2); for(unsigned int ihel=0;ihel<2;++ihel) inBar_[ihel] = HelicityFunctions::dimensionedSpinorBar(-momenta[0],ihel,Helicity::outgoing); } else { inSpin_.resize(2); for(unsigned int ihel=0;ihel<2;++ihel) inSpin_[ihel] = HelicityFunctions::dimensionedSpinor (-momenta[0],ihel,Helicity::outgoing); } // calculate the hadron current Energy q; vector hadron(current_->current(tcPDPtr(),FlavourInfo(),mode,ichan,q,tPDVector(outgoing.begin()+1,outgoing.end()), vector(momenta.begin()+1,momenta.end()),meopt)); // prefactor double pre = sqr(pow(part.mass()/q,int(outgoing.size()-3))); // calculate the lepton current LorentzPolarizationVectorE lepton[2][2]; for(unsigned ix=0;ix<2;++ix) { for(unsigned iy=0;iy<2;++iy) { if(part.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 ihel(outgoing.size()+1); for(unsigned int hhel=0;hhel1;--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])* - SM().fermiConstant(); + (*ME())(ihel)= Complex(lepton[ihel[0]][ihel[1]].dot(hadron[hhel])* + SM().fermiConstant()); } } } // 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); for(ix=0;ixdataBaseOutput(output,false,true); output << "newdef " << name() << ":WeakCurrent " << current_->name() << " \n"; output << "\n\" where BINARY ThePEGName=\"" << fullName() << "\";\n"; } diff --git a/Decay/TensorMeson/TensorMesonVectorPScalarDecayer.cc b/Decay/TensorMeson/TensorMesonVectorPScalarDecayer.cc --- a/Decay/TensorMeson/TensorMesonVectorPScalarDecayer.cc +++ b/Decay/TensorMeson/TensorMesonVectorPScalarDecayer.cc @@ -1,356 +1,356 @@ // -*- C++ -*- // // TensorMesonVectorPScalarDecayer.cc is a part of Herwig - A multi-purpose Monte Carlo event generator // Copyright (C) 2002-2019 The Herwig Collaboration // // Herwig is licenced under version 3 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 TensorMesonVectorPScalarDecayer class. // #include "TensorMesonVectorPScalarDecayer.h" #include "ThePEG/Utilities/DescribeClass.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/ParVector.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/PDT/DecayMode.h" #include "ThePEG/Helicity/WaveFunction/TensorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h" #include "ThePEG/Helicity/epsilon.h" #include "Herwig/Decay/TwoBodyDecayMatrixElement.h" #include "ThePEG/Helicity/HelicityFunctions.h" using namespace Herwig; using namespace ThePEG::Helicity; void TensorMesonVectorPScalarDecayer::doinitrun() { DecayIntegrator::doinitrun(); if(initialize()){ for(unsigned int ix=0;ix<_incoming.size();++ix) if(mode(ix)) _maxweight[ix] = mode(ix)->maxWeight(); } } TensorMesonVectorPScalarDecayer::TensorMesonVectorPScalarDecayer() : _incoming(31), _outgoingV(31), _outgoingP(31), _coupling(31), _maxweight(31) { // a_2 -> rho pi _incoming[0] = 115; _outgoingV[0] = 213; _outgoingP[0] = -211; _coupling[0] = 21.1/GeV2; _maxweight[0] = 10.; _incoming[1] = 215; _outgoingV[1] = 113; _outgoingP[1] = 211; _coupling[1] = 21.1/GeV2; _maxweight[1] = 9.; _incoming[2] = 215; _outgoingV[2] = 213; _outgoingP[2] = 111; _coupling[2] = 21.1/GeV2; _maxweight[2] = 9.; // a_2+/- -> gamma pi+/- _incoming[3] = 215; _outgoingV[3] = 22; _outgoingP[3] = 211; _coupling[3] = 0.551/GeV2; _maxweight[3] = 2.; // k_2 -> K_2 omega _incoming[4] = 315; _outgoingV[4] = 223; _outgoingP[4] = 311; _coupling[4] = 11.66/GeV2; _maxweight[4] = 17.; _incoming[5] = 325; _outgoingV[5] = 223; _outgoingP[5] = 321; _coupling[5] = 11.66/GeV2; _maxweight[5] = 20.5; // k_2+/- -> K+/- gamma _incoming[6] = 325; _outgoingV[6] = 22; _outgoingP[6] = 321; _coupling[6] = 0.553/GeV2; _maxweight[6] = 2.2; // B_c2 -> B_c gamma _incoming[7] = 545; _outgoingV[7] = 22; _outgoingP[7] = 541; _coupling[7] = 0.651/GeV2; _maxweight[7] = 2.; // K_2 -> K rho _incoming[8] = 325; _outgoingV[8] = 113; _outgoingP[8] = 321; _coupling[8] = 10.14/GeV2; _maxweight[8] = 9.; _incoming[9] = 325; _outgoingV[9] = 213; _outgoingP[9] = 311; _coupling[9] = 14.33/GeV2; _maxweight[9] = 9.; _incoming[10] = 315; _outgoingV[10] = 113; _outgoingP[10] = 311; _coupling[10] = 10.14/GeV2; _maxweight[10] = 9.; _incoming[11] = 315; _outgoingV[11] = -213; _outgoingP[11] = 321; _coupling[11] = 14.33/GeV2; _maxweight[11] = 9.; // K_2 -> K* pi _incoming[12] = 325; _outgoingV[12] = 323; _outgoingP[12] = 111; _coupling[12] = 9.733/GeV2; _maxweight[12] = 13; _incoming[13] = 325; _outgoingV[13] = 313; _outgoingP[13] = 211; _coupling[13] = 13.77/GeV2; _maxweight[13] = 11; _incoming[14] = 315; _outgoingV[14] = 313; _outgoingP[14] = 111; _coupling[14] = 9.733/GeV2; _maxweight[14] = 8.; _incoming[15] = 315; _outgoingV[15] = 323; _outgoingP[15] = -211; _coupling[15] = 13.77/GeV2; _maxweight[15] = 8.; // D_2 -> D* pi _incoming[16] = 425; _outgoingV[16] = 423; _outgoingP[16] = 111; _coupling[16] = 8.035/GeV2; _maxweight[16] = 2.2; _incoming[17] = 425; _outgoingV[17] = 413; _outgoingP[17] = -211; _coupling[17] = 11.670/GeV2; _maxweight[17] = 2.4; _incoming[18] = 415; _outgoingV[18] = 413; _outgoingP[18] = 111; _coupling[18] = 6.801/GeV2; _maxweight[18] = 2.4; _incoming[19] = 415; _outgoingV[19] = 423; _outgoingP[19] = 211; _coupling[19] = 9.527/GeV2; _maxweight[19] = 2.; // D_s2 -> D* K _incoming[20] = 435; _outgoingV[20] = 423; _outgoingP[20] = 321; _coupling[20] = 13.10/GeV2; _maxweight[20] = 2.2; _incoming[21] = 435; _outgoingV[21] = 413; _outgoingP[21] = 311; _coupling[21] = 13.10/GeV2; _maxweight[21] = 2.5; // B_2 -> B* pi _incoming[22] = 525; _outgoingV[22] = 523; _outgoingP[22] = 111; _coupling[22] = 4.99/GeV2; _maxweight[22] = 2.1; _incoming[23] = 525; _outgoingV[23] = 513; _outgoingP[23] = 211; _coupling[23] = 7.059/GeV2; _maxweight[23] = 2.1; _incoming[24] = 515; _outgoingV[24] = 513; _outgoingP[24] = 111; _coupling[24] = 4.99/GeV2; _maxweight[24] = 2.1; _incoming[25] = 515; _outgoingV[25] = 523; _outgoingP[25] = -211; _coupling[25] = 7.059/GeV2; _maxweight[25] = 2.1; // D_s2 _incoming[26] = 435; _outgoingV[26] = 423; _outgoingP[26] = 321; _coupling[26] = 13.09/GeV2; _maxweight[26] = 2.2; _incoming[27] = 435; _outgoingV[27] = 413; _outgoingP[27] = 311; _coupling[27] = 13.09/GeV2; _maxweight[27] = 2.5; // B_s2 _incoming[28] = 535; _outgoingV[28] = 523; _outgoingP[28] = -321; _coupling[28] = 7.29/GeV2; _maxweight[28] = 2.4; _incoming[29] = 535; _outgoingV[29] = 513; _outgoingP[29] = -311; _coupling[29] = 9.43/GeV2; _maxweight[29] = 2.1; // upsilon_2(1d) to chi_b gamma _incoming[30] = 20555; _outgoingV[30] = 22; _outgoingP[30] = 10551; _coupling[30] = 1.11/GeV2; _maxweight[30] = 2.4; // initial size of the arrays _initsize=_incoming.size(); // intermediates generateIntermediates(false); } void TensorMesonVectorPScalarDecayer::doinit() { DecayIntegrator::doinit(); // check consistence of the parameters unsigned int isize=_incoming.size(); if(isize!=_outgoingV.size()||isize!=_outgoingP.size()|| isize!=_maxweight.size()||isize!=_coupling.size()) throw InitException() << "Inconsistent parameters TensorMesonVectorPScalarDecayer" << Exception::abortnow; // set up the integration channels PhaseSpaceModePtr mode; for(unsigned int ix=0;ix<_incoming.size();++ix) { tPDPtr in = getParticleData(_incoming[ix]); tPDVector out = {getParticleData(_outgoingV[ix]), getParticleData(_outgoingP[ix])}; if(in&&out[0]&&out[1]) mode=new_ptr(PhaseSpaceMode(in,out,_maxweight[ix])); else mode=PhaseSpaceModePtr(); addMode(mode); } } int TensorMesonVectorPScalarDecayer::modeNumber(bool & cc, tcPDPtr parent, const tPDVector & children) const { if(children.size()!=2) return -1; int id(parent->id()); int idbar = parent->CC() ? parent->CC()->id() : id; int id1(children[0]->id()); int id1bar = children[0]->CC() ? children[0]->CC()->id() : id1; int id2(children[1]->id()); int id2bar = children[1]->CC() ? children[1]->CC()->id() : id2; int imode(-1); unsigned int ix(0); cc=false; do { if(id ==_incoming[ix]) { if((id1 ==_outgoingP[ix]&&id2 ==_outgoingV[ix])|| (id2 ==_outgoingP[ix]&&id1 ==_outgoingV[ix])) imode=ix; } if(idbar==_incoming[ix]) { if((id1bar==_outgoingP[ix]&&id2bar==_outgoingV[ix])|| (id2bar==_outgoingP[ix]&&id1bar==_outgoingV[ix])) { imode=ix; cc=true; } } ++ix; } while(ix<_incoming.size()&&imode<0); return imode; } void TensorMesonVectorPScalarDecayer::persistentOutput(PersistentOStream & os) const { os << _incoming << _outgoingV << _outgoingP << _maxweight << ounit(_coupling,1/GeV2); } void TensorMesonVectorPScalarDecayer::persistentInput(PersistentIStream & is, int) { is >> _incoming >> _outgoingV >> _outgoingP >> _maxweight >> iunit(_coupling,1/GeV2); } // The following static variable is needed for the type // description system in ThePEG. DescribeClass describeHerwigTensorMesonVectorPScalarDecayer("Herwig::TensorMesonVectorPScalarDecayer", "HwTMDecay.so"); void TensorMesonVectorPScalarDecayer::Init() { static ClassDocumentation documentation ("The TensorMesonVectorPScalarDecayer class implements the" " decay of a tensor meson to a spin-1 particle and a pseduoscalar meson"); static ParVector interfaceIncoming ("Incoming", "The PDG code for the incoming particle", &TensorMesonVectorPScalarDecayer::_incoming, 0, 0, 0, -10000000, 10000000, false, false, true); static ParVector interfaceOutcomingV ("OutgoingVector", "The PDG code for the outgoing spin-1particle", &TensorMesonVectorPScalarDecayer::_outgoingV, 0, 0, 0, -10000000, 10000000, false, false, true); static ParVector interfaceOutcomingP ("OutgoingScalar", "The PDG code for the outgoing pseudoscalar meson", &TensorMesonVectorPScalarDecayer::_outgoingP, 0, 0, 0, -10000000, 10000000, false, false, true); static ParVector interfaceCoupling ("Coupling", "The coupling for the decay mode", &TensorMesonVectorPScalarDecayer::_coupling, 1/GeV2, 0, ZERO, ZERO, 100./GeV2, false, false, true); static ParVector interfaceMaxWeight ("MaxWeight", "The maximum weight for the decay mode", &TensorMesonVectorPScalarDecayer::_maxweight, 0, 0, 0, 0., 1000., false, false, true); } void TensorMesonVectorPScalarDecayer:: constructSpinInfo(const Particle & part, ParticleVector decay) const { TensorWaveFunction::constructSpinInfo(_tensors,const_ptr_cast(&part), incoming,true,false); // set up the spin information for the decay products VectorWaveFunction::constructSpinInfo(_vectors,decay[0],outgoing,true, decay[0]->id()==ParticleID::gamma); ScalarWaveFunction::constructSpinInfo(decay[1],outgoing,true); } // matrix elememt for the process double TensorMesonVectorPScalarDecayer::me2(const int,const Particle & part, const tPDVector &, const vector & momenta, MEOption meopt) const { if(!ME()) ME(new_ptr(TwoBodyDecayMatrixElement(PDT::Spin2,PDT::Spin1,PDT::Spin0))); // check for photons bool photon(_outgoingV[imode()]==ParticleID::gamma); // stuff for incoming particle if(meopt==Initialize) { _rho = RhoDMatrix(PDT::Spin2); TensorWaveFunction:: calculateWaveFunctions(_tensors,_rho,const_ptr_cast(&part), incoming,false); } _vectors.resize(3); for(unsigned int ix=0;ix<3;++ix) { if(photon && ix==1) continue; _vectors[ix] = HelicityFunctions::polarizationVector(-momenta[0],ix,Helicity::outgoing); } InvEnergy3 fact(_coupling[imode()]/part.mass()); // calculate the matrix element for(unsigned int inhel=0;inhel<5;++inhel) { for(unsigned int vhel=0;vhel<3;++vhel){ if(vhel==1&&photon) (*ME())(inhel,vhel,0)=0.; else { LorentzVector > vtemp= fact*epsilon(momenta[0],_vectors[vhel],momenta[1]); - (*ME())(inhel,vhel,0)= (momenta[1]*_tensors[inhel]).dot(vtemp); + (*ME())(inhel,vhel,0) = Complex((momenta[1]*_tensors[inhel]).dot(vtemp)); } } } double me = ME()->contract(_rho).real(); // test of the answer // Energy pcm = Kinematics::pstarTwoBodyDecay(part.mass(),momenta[0].mass(), // momenta[1].mass()); // double test = Energy4(pow<4,1>(2*pcm))*sqr( _coupling[imode()])/80.; // cout << "testing matrix element for " << part.PDGName() << " -> " // << outgoing[0]->PDGName() << " " << outgoing[1]->PDGName() << " " // << me << " " << test << " " << (me-test)/(me+test) << endl; // return the answer return me; } bool TensorMesonVectorPScalarDecayer::twoBodyMEcode(const DecayMode & dm,int & mecode, double & coupling) const { int imode(-1); int id(dm.parent()->id()); int idbar = dm.parent()->CC() ? dm.parent()->CC()->id() : id; ParticleMSet::const_iterator pit(dm.products().begin()); int id1((**pit).id()); int id1bar = (**pit).CC() ? (**pit).CC()->id() : id1; ++pit; int id2((**pit).id()); int id2bar = (**pit).CC() ? (**pit).CC()->id() : id2; unsigned int ix(0); bool order(false); do { if(id ==_incoming[ix]) { if(id1==_outgoingP[ix]&&id2==_outgoingV[ix]) { imode=ix; order=true; } if(id2==_outgoingP[ix]&&id1==_outgoingV[ix]) { imode=ix; order=false; } } if(idbar==_incoming[ix]&&imode<0) { if(id1bar==_outgoingP[ix]&&id2bar==_outgoingV[ix]) { imode=ix; order=true; } if(id2bar==_outgoingP[ix]&&id1bar==_outgoingV[ix]) { imode=ix; order=false; } } ++ix; } while(ix<_incoming.size()&&imode<0); coupling=_coupling[imode]*sqr(dm.parent()->mass()); mecode=8; return order; } void TensorMesonVectorPScalarDecayer::dataBaseOutput(ofstream & output, bool header) const { if(header) output << "update decayers set parameters=\""; // parameters for the DecayIntegrator base class DecayIntegrator::dataBaseOutput(output,false); // the rest of the parameters for(unsigned int ix=0;ix<_incoming.size();++ix) { if(ix<_initsize) { output << "newdef " << name() << ":Incoming " << ix << " " << _incoming[ix] << "\n"; output << "newdef " << name() << ":OutgoingVector " << ix << " " << _outgoingV[ix] << "\n"; output << "newdef " << name() << ":OutgoingScalar " << ix << " " << _outgoingP[ix] << "\n"; output << "newdef " << name() << ":Coupling " << ix << " " << _coupling[ix]*GeV2 << "\n"; output << "newdef " << name() << ":MaxWeight " << ix << " " << _maxweight[ix] << "\n"; } else { output << "insert " << name() << ":Incoming " << ix << " " << _incoming[ix] << "\n"; output << "insert " << name() << ":OutgoingVector " << ix << " " << _outgoingV[ix] << "\n"; output << "insert " << name() << ":OutgoingScalar " << ix << " " << _outgoingP[ix] << "\n"; output << "insert " << name() << ":Coupling " << ix << " " << _coupling[ix]*GeV2 << "\n"; output << "insert " << name() << ":MaxWeight " << ix << " " << _maxweight[ix] << "\n"; } } if(header) output << "\n\" where BINARY ThePEGName=\"" << fullName() << "\";" << endl; } diff --git a/Decay/VectorMeson/VectorMeson2BaryonsDecayer.h b/Decay/VectorMeson/VectorMeson2BaryonsDecayer.h --- a/Decay/VectorMeson/VectorMeson2BaryonsDecayer.h +++ b/Decay/VectorMeson/VectorMeson2BaryonsDecayer.h @@ -1,230 +1,230 @@ // -*- C++ -*- #ifndef Herwig_VectorMeson2BaryonsDecayer_H #define Herwig_VectorMeson2BaryonsDecayer_H // // This is the declaration of the VectorMeson2BaryonsDecayer class. // #include "Herwig/Decay/DecayIntegrator.h" #include "Herwig/Decay/PhaseSpaceMode.h" #include "ThePEG/Helicity/LorentzPolarizationVector.h" #include "ThePEG/Helicity/LorentzSpinorBar.h" #include "ThePEG/Helicity/LorentzRSSpinorBar.h" namespace Herwig { using namespace ThePEG; /** \ingroup Decay * * The VectorMeson2BaryonsDecayer class is designed for the decay * of a vector meson to a baryon-antibaryon pair. * * In this case the matrix element is taken to have the form * \f[\mathcal{M} = e_g \epsilon_\mu \bar{u}(p_f) \left[\gamma^\mu \right]u(p_{\bar{f}}).\f] * * The incoming vector mesons together with their decay products and the coupling * \f$e_g\f$, \f$G_E\f$ and the phase \f$\phi_E\f$ can be specified using the interfaces for the class. * The maximum weights * for the decays can be calculated using the Initialize interface of the * DecayIntegrator class or specified using the interface. * * The incoming and outgoing particles, couplings and maximum weights for * many of the common \f$V\to f\bar{f}\f$ decays are specified in the default * constructor. * * @see DecayIntegrator * @see \ref VectorMeson2BaryonsDecayerInterfaces "The interfaces" * defined for VectorMeson2BaryonsDecayer. * */ class VectorMeson2BaryonsDecayer: public DecayIntegrator { public: /** * The default constructor. */ VectorMeson2BaryonsDecayer(); /** * 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. * @param ichan The channel we are calculating the matrix element for. * @param part The decaying Particle. * @param outgoing The particles produced in the decay * @param momenta The momenta of 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. */ double me2(const int ichan,const Particle & part, const tPDVector & outgoing, const vector & momenta, MEOption meopt) const; /** * Construct the SpinInfos for the particles produced in the decay */ virtual void constructSpinInfo(const Particle & part, ParticleVector outgoing) const; /** * Output the setup information for the particle database * @param os The stream to output the information to * @param header Whether or not to output the information for MySQL */ virtual 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); //@} /** * 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 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: /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ - VectorMeson2BaryonsDecayer & operator=(const VectorMeson2BaryonsDecayer &); + VectorMeson2BaryonsDecayer & operator=(const VectorMeson2BaryonsDecayer &) = delete; private: /** * \f$G_M\f$ coupling */ vector gm_; /** * \f$G_E\f$ coupling */ vector ge_; /** * Relative phase of \f$G_E\f$/\f$G_M\f$ */ vector phi_; /** * the PDG codes for the incoming particles */ vector incoming_; /** * the PDG codes for the outgoing fermion */ vector outgoingf_; /** * the PDG codes for the outgoing antifermion. */ vector outgoinga_; /** * maximum weight for a decay */ vector maxweight_; /** * Initial size of the vectors */ unsigned int initsize_; /** * Spin density matrix */ mutable RhoDMatrix rho_; /** * Polarization vectors for the decaying particle */ mutable vector vectors_; /** * Spinors for the decay products */ mutable vector > wave_; /** * barred spinors for the decay products */ mutable vector > wavebar_; /** * Spinors for the decay products */ mutable vector > wave2_; /** * barred spinors for the decay products */ mutable vector > wave2bar_; }; } #endif /* Herwig_VectorMeson2BaryonsDecayer_H */ diff --git a/Decay/VectorMeson/f1FourPiDecayer.cc b/Decay/VectorMeson/f1FourPiDecayer.cc --- a/Decay/VectorMeson/f1FourPiDecayer.cc +++ b/Decay/VectorMeson/f1FourPiDecayer.cc @@ -1,313 +1,313 @@ // -*- C++ -*- // // This is the implementation of the non-inlined, non-templated member // functions of the f1FourPiDecayer class. // #include "f1FourPiDecayer.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/ParVector.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/Repository/UseRandom.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/Utilities/DescribeClass.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Helicity/epsilon.h" using namespace Herwig; f1FourPiDecayer::f1FourPiDecayer() : gRhoPiPi_(6.), ga1RhoPi_(4.8*GeV), gf1a1Pi_(9.77/GeV), maxWeight_({1.,1.}) { generateIntermediates(true); } // normally not implemented but do it here to get rid of the a_1 which // can't be on-shell ParticleVector f1FourPiDecayer::decay(const Particle & parent, const tPDVector & children) const { ParticleVector output = DecayIntegrator::decay(parent,children); ParticleVector::iterator it =output.begin(); for(;it!=output.end();++it) { long id = (**it).id(); if(id==20113 || id==20213 || id==-20213) break; } if(it!=output.end()) { PPtr a1 = *it; output.erase(it); for(PPtr child : a1->children()) { output.push_back(child); a1->abandonChild(child); } } return output; } IBPtr f1FourPiDecayer::clone() const { return new_ptr(*this); } IBPtr f1FourPiDecayer::fullclone() const { return new_ptr(*this); } void f1FourPiDecayer::persistentOutput(PersistentOStream & os) const { os << gRhoPiPi_ << ounit(ga1RhoPi_,GeV) << ounit(gf1a1Pi_,1./GeV) << ounit(ma1_,GeV) << ounit(ga1_,GeV) << ounit(mrho_,GeV) << ounit(grho_,GeV) << maxWeight_; } void f1FourPiDecayer::persistentInput(PersistentIStream & is, int) { is >> gRhoPiPi_ >> iunit(ga1RhoPi_,GeV) >> iunit(gf1a1Pi_,1./GeV) >> iunit(ma1_,GeV) >> iunit(ga1_,GeV) >> iunit(mrho_,GeV) >> iunit(grho_,GeV) >> maxWeight_; } // The following static variable is needed for the type // description system in ThePEG. DescribeClass describeHerwigf1FourPiDecayer("Herwig::f1FourPiDecayer", "HwVMDecay.so"); void f1FourPiDecayer::Init() { static ClassDocumentation documentation ("The f1FourPiDecayer class implements a simple model for " "f1 -> pipirho via an intermediate a_1"); static ParVector interfaceMaxWeight ("MaxWeight", "Maximum weights for the decays", &f1FourPiDecayer::maxWeight_, 2, 1.0, 0.0, 100.0, false, false, Interface::limited); static Parameter interfacegRhoPiPi ("gRhoPiPi", "The coupling of the rho to two pions", &f1FourPiDecayer::gRhoPiPi_, 6., 0.0, 10.0, false, false, Interface::limited); static Parameter interfacega1RhoPi ("ga1RhoPi", "Coupling of the a_1 to rho pi", &f1FourPiDecayer::ga1RhoPi_, GeV, 4.8*GeV, 0.*GeV, 20.*GeV, false, false, Interface::limited); static Parameter interfacegf1a1Pi ("gf1a1Pi", "Coupling of f_1 to a_1 pi", &f1FourPiDecayer::gf1a1Pi_, 1./GeV, 1.0/GeV, 0.0/GeV, 10.0/GeV, false, false, Interface::limited); } void f1FourPiDecayer::doinit() { DecayIntegrator::doinit(); // pointers to the particles we need as external particles tPDPtr f1 = getParticleData(ParticleID::f_1); tPDPtr a1p = getParticleData(ParticleID::a_1plus); tPDPtr a1m = getParticleData(ParticleID::a_1minus); tPDPtr a10 = getParticleData(ParticleID::a_10); tPDPtr pip = getParticleData(ParticleID::piplus); tPDPtr pim = getParticleData(ParticleID::piminus); tPDPtr pi0 = getParticleData(ParticleID::pi0); tPDPtr rhop = getParticleData(ParticleID::rhoplus); tPDPtr rhom = getParticleData(ParticleID::rhominus); tPDPtr rho0 = getParticleData(ParticleID::rho0); // decay mode f_1 -> pi+ pi- pi+ pi- PhaseSpaceModePtr mode = new_ptr(PhaseSpaceMode(f1,{pip,pim,pip,pim},maxWeight_[0])); mode->addChannel((PhaseSpaceChannel(mode),0,a1m,0,1,1,2,1,rho0,2,3,2,4)); mode->addChannel((PhaseSpaceChannel(mode),0,a1p,0,2,1,1,1,rho0,2,3,2,4)); mode->addChannel((PhaseSpaceChannel(mode),0,a1m,0,3,1,2,1,rho0,2,1,2,4)); mode->addChannel((PhaseSpaceChannel(mode),0,a1p,0,2,1,3,1,rho0,2,1,2,4)); mode->addChannel((PhaseSpaceChannel(mode),0,a1m,0,1,1,4,1,rho0,2,3,2,2)); mode->addChannel((PhaseSpaceChannel(mode),0,a1p,0,4,1,1,1,rho0,2,3,2,2)); mode->addChannel((PhaseSpaceChannel(mode),0,a1m,0,3,1,4,1,rho0,2,1,2,2)); mode->addChannel((PhaseSpaceChannel(mode),0,a1p,0,4,1,3,1,rho0,2,1,2,2)); addMode(mode); // decay mode f_1 -> pi+ pi0 pi- pi0 mode = new_ptr(PhaseSpaceMode(f1,{pip,pi0,pim,pi0},maxWeight_[0])); mode->addChannel((PhaseSpaceChannel(mode),0,a1m,0,1,1,2,1,rhop,2,3,2,4)); mode->addChannel((PhaseSpaceChannel(mode),0,a10,0,2,1,1,1,rhop,2,3,2,4)); mode->addChannel((PhaseSpaceChannel(mode),0,a1m,0,1,1,4,1,rhop,2,3,2,2)); mode->addChannel((PhaseSpaceChannel(mode),0,a10,0,4,1,1,1,rhop,2,3,2,2)); mode->addChannel((PhaseSpaceChannel(mode),0,a1p,0,3,1,4,1,rhom,2,1,2,2)); mode->addChannel((PhaseSpaceChannel(mode),0,a10,0,4,1,3,1,rhom,2,1,2,2)); mode->addChannel((PhaseSpaceChannel(mode),0,a1p,0,3,1,2,1,rhom,2,1,2,4)); mode->addChannel((PhaseSpaceChannel(mode),0,a10,0,2,1,3,1,rhom,2,1,2,4)); addMode(mode); // masses of intermediates ma1_ = a1p->mass(); ga1_ = a1p->width(); mrho_ = rhop->mass(); grho_ = rhop->width(); } void f1FourPiDecayer::doinitrun() { DecayIntegrator::doinitrun(); if(initialize()) { for(unsigned int ix=0;ixmaxWeight(); } } int f1FourPiDecayer::modeNumber(bool & cc,tcPDPtr parent, const tPDVector & children) const { if(children.size()!=4 || parent->id()!=ParticleID::f_1) return -1; // check the pions int npi0(0),npiplus(0),npiminus(0); for(auto child : children) { int idtemp= child->id(); if(idtemp==ParticleID::piplus) ++npiplus; else if(idtemp==ParticleID::piminus) ++npiminus; else if(idtemp==ParticleID::pi0) ++npi0; } cc = false; // f_1 -> 2pi+ 2pi-mode if(npiplus==2 && npiminus==2) return 0; // f_1 -> pi+ pi- pi0 pi0 mode else if (npiplus ==1 && npiminus==1 && npi0==2) return 1; // not found return -1; } void f1FourPiDecayer:: constructSpinInfo(const Particle & part, ParticleVector decay) const { VectorWaveFunction::constructSpinInfo(vector_,const_ptr_cast(&part), incoming,true,false); // set up the spin information for the pions for(unsigned int ix=0;ix<4;++ix) ScalarWaveFunction::constructSpinInfo(decay[ix],outgoing,true); } double f1FourPiDecayer::me2(const int ichan, const Particle & part, const tPDVector & , const vector & momenta, MEOption meopt) const { if(!ME()) ME(new_ptr(GeneralDecayMatrixElement(PDT::Spin1,PDT::Spin0,PDT::Spin0,PDT::Spin0,PDT::Spin0))); useMe(); // polarization vectors for incoming if(meopt==Initialize) { VectorWaveFunction::calculateWaveFunctions(vector_,rho_, const_ptr_cast(&part), incoming,false); } // breit wigners Lorentz5Momentum pa1[4] = {part.momentum()-momenta[0],part.momentum()-momenta[1], part.momentum()-momenta[2],part.momentum()-momenta[3]}; complex bwa1[4]; for(unsigned int ix=0;ix<4;++ix) { pa1[ix].rescaleMass(); bwa1[ix] = Resonance::BreitWignera1(pa1[ix].mass2(),ma1_,ga1_)/sqr(ma1_); } // compute the matrix element (as a current and then contract) LorentzVector > current; // decay mode f_1 -> pi+ pi- pi+pi- double sym(0.5); if(imode()==0) { sym=0.25; complex bwrho[4] = {Resonance::BreitWignerPWave((momenta[0]+momenta[1]).m2(),mrho_,grho_,momenta[0].mass(),momenta[1].mass())/sqr(mrho_), Resonance::BreitWignerPWave((momenta[0]+momenta[3]).m2(),mrho_,grho_,momenta[0].mass(),momenta[3].mass())/sqr(mrho_), Resonance::BreitWignerPWave((momenta[2]+momenta[1]).m2(),mrho_,grho_,momenta[2].mass(),momenta[1].mass())/sqr(mrho_), Resonance::BreitWignerPWave((momenta[2]+momenta[3]).m2(),mrho_,grho_,momenta[2].mass(),momenta[3].mass())/sqr(mrho_)}; if(ichan<=0) { // mode->addChannel((PhaseSpaceChannel(mode),0,a1m,0,1,1,2,1,rho0,2,3,2,4)); current += bwa1[0]*bwrho[3]*epsilon(part.momentum(),pa1[0],momenta[2]-momenta[3]); } if(ichan<0||ichan==1) { // mode->addChannel((PhaseSpaceChannel(mode),0,a1p,0,2,1,1,1,rho0,2,3,2,4)); current -= bwa1[1]*bwrho[3]*epsilon(part.momentum(),pa1[1],momenta[2]-momenta[3]); } if(ichan<0||ichan==2) { // mode->addChannel((PhaseSpaceChannel(mode),0,a1m,0,3,1,2,1,rho0,2,1,2,4)); current += bwa1[2]*bwrho[1]*epsilon(part.momentum(),pa1[2],momenta[0]-momenta[3]); } if(ichan<0||ichan==3) { // mode->addChannel((PhaseSpaceChannel(mode),0,a1p,0,2,1,3,1,rho0,2,1,2,4)); current -= bwa1[1]*bwrho[1]*epsilon(part.momentum(),pa1[1],momenta[0]-momenta[3]); } if(ichan<0||ichan==4) { // mode->addChannel((PhaseSpaceChannel(mode),0,a1m,0,1,1,4,1,rho0,2,3,2,2)); current += bwa1[0]*bwrho[2]*epsilon(part.momentum(),pa1[0],momenta[2]-momenta[1]); } if(ichan<0||ichan==5) { // mode->addChannel((PhaseSpaceChannel(mode),0,a1p,0,4,1,1,1,rho0,2,3,2,2)); current -= bwa1[3]*bwrho[2]*epsilon(part.momentum(),pa1[3],momenta[2]-momenta[1]); } if(ichan<0||ichan==6) { // mode->addChannel((PhaseSpaceChannel(mode),0,a1m,0,3,1,4,1,rho0,2,1,2,2)); current += bwa1[2]*bwrho[0]*epsilon(part.momentum(),pa1[2],momenta[0]-momenta[1]); } if(ichan<0||ichan==7) { // mode->addChannel((PhaseSpaceChannel(mode),0,a1p,0,4,1,3,1,rho0,2,1,2,2)); current -= bwa1[3]*bwrho[0]*epsilon(part.momentum(),pa1[3],momenta[0]-momenta[1]); } } // decay mode f_1 -> pi+ pi0 pi- pi0 else { complex bwrho[4] = {Resonance::BreitWignerPWave((momenta[0]+momenta[1]).m2(),mrho_,grho_,momenta[0].mass(),momenta[1].mass())/sqr(mrho_), Resonance::BreitWignerPWave((momenta[0]+momenta[3]).m2(),mrho_,grho_,momenta[0].mass(),momenta[3].mass())/sqr(mrho_), Resonance::BreitWignerPWave((momenta[2]+momenta[1]).m2(),mrho_,grho_,momenta[2].mass(),momenta[1].mass())/sqr(mrho_), Resonance::BreitWignerPWave((momenta[2]+momenta[3]).m2(),mrho_,grho_,momenta[2].mass(),momenta[3].mass())/sqr(mrho_)}; double f1 = (momenta[2].mass2()-momenta[3].mass2())/sqr(mrho_); double f2 = 1+f1; f1 = 1.-f1; if(ichan<=0) { // mode->addChannel((PhaseSpaceChannel(mode),0,a1m,0,1,1,2,1,rhop,2,3,2,4)); current += bwa1[0]*bwrho[3]*epsilon(part.momentum(),pa1[0],f1*momenta[2]-f2*momenta[3]); } if(ichan<0||ichan==1) { // mode->addChannel((PhaseSpaceChannel(mode),0,a10,0,2,1,1,1,rhop,2,3,2,4)); current -= bwa1[1]*bwrho[3]*epsilon(part.momentum(),pa1[1],f1*momenta[2]-f2*momenta[3]); } if(ichan<0||ichan==2) { // mode->addChannel((PhaseSpaceChannel(mode),0,a1m,0,1,1,4,1,rhop,2,3,2,2)); current += bwa1[0]*bwrho[2]*epsilon(part.momentum(),pa1[0],f1*momenta[2]-f2*momenta[1]); } if(ichan<0||ichan==3) { // mode->addChannel((PhaseSpaceChannel(mode),0,a10,0,4,1,1,1,rhop,2,3,2,2)); current -= bwa1[3]*bwrho[2]*epsilon(part.momentum(),pa1[3],f1*momenta[2]-f2*momenta[1]); } if(ichan<0||ichan==4) { // mode->addChannel((PhaseSpaceChannel(mode),0,a1p,0,3,1,4,1,rhom,2,1,2,2)); current += bwa1[2]*bwrho[0]*epsilon(part.momentum(),pa1[2],f1*momenta[0]-f2*momenta[1]); } if(ichan<0||ichan==5) { // mode->addChannel((PhaseSpaceChannel(mode),0,a10,0,4,1,3,1,rhom,2,1,2,2)); current -= bwa1[3]*bwrho[0]*epsilon(part.momentum(),pa1[3],f1*momenta[0]-f2*momenta[1]); } if(ichan<0||ichan==6) { // mode->addChannel((PhaseSpaceChannel(mode),0,a1p,0,3,1,2,1,rhom,2,1,2,4)); current += bwa1[2]*bwrho[1]*epsilon(part.momentum(),pa1[2],f1*momenta[0]-f2*momenta[3]); } if(ichan<0||ichan==7) { // mode->addChannel((PhaseSpaceChannel(mode),0,a10,0,2,1,3,1,rhom,2,1,2,4)); current -= bwa1[1]*bwrho[1]*epsilon(part.momentum(),pa1[1],f1*momenta[0]-f2*momenta[3]); } } // contract the current double pre = gRhoPiPi_*gf1a1Pi_*ga1RhoPi_; for(unsigned int ihel=0;ihel<3;++ihel) - (*ME())(ihel,0,0,0,0) = pre*current.dot(vector_[ihel])*part.mass(); + (*ME())(ihel,0,0,0,0) = Complex(pre*current.dot(vector_[ihel])*part.mass()); // matrix element return sym*ME()->contract(rho_).real(); } void f1FourPiDecayer::dataBaseOutput(ofstream & output, bool header) const { if(header) output << "update decayers set parameters=\""; // parameters for the DecayIntegrator base class DecayIntegrator::dataBaseOutput(output,false); output << "newdef " << name() << ":gRhoPiPi " << gRhoPiPi_ << "\n"; output << "newdef " << name() << ":ga1RhoPi " << ga1RhoPi_/GeV << "\n"; output << "newdef " << name() << ":gf1a1Pi " << gf1a1Pi_*GeV << "\n"; for(unsigned int ix=0;ixchildren()) { output.push_back(child); a1->abandonChild(child); } } return output; } IBPtr f1RhoPiPiDecayer::clone() const { return new_ptr(*this); } IBPtr f1RhoPiPiDecayer::fullclone() const { return new_ptr(*this); } void f1RhoPiPiDecayer::persistentOutput(PersistentOStream & os) const { os << ounit(ga1RhoPi_,GeV) << ounit(gf1a1Pi_,1./GeV) << ounit(ma1_,GeV) << ounit(ga1_,GeV) << maxWeight_; } void f1RhoPiPiDecayer::persistentInput(PersistentIStream & is, int) { is >> iunit(ga1RhoPi_,GeV) >> iunit(gf1a1Pi_,1./GeV) >> iunit(ma1_,GeV) >> iunit(ga1_,GeV) >> maxWeight_; } // The following static variable is needed for the type // description system in ThePEG. DescribeClass describeHerwigf1RhoPiPiDecayer("Herwig::f1RhoPiPiDecayer", "HwVMDecay.so"); void f1RhoPiPiDecayer::Init() { static ClassDocumentation documentation ("The f1RhoPiPiDecayer class implements a simple model for " "f1 -> pipirho via an intermediate a_1"); static ParVector interfaceMaxWeight ("MaxWeight", "Maximum weights for the decays", &f1RhoPiPiDecayer::maxWeight_, 2, 1.0, 0.0, 100.0, false, false, Interface::limited); static Parameter interfacega1RhoPi ("ga1RhoPi", "Coupling of the a_1 to rho pi", &f1RhoPiPiDecayer::ga1RhoPi_, GeV, 4.8*GeV, 0.*GeV, 20.*GeV, false, false, Interface::limited); static Parameter interfacegf1a1Pi ("gf1a1Pi", "Coupling of f_1 to a_1 pi", &f1RhoPiPiDecayer::gf1a1Pi_, 1./GeV, 1.0/GeV, 0.0/GeV, 10.0/GeV, false, false, Interface::limited); } void f1RhoPiPiDecayer::doinit() { DecayIntegrator::doinit(); // pointers to the particles we need as external particles tPDPtr f1 = getParticleData(ParticleID::f_1); tPDPtr a1p = getParticleData(ParticleID::a_1plus); tPDPtr a1m = getParticleData(ParticleID::a_1minus); tPDPtr a10 = getParticleData(ParticleID::a_10); tPDPtr pip = getParticleData(ParticleID::piplus); tPDPtr pim = getParticleData(ParticleID::piminus); tPDPtr pi0 = getParticleData(ParticleID::pi0); tPDPtr rhop = getParticleData(ParticleID::rhoplus); tPDPtr rhom = getParticleData(ParticleID::rhominus); tPDPtr rho0 = getParticleData(ParticleID::rho0); // decay mode f_1 -> pi+ pi- rho0 PhaseSpaceModePtr mode = new_ptr(PhaseSpaceMode(f1,{pip,pim,rho0},maxWeight_[0])); mode->addChannel((PhaseSpaceChannel(mode),0,a1m,0,1,1,2,1,3)); mode->addChannel((PhaseSpaceChannel(mode),0,a1p,0,2,1,1,1,3)); addMode(mode); // decay mode f_1 -> pi- pi0 rho+ mode = new_ptr(PhaseSpaceMode(f1,{pim,pi0,rhop},maxWeight_[1])); mode->addChannel((PhaseSpaceChannel(mode),0,a1p,0,1,1,2,1,3)); mode->addChannel((PhaseSpaceChannel(mode),0,a10,0,2,1,1,1,3)); addMode(mode); ma1_ = a1p->mass(); ga1_ = a1p->width(); } void f1RhoPiPiDecayer::doinitrun() { DecayIntegrator::doinitrun(); if(initialize()) { for(unsigned int ix=0;ixmaxWeight(); } } int f1RhoPiPiDecayer::modeNumber(bool & cc,tcPDPtr parent, const tPDVector & children) const { if(children.size()!=3 || parent->id()!=ParticleID::f_1) return -1; // check the pions int npi0(0),npiplus(0),npiminus(0),idrho(0); for(auto child : children) { int idtemp= child->id(); if(idtemp==ParticleID::piplus) ++npiplus; else if(idtemp==ParticleID::piminus) ++npiminus; else if(idtemp==ParticleID::pi0) ++npi0; else idrho=idtemp; } cc = false; // f_1 -> pi+pi-rho0 mode if(idrho==113 && npiplus==1 && npiminus==1) return 0; // f_1 -> pi-pi0rho+ mode else if (idrho== 213 && npiminus==1 && npi0==1) return 1; else if (idrho==-213 && npiplus ==1 && npi0==1) { cc=true; return 1; } // not found return -1; } void f1RhoPiPiDecayer:: constructSpinInfo(const Particle & part, ParticleVector decay) const { VectorWaveFunction::constructSpinInfo(vectors_[0],const_ptr_cast(&part), incoming,true,false); // set up the spin information for the decay products // pions for(unsigned int ix=0;ix<2;++ix) ScalarWaveFunction::constructSpinInfo(decay[ix],outgoing,true); // rho VectorWaveFunction::constructSpinInfo(vectors_[1],decay[2],outgoing,true,false); } double f1RhoPiPiDecayer::me2(const int ichan, const Particle & part, const tPDVector & , const vector & momenta, MEOption meopt) const { if(!ME()) ME(new_ptr(GeneralDecayMatrixElement(PDT::Spin1,PDT::Spin0,PDT::Spin0,PDT::Spin1))); useMe(); // polarization vectors for incoming if(meopt==Initialize) { VectorWaveFunction::calculateWaveFunctions(vectors_[0],rho_, const_ptr_cast(&part), incoming,false); } // polarization vectors for rho vectors_[1].resize(3); for(unsigned int ix=0;ix<3;++ix) vectors_[1][ix] = HelicityFunctions::polarizationVector(-momenta[2],ix,Helicity::outgoing); // breit wigners Lorentz5Momentum pa1[2] = {part.momentum()-momenta[0], part.momentum()-momenta[1]}; for(unsigned int ix=0;ix<2;++ix) pa1[ix].rescaleMass(); complex bwa1[2] = {Resonance::BreitWignera1(pa1[0].mass2(),ma1_,ga1_)/sqr(ma1_), Resonance::BreitWignera1(pa1[1].mass2(),ma1_,ga1_)/sqr(ma1_)}; if(ichan>0) bwa1[ ichan == 0 ? 1 : 0 ] = ZERO; // compute the matrix element for(unsigned int ihel=0;ihel<3;++ihel) { LorentzVector > pol[2] = {epsilon(vectors_[0][ihel],part.momentum(),pa1[0]), epsilon(vectors_[0][ihel],part.momentum(),pa1[1])}; for(unsigned int ohel=0;ohel<3;++ohel) { - (*ME())(ihel,0,0,ohel) = gf1a1Pi_*ga1RhoPi_*(LorentzPolarizationVector(pol[0]*bwa1[0])- - LorentzPolarizationVector(pol[1]*bwa1[1])).dot(vectors_[1][ohel]); + (*ME())(ihel,0,0,ohel) = Complex(gf1a1Pi_*ga1RhoPi_*(LorentzPolarizationVector(pol[0]*bwa1[0])- + LorentzPolarizationVector(pol[1]*bwa1[1])).dot(vectors_[1][ohel])); } } // matrix element return ME()->contract(rho_).real(); } void f1RhoPiPiDecayer::dataBaseOutput(ofstream & output, bool header) const { if(header) output << "update decayers set parameters=\""; // parameters for the DecayIntegrator base class DecayIntegrator::dataBaseOutput(output,false); output << "newdef " << name() << ":ga1RhoPi " << ga1RhoPi_/GeV << "\n"; output << "newdef " << name() << ":gf1a1Pi " << gf1a1Pi_*GeV << "\n"; for(unsigned int ix=0;ix describeHerwigThreePionCLEOCurrent("Herwig::ThreePionCLEOCurrent", "HwWeakCurrents.so"); HERWIG_INTERPOLATOR_CLASSDESC(ThreePionCLEOCurrent,Energy,Energy2) ThreePionCLEOCurrent::ThreePionCLEOCurrent() { addDecayMode(1,-1); addDecayMode(2,-2); addDecayMode(2,-1); addDecayMode(1,-1); addDecayMode(2,-2); addDecayMode(2,-1); setInitialModes(6); // rho masses and widths _rhomass = {0.7743*GeV,1.370*GeV}; _rhowidth = {0.1491*GeV,0.386*GeV}; // f_2 mass and width _f2mass = 1.275*GeV; _f2width = 0.185*GeV; // f_0(1370) mass and width _f0mass = 1.186*GeV; _f0width = 0.350*GeV; // sigma mass and width _sigmamass = 0.860*GeV; _sigmawidth = 0.880*GeV; // a1 mass and width _a1mass = 1.331*GeV; _a1width = 0.814*GeV; // parameters for the K K* contribution to the a_1 running width _mKstar = 894*MeV; _mK = 496*MeV; _gammk = 3.32; // pion decay constant _fpi = 130.7*MeV/sqrt(2.); // couplings and phases for the different channels // p-wave rho and rho prime using Constants::pi; _rhomagP = {1.,0.12}; _rhophaseP = {0.,0.99*pi}; // d-wave rho and rho prime _rhomagD = {0.37/GeV2,0.87/GeV2}; _rhophaseD = {-0.15*pi, 0.53*pi}; // f_2 _f2mag = 0.71/GeV2; _f2phase = 0.56*pi; _f2coup = ZERO; // sigma _sigmamag = 2.10; _sigmaphase = 0.23*pi; _sigmacoup = 0.; // f_0 _f0mag = 0.77; _f0phase = -0.54*pi; _f0coup = 0.; // initialize the a_1 width _initializea1=false; _a1opt=true; double a1q2in[200]={0 ,15788.6,31577.3,47365.9,63154.6,78943.2, 94731.9,110521 ,126309 ,142098 ,157886 ,173675 , 189464 ,205252 ,221041 ,236830 ,252618 ,268407 , 284196 ,299984 ,315773 ,331562 ,347350 ,363139 , 378927 ,394716 ,410505 ,426293 ,442082 ,457871 , 473659 ,489448 ,505237 ,521025 ,536814 ,552603 , 568391 ,584180 ,599969 ,615757 ,631546 ,647334 , 663123 ,678912 ,694700 ,710489 ,726278 ,742066 , 757855 ,773644 ,789432 ,805221 ,821010 ,836798 , 852587 ,868375 ,884164 ,899953 ,915741 ,931530 , 947319 ,963107 ,978896 ,994685 , 1.01047e+06,1.02626e+06,1.04205e+06,1.05784e+06, 1.07363e+06,1.08942e+06,1.10521e+06,1.12099e+06, 1.13678e+06,1.15257e+06,1.16836e+06,1.18415e+06, 1.19994e+06,1.21573e+06,1.23151e+06,1.24730e+06, 1.26309e+06,1.27888e+06,1.29467e+06,1.31046e+06, 1.32625e+06,1.34203e+06,1.35782e+06,1.37361e+06, 1.38940e+06,1.40519e+06,1.42098e+06,1.43677e+06, 1.45256e+06,1.46834e+06,1.48413e+06,1.49992e+06, 1.51571e+06,1.53150e+06,1.54729e+06,1.56308e+06, 1.57886e+06,1.59465e+06,1.61044e+06,1.62623e+06, 1.64202e+06,1.65781e+06,1.67360e+06,1.68939e+06, 1.70517e+06,1.72096e+06,1.73675e+06,1.75254e+06, 1.76833e+06,1.78412e+06,1.79991e+06,1.81569e+06, 1.83148e+06,1.84727e+06,1.86306e+06,1.87885e+06, 1.89464e+06,1.91043e+06,1.92621e+06,1.94200e+06, 1.95779e+06,1.97358e+06,1.98937e+06,2.00516e+06, 2.02095e+06,2.03674e+06,2.05252e+06,2.06831e+06, 2.08410e+06,2.09989e+06,2.11568e+06,2.13147e+06, 2.14726e+06,2.16304e+06,2.17883e+06,2.19462e+06, 2.21041e+06,2.22620e+06,2.24199e+06,2.25778e+06, 2.27356e+06,2.28935e+06,2.30514e+06,2.32093e+06, 2.33672e+06,2.35251e+06,2.36830e+06,2.38409e+06, 2.39987e+06,2.41566e+06,2.43145e+06,2.44724e+06, 2.46303e+06,2.47882e+06,2.49461e+06,2.51039e+06, 2.52618e+06,2.54197e+06,2.55776e+06,2.57355e+06, 2.58934e+06,2.60513e+06,2.62092e+06,2.63670e+06, 2.65249e+06,2.66828e+06,2.68407e+06,2.69986e+06, 2.71565e+06,2.73144e+06,2.74722e+06,2.76301e+06, 2.77880e+06,2.79459e+06,2.81038e+06,2.82617e+06, 2.84196e+06,2.85774e+06,2.87353e+06,2.88932e+06, 2.90511e+06,2.92090e+06,2.93669e+06,2.95248e+06, 2.96827e+06,2.98405e+06,2.99984e+06,3.01563e+06, 3.03142e+06,3.04721e+06,3.06300e+06,3.07879e+06, 3.09457e+06,3.11036e+06,3.12615e+06,3.14194e+06}; double a1widthin[200]={0,0,0,0,0,0,0,0, 0,0,0,0.00021256,0.0107225,0.0554708,0.150142,0.303848, 0.522655,0.81121,1.1736,1.61381,2.13606,2.74499,3.44583,4.24454, 5.14795,6.16391,7.3014,8.57079,9.98398,11.5547,13.2987,15.2344, 17.3827,19.7683,22.4195,25.3695,28.6568,32.3264,36.4311,41.0322, 46.201,52.0203,58.5847,66.0011,74.3871,83.8666,94.5615,106.578, 119.989,134.807,150.968,168.315,186.615,205.576,224.893,244.28, 263.499,282.364,300.748,318.569,335.781,352.367,368.327,383.677, 398.438,412.638,426.306,439.472,452.167,464.421,476.263,487.719, 498.815,509.576,520.024,530.179,540.063,549.693,559.621,568.26, 577.229,586.005,594.604,603.035,611.314,619.447,627.446,635.321, 643.082,650.736,658.288,665.75,673.127,680.427,687.659,694.82, 701.926,708.977,715.983,722.944,729.862,736.752,743.619,750.452, 757.271,764.076,770.874,777.658,784.444,791.233,798.027,804.838, 811.649,818.485,825.342,832.224,839.139,846.082,853.059,860.079, 867.143,874.248,881.409,919.527,945.28,965.514,983.228,999.471, 1014.69,1029.15,1043.05,1056.49,1069.57,1082.36,1094.88,1107.2, 1120.89,1131.4,1143.33,1155.15,1166.92,1178.61,1190.27,1201.92, 1213.55,1225.18,1236.81,1250.06,1260.16,1271.86,1283.64,1295.46, 1307.36,1319.3,1331.34,1343.45,1355.64,1367.93,1380.31,1392.77, 1405.35,1418.03,1430.83,1443.75,1457.17,1469.94,1483.22,1496.64, 1510.18,1523.86,1537.67,1551.64,1565.72,1579.99,1594.38,1608.92, 1623.63,1642.08,1653.51,1668.69,1684.03,1699.53,1715.21,1731.04, 1747.05,1763.23,1779.59,1796.12,1812.83,1829.72,1846.79,1864.04, 1881.49,1899.11,1916.93,1934.93,1953.13,1971.52,1990.12,2008.89}; if(_a1runwidth.empty()) { vector tmp1(a1widthin,a1widthin+200); std::transform(tmp1.begin(), tmp1.end(), back_inserter(_a1runwidth), [](double x){return x*GeV;}); vector tmp2(a1q2in,a1q2in+200); _a1runq2.clear(); std::transform(tmp2.begin(), tmp2.end(), back_inserter(_a1runq2), [](double x){return x*GeV2;}); } // zero parameters which will be calculated later to avoid problems _mpi0=ZERO; _mpic=ZERO; _fact=ZERO; _maxmass=ZERO; _maxcalc=ZERO; } void ThreePionCLEOCurrent::doinit() { WeakCurrent::doinit(); // parameters for the breit-wigners _mpic = getParticleData(ParticleID::piplus)->mass(); _mpi0 = getParticleData(ParticleID::pi0) ->mass(); // couplings for the different modes Complex ii(0.,1.); _rhocoupP.resize(_rhomagP.size()); for(unsigned int ix=0;ix<_rhomagP.size();++ix) _rhocoupP[ix]=_rhomagP[ix]*(cos(_rhophaseP[ix])+ii*sin(_rhophaseP[ix])); _rhocoupD.resize(_rhomagD.size()); for(unsigned int ix=0;ix<_rhomagD.size();++ix) _rhocoupD[ix]=_rhomagD[ix]*(cos(_rhophaseD[ix])+ii*sin(_rhophaseD[ix])); _f0coup=_f0mag*(cos(_f0phase)+ii*sin(_f0phase)); _f2coup=_f2mag*(cos(_f2phase)+ii*sin(_f2phase)); _sigmacoup=_sigmamag*(cos(_sigmaphase)+ii*sin(_sigmaphase)); // overall coupling _fact = 2.*sqrt(2.)/_fpi/3.; // initialise the a_1 running width calculation inita1Width(-1); } void ThreePionCLEOCurrent::persistentOutput(PersistentOStream & os) const { os << ounit(_rhomass,GeV) << ounit(_rhowidth,GeV) << ounit(_f2mass,GeV) << ounit(_f2width,GeV) << ounit(_f0mass,GeV) << ounit(_f0width,GeV) << ounit(_sigmamass,GeV) << ounit(_sigmawidth,GeV) << ounit(_mpi0,GeV) << ounit(_mpic,GeV) << ounit(_fpi,GeV) << ounit(_fact,1/GeV) << _rhomagP << _rhophaseP << _rhocoupP << ounit(_rhomagD,1/GeV2) << _rhophaseD << ounit(_rhocoupD,1/GeV2) <> iunit(_rhomass,GeV) >> iunit(_rhowidth,GeV) >> iunit(_f2mass,GeV) >> iunit(_f2width,GeV) >> iunit(_f0mass,GeV) >> iunit(_f0width,GeV) >> iunit(_sigmamass,GeV) >> iunit(_sigmawidth,GeV) >> iunit(_mpi0,GeV) >> iunit(_mpic,GeV) >> iunit(_fpi,GeV) >> iunit(_fact,1/GeV) >> _rhomagP >> _rhophaseP >> _rhocoupP >> iunit(_rhomagD,1/GeV2) >> _rhophaseD >> iunit(_rhocoupD,1/GeV2) >> iunit(_f2mag,1/GeV2) >> _f2phase >> iunit(_f2coup,1/GeV2) >> _f0mag >> _f0phase >> _f0coup >> _sigmamag >> _sigmaphase >> _sigmacoup >> iunit(_a1mass,GeV) >> iunit(_a1width,GeV) >> iunit(_a1runwidth,GeV) >> iunit(_a1runq2,GeV2) >> _initializea1 >> iunit(_mKstar,GeV) >> iunit(_mK,GeV) >> _gammk >> _a1opt >> iunit(_maxmass,GeV) >> iunit(_maxcalc,GeV) >> _a1runinter; } void ThreePionCLEOCurrent::Init() { static ClassDocumentation documentation ("The ThreePionCLEOCurrent class performs the decay of the" " tau to three pions using the currents from CLEO", "The decay of tau to three pions is modelled using the currents from " "\\cite{Asner:1999kj}.", " %\\cite{Asner:1999kj}\n" "\\bibitem{Asner:1999kj}\n" " D.~M.~Asner {\\it et al.} [CLEO Collaboration],\n" " ``Hadronic structure in the decay tau- --> nu/tau pi- pi0 pi0 and the sign\n" " %of the tau neutrino helicity,''\n" " Phys.\\ Rev.\\ D {\\bf 61}, 012002 (2000)\n" " [arXiv:hep-ex/9902022].\n" " %%CITATION = PHRVA,D61,012002;%%\n" ); static ParVector interfacerhomass ("RhoMasses", "The masses of the different rho resonnaces", &ThreePionCLEOCurrent::_rhomass, MeV, 0, ZERO, -10000*MeV, 10000*MeV, false, false, true); static ParVector interfacerhowidth ("RhoWidths", "The widths of the different rho resonnaces", &ThreePionCLEOCurrent::_rhowidth, MeV, 0, ZERO, -10000*MeV, 10000*MeV, false, false, true); static Parameter interfacef_2Mass ("f_2Mass", "The mass of the f_2 meson", &ThreePionCLEOCurrent::_f2mass, GeV, 1.275*GeV, ZERO, 10.0*GeV, false, false, true); static Parameter interfacef_2Width ("f_2Width", "The width of the f_2 meson", &ThreePionCLEOCurrent::_f2width, GeV, 0.185*GeV, ZERO, 1.0*GeV, false, false, true); static Parameter interfacef_0Mass ("f_0Mass", "The mass of the f_0 meson", &ThreePionCLEOCurrent::_f0mass, GeV, 1.186*GeV, ZERO, 10.0*GeV, false, false, true); static Parameter interfacef_0Width ("f_0Width", "The width of the f_0 meson", &ThreePionCLEOCurrent::_f0width, GeV, 0.350*GeV, ZERO, 1.0*GeV, false, false, true); static Parameter interfacesigmaMass ("sigmaMass", "The mass of the sigma meson", &ThreePionCLEOCurrent::_sigmamass, GeV, 0.860*GeV, ZERO, 10.0*GeV, false, false, true); static Parameter interfacesigmaWidth ("sigmaWidth", "The width of the sigma meson", &ThreePionCLEOCurrent::_sigmawidth, GeV, 0.880*GeV, ZERO, 2.0*GeV, false, false, true); static Parameter interfacea1Mass ("a1Mass", "The mass of the a_1 meson", &ThreePionCLEOCurrent::_a1mass, GeV, 1.331*GeV, ZERO, 10.0*GeV, false, false, true); static Parameter interfacea1Width ("a1Width", "The width of the a_1 meson", &ThreePionCLEOCurrent::_a1width, GeV, 0.814*GeV, ZERO, 10.0*GeV, false, false, true); static Parameter interfaceKaonMass ("KaonMass", "The mass of the kaon", &ThreePionCLEOCurrent::_mK, GeV, 0.496*GeV, ZERO, 10.0*GeV, false, false, true); static Parameter interfaceKStarMass ("KStarMass", "The mass of the k* meson", &ThreePionCLEOCurrent::_mKstar, GeV, 0.894*GeV, ZERO, 10.0*GeV, false, false, true); static Parameter interfaceKaonCoupling ("KaonCoupling", "The relative coupling for the kaon in the a_1 running width", &ThreePionCLEOCurrent::_gammk, 3.32, 0.0, 10.0, false, false, true); static Parameter interfaceFpi ("Fpi", "The pion decay constant", &ThreePionCLEOCurrent::_fpi, MeV, 130.7*MeV/sqrt(2.), ZERO, 500.0*MeV, false, false, true); static ParVector interfacerhomagP ("RhoPWaveMagnitude", "The magnitude of the couplings for the p-wave rho currents", &ThreePionCLEOCurrent::_rhomagP, 0, 0, 0, 0, 10000, false, false, true); static ParVector interfacerhophaseP ("RhoPWavePhase", "The phase of the couplings for the p-wave rho currents", &ThreePionCLEOCurrent::_rhophaseP, 0, 0, 0, -Constants::twopi, Constants::twopi, false, false, true); static ParVector interfacerhomagD ("RhoDWaveMagnitude", "The magnitude of the couplings for the d-wave rho currents", &ThreePionCLEOCurrent::_rhomagD, 1/MeV2, 0, ZERO, ZERO, 10000/MeV2, false, false, true); static ParVector interfacerhophaseD ("RhoDWavePhase", "The phase of the couplings for the d-wave rho currents", &ThreePionCLEOCurrent::_rhophaseD, 0, 0, 0, -Constants::twopi, Constants::twopi, false, false, true); static Parameter interfacef0Phase ("f0Phase", "The phase of the f_0 scalar current", &ThreePionCLEOCurrent::_f0phase, 0.54*Constants::pi, -Constants::twopi, Constants::twopi, false, false, true); static Parameter interfacef2Phase ("f2Phase", "The phase of the f_2 tensor current", &ThreePionCLEOCurrent::_f2phase, 0.56*Constants::pi,-Constants::twopi, Constants::twopi, false, false, true); static Parameter interfacesigmaPhase ("sigmaPhase", "The phase of the sigma scalar current", &ThreePionCLEOCurrent::_sigmaphase, 0.23*Constants::pi, -Constants::twopi, Constants::twopi, false, false, true); static Parameter interfacef0Magnitude ("f0Magnitude", "The magnitude of the f_0 scalar current", &ThreePionCLEOCurrent::_f0mag, 0.77, 0.0, 10, false, false, true); static Parameter interfacef2Magnitude ("f2Magnitude", "The magnitude of the f_2 tensor current", &ThreePionCLEOCurrent::_f2mag, 1./GeV2, 0.71/GeV2, ZERO, 10./GeV2, false, false, true); static Parameter interfacesigmaMagnitude ("sigmaMagnitude", "The magnitude of the sigma scalar current", &ThreePionCLEOCurrent::_sigmamag, 2.1, 0.0, 10, false, false, true); static ParVector interfacea1RunningWidth ("a1RunningWidth", "The values of the a_1 width for interpolation to giving the running width.", &ThreePionCLEOCurrent::_a1runwidth, MeV, 0, ZERO, ZERO, 10000000*MeV, false, false, true); static ParVector interfacea1RunningQ2 ("a1RunningQ2", "The values of the q^2 for interpolation to giving the running width.", &ThreePionCLEOCurrent::_a1runq2, MeV2, 0, ZERO, ZERO, 10000000*MeV2, false, false, true); static Switch interfaceInitializea1 ("Initializea1", "Initialise the calculation of the a_1 running width", &ThreePionCLEOCurrent::_initializea1, false, false, false); static SwitchOption interfaceInitializea1Initialization (interfaceInitializea1, "Yes", "Initialize the calculation", true); static SwitchOption interfaceInitializea1NoInitialization (interfaceInitializea1, "No", "Use the default values", false); static Switch interfacea1WidthOption ("a1WidthOption", "Option for the treatment of the a1 width", &ThreePionCLEOCurrent::_a1opt, true, false, false); static SwitchOption interfacea1WidthOptionLocal (interfacea1WidthOption, "Local", "Use a calculation of the running width based on the parameters as" " interpolation table.", true); static SwitchOption interfacea1WidthOptionParam (interfacea1WidthOption, "Kuhn", "Use the parameterization of Kuhn and Santamaria for default parameters." " This should only be used for testing vs TAUOLA", false); } // initialisation of the a_1 width // (iopt=-1 initialises, iopt=0 starts the interpolation) void ThreePionCLEOCurrent::inita1Width(int iopt) { if(iopt==-1) { _maxcalc=_maxmass; if(!_initializea1||_maxmass==ZERO) return; // parameters for the table of values Energy2 step=sqr(_maxmass)/200.; // function to be integrated to give the matrix element // integrator to perform the integral vector inweights;inweights.push_back(0.5);inweights.push_back(0.5); vector intype;intype.push_back(2);intype.push_back(3); Energy mrho=getParticleData(ParticleID::rhoplus)->mass(); Energy wrho=getParticleData(ParticleID::rhoplus)->width(); vector inmass;inmass.push_back(mrho);inmass.push_back(mrho); vector inwidth;inwidth.push_back(wrho);inwidth.push_back(wrho); vector inpow(2,0.0); ThreeBodyAllOnCalculator widthgenN(inweights,intype,inmass,inwidth,inpow,*this,0,_mpi0,_mpi0,_mpic); ThreeBodyAllOnCalculator widthgenC(inweights,intype,inmass,inwidth,inpow,*this,1,_mpic,_mpic,_mpic); // normalisation constant to give physical width if on shell double a1const = _a1width/(widthgenN.partialWidth(sqr(_a1mass))+ widthgenC.partialWidth(sqr(_a1mass))); // loop to give the values _a1runq2.clear();_a1runwidth.clear(); for(Energy2 moff2=ZERO; moff2<=sqr(_maxmass); moff2+=step) { Energy moff=sqrt(moff2); _a1runq2.push_back(moff2); Energy charged=a1const*widthgenC.partialWidth(moff2); Energy neutral=a1const*widthgenN.partialWidth(moff2); Energy kaon = moff<=_mK+_mKstar ? ZERO : 2.870*_gammk*_gammk/8./Constants::pi* Kinematics::pstarTwoBodyDecay(moff,_mK,_mKstar)/moff2*GeV2; Energy total = charged + neutral + kaon; _a1runwidth.push_back(total); } } // set up the interpolator else if(iopt==0) { _a1runinter = make_InterpolatorPtr(_a1runwidth,_a1runq2,3); } } void ThreePionCLEOCurrent::CLEOFormFactor(int imode,int ichan, Energy2 q2,Energy2 s1, Energy2 s2, Energy2 s3, Complex & F1, Complex & F2, Complex & F3) const { useMe(); double fact=1.; if(imode<=1) { // identical particle factors fact = 1./sqrt(6.); // compute the breit wigners we need Complex sigbws1 = Resonance::BreitWignerSWave(s1,_sigmamass,_sigmawidth,_mpi0,_mpi0); Complex sigbws2 = Resonance::BreitWignerSWave(s2,_sigmamass,_sigmawidth,_mpi0,_mpi0); Complex sigbws3 = Resonance::BreitWignerSWave(s3,_sigmamass,_sigmawidth,_mpi0,_mpi0); Complex f0bws1 = Resonance::BreitWignerSWave(s1, _f0mass, _f0width,_mpi0,_mpi0); Complex f0bws2 = Resonance::BreitWignerSWave(s2, _f0mass, _f0width,_mpi0,_mpi0); Complex f0bws3 = Resonance::BreitWignerSWave(s3, _f0mass, _f0width,_mpi0,_mpi0); Complex f2bws1 = Resonance::BreitWignerDWave(s1, _f2mass, _f2width,_mpi0,_mpi0); Complex f2bws2 = Resonance::BreitWignerDWave(s2, _f2mass, _f2width,_mpi0,_mpi0); Complex f2bws3 = Resonance::BreitWignerDWave(s3, _f2mass, _f2width,_mpi0,_mpi0); if(ichan<0) { // the scalar terms F1=2./3.*(_sigmacoup*sigbws3+_f0coup*f0bws3) -2./3.*(_sigmacoup*sigbws2+_f0coup*f0bws2); F2=2./3.*(_sigmacoup*sigbws3+_f0coup*f0bws3) -2./3.*(_sigmacoup*sigbws1+_f0coup*f0bws1); F3=-2./3.*(_sigmacoup*sigbws1+_f0coup*f0bws1) +2./3.*(_sigmacoup*sigbws2+_f0coup*f0bws2); // the tensor terms complex Dfact1 = 1./18.*(4.*_mpi0*_mpi0-s1)*(q2+s1-_mpi0*_mpi0)/s1*f2bws1; complex Dfact2 = 1./18.*(4.*_mpi0*_mpi0-s2)*(q2+s2-_mpi0*_mpi0)/s2*f2bws2; complex Dfact3 = 1./18.*(4.*_mpi0*_mpi0-s3)*(q2-_mpi0*_mpi0+s3)/s3*f2bws3; - F1+=_f2coup*( 0.5*(s3-s2)*f2bws1-Dfact2+Dfact3); - F2+=_f2coup*( 0.5*(s3-s1)*f2bws2-Dfact1+Dfact3); - F3+=_f2coup*(-0.5*(s1-s2)*f2bws3-Dfact1+Dfact2); + F1+=Complex(_f2coup*( 0.5*(s3-s2)*f2bws1-Dfact2+Dfact3)); + F2+=Complex(_f2coup*( 0.5*(s3-s1)*f2bws2-Dfact1+Dfact3)); + F3+=Complex(_f2coup*(-0.5*(s1-s2)*f2bws3-Dfact1+Dfact2)); } else if(ichan==0) { F2=-2./3.*_sigmacoup*sigbws1; F3=-2./3.*_sigmacoup*sigbws1; } else if(ichan==1) { F1=-2./3.*_sigmacoup*sigbws2; F3=+2./3.*_sigmacoup*sigbws2; } else if(ichan==2) { F1= 2./3.*_sigmacoup*sigbws3; F2= 2./3.*_sigmacoup*sigbws3; } else if(ichan==3) { complex Dfact1 = 1./18.*(4.*_mpi0*_mpi0-s1)*(q2+s1-_mpi0*_mpi0)/s1*f2bws1; - F1+=_f2coup*0.5*(s3-s2)*f2bws1; - F2-=_f2coup*Dfact1; - F3-=_f2coup*Dfact1; + F1+=Complex(_f2coup*0.5*(s3-s2)*f2bws1); + F2-=Complex(_f2coup*Dfact1); + F3-=Complex(_f2coup*Dfact1); } else if(ichan==4) { complex Dfact2 = 1./18.*(4.*_mpi0*_mpi0-s2)*(q2+s2-_mpi0*_mpi0)/s2*f2bws2; - F2+=_f2coup*0.5*(s3-s1)*f2bws2; - F1-=_f2coup*Dfact2; - F3+=_f2coup*Dfact2; + F2+=Complex(_f2coup*0.5*(s3-s1)*f2bws2); + F1-=Complex(_f2coup*Dfact2); + F3+=Complex(_f2coup*Dfact2); } else if(ichan==5) { complex Dfact3 = 1./18.*(4.*_mpi0*_mpi0-s3)*(q2-_mpi0*_mpi0+s3)/s3*f2bws3; - F3+=-_f2coup*0.5*(s1-s2)*f2bws3; - F1+=_f2coup*Dfact3; - F2+=_f2coup*Dfact3; + F3+=Complex(-_f2coup*0.5*(s1-s2)*f2bws3); + F1+=Complex(_f2coup*Dfact3); + F2+=Complex(_f2coup*Dfact3); } else if(ichan==6) { F2=-2./3.*_f0coup*f0bws1; F3=-2./3.*_f0coup*f0bws1; } else if(ichan==7) { F1=-2./3.*_f0coup*f0bws2; F3=+2./3.*_f0coup*f0bws2; } else if(ichan==8) { F1= 2./3.*_f0coup*f0bws3; F2= 2./3.*_f0coup*f0bws3; } } // calculate the pi0 pi0 pi+ factor else if(imode==2) { // identical particle factors fact = 1./sqrt(2.); // compute the breit wigners we need Complex rhos1bw[3],rhos2bw[3]; for(unsigned int ix=0,N=max(_rhocoupP.size(),_rhocoupD.size());ixpi+pi-pi0 else if(imode==3||imode==4) { // compute the breit wigners we need Complex rhos1bw[3],rhos2bw[3]; for(unsigned int ix=0,N=max(_rhocoupP.size(),_rhocoupD.size());ix sfact1 = 1./18.*(4.*_mpic*_mpic-s1)*(q2+s1-_mpic*_mpic)/s1*f2bws1; complex sfact2 = 1./18.*(4.*_mpic*_mpic-s2)*(q2+s2-_mpic*_mpic)/s2*f2bws2; F1+=Complex(_f2coup*(0.5*(s3-s2)*f2bws1-sfact2)); F2+=Complex(_f2coup*(0.5*(s3-s1)*f2bws2-sfact1)); F3+=Complex(_f2coup*(-sfact1+sfact2)); } else if(ichan%2==0&&ichan<=4) { unsigned int ires=ichan/2; Energy2 Dfact2=1./3.*(s2-s3); if(ires<_rhocoupP.size()) F1-=_rhocoupP[ires]*rhos1bw[ires]; if(ires<_rhocoupD.size()) { F2-=Complex(Dfact2*_rhocoupD[ires]*rhos1bw[ires]); F3-=Complex(_rhocoupD[ires]*Dfact2*rhos1bw[ires]); } } else if(ichan%2==1&&ichan<=5) { unsigned int ires=(ichan-1)/2; Energy2 Dfact1=1./3.*(s1-s3); if(ires<_rhocoupP.size()) { F2-=_rhocoupP[ires]*rhos2bw[ires]; } if(ires<_rhocoupD.size()) { F1-=Complex(Dfact1*_rhocoupD[ires]*rhos2bw[ires]); F3+=Complex(_rhocoupD[ires]*Dfact1*rhos2bw[ires]); } } else if(ichan==6) { F2-=2./3.*_sigmacoup*sigbws1; F3-=2./3.*_sigmacoup*sigbws1; } else if(ichan==7) { F1-=2./3.*_sigmacoup*sigbws2; F3+=2./3.*_sigmacoup*sigbws2; } else if(ichan==8) { complex sfact1 = 1./18.*(4.*_mpic*_mpic-s1)*(q2+s1-_mpic*_mpic)/s1*f2bws1; F1+=Complex(_f2coup*0.5*(s3-s2)*f2bws1); F2-=Complex(_f2coup*sfact1); F3-=Complex(_f2coup*sfact1); } else if(ichan==9) { complex sfact2 = 1./18.*(4.*_mpic*_mpic-s2)*(q2+s2-_mpic*_mpic)/s2*f2bws2; F1-=Complex(_f2coup*sfact2); F2+=Complex(_f2coup*0.5*(s3-s1)*f2bws2); F3+=Complex(_f2coup*sfact2); } else if(ichan==10) { F2-=2./3.*_f0coup*f0bws1; F3-=2./3.*_f0coup*f0bws1; } else if(ichan==11) { F1-=2./3.*_f0coup*f0bws2; F3+=2./3.*_f0coup*f0bws2; } } else { throw Exception() << "ThreePionCLEOCurrent Unknown Decay" << imode << Exception::abortnow; } F1 *= fact; F2 *= fact; F3 *= fact; } // complete the construction of the decay mode for integration bool ThreePionCLEOCurrent::createMode(int icharge, tcPDPtr resonance, FlavourInfo flavour, unsigned int imode,PhaseSpaceModePtr mode, unsigned int iloc,int ires, PhaseSpaceChannel phase, Energy upp ) { // check the charge and resonance if(imode<=1||imode==3||imode==4) { if(icharge!=0) return false; if(resonance && resonance->id()!=ParticleID::a_10) return false; } else if(imode==2||imode==5) { if(abs(icharge)!=3) return false; if(resonance && abs(resonance->id())!=ParticleID::a_1plus) return false; } // check the total isospin if(flavour.I!=IsoSpin::IUnknown) { if(flavour.I!=IsoSpin::IOne) return false; } // check I_3 if(flavour.I3!=IsoSpin::I3Unknown) { switch(flavour.I3) { case IsoSpin::I3Zero: if(imode==2||imode==5) return false; break; case IsoSpin::I3One: if((imode!=2&&imode!=5) || icharge ==-3) return false; break; case IsoSpin::I3MinusOne: if((imode!=2&&imode!=5) || icharge == 3) return false; break; default: return false; } } if(flavour.strange != Strangeness::Unknown and flavour.strange != Strangeness::Zero) return false; if(flavour.charm != Charm::Unknown and flavour.charm != Charm::Zero ) return false; if(flavour.bottom != Beauty::Unknown and flavour.bottom !=Beauty::Zero ) return false; // get the particles and check the masses int iq(0),ia(0); tPDVector extpart=particles(1,imode,iq,ia); Energy min(ZERO); for(unsigned int ix=0;ixmassMin(); if(min>upp) return false; _maxmass=max(_maxmass,upp); // pointers to the particles we need tPDPtr a1m = getParticleData(ParticleID::a_1minus); tPDPtr a10 = getParticleData(ParticleID::a_10); // the different rho resonances tPDPtr rhom[3] = {getParticleData(-213),getParticleData(-100213),getParticleData(-30213)}; if(icharge==3) { for(unsigned int ix=0;ix<3;++ix) rhom[ix]=rhom[ix]->CC(); a1m = a1m->CC(); } tPDPtr rho0[3] = {getParticleData(113),getParticleData(100113),getParticleData(30113)}; // the sigma tPDPtr sigma = getParticleData(9000221); // the f_2 tPDPtr f2=getParticleData(225); // the f_0 tPDPtr f0=getParticleData(10221); assert(f2 && f0 && sigma); // a0 -> pi0 pi0 pi0 if(imode<=1) { for(unsigned int ix=0;ix<3;++ix) { tPDPtr temp; if(ix==0) temp = sigma; else if(ix==1) temp = f2; else if(ix==2) temp = f0; mode->addChannel((PhaseSpaceChannel(phase),ires,a10,ires+1,temp,ires+1,iloc+1, ires+2,iloc+2,ires+2,iloc+3)); mode->addChannel((PhaseSpaceChannel(phase),ires,a10,ires+1,temp,ires+1,iloc+2, ires+2,iloc+1,ires+2,iloc+3)); mode->addChannel((PhaseSpaceChannel(phase),ires,a10,ires+1,temp,ires+1,iloc+3, ires+2,iloc+1,ires+2,iloc+2)); } } // decay mode a_1- -> pi0 pi0 pi- else if(imode==2) { for(unsigned int ix=0;ix<3;++ix) { // first rho+ channel mode->addChannel((PhaseSpaceChannel(phase),ires,a1m,ires+1,rhom[ix],ires+1,iloc+1, ires+2,iloc+2,ires+2,iloc+3)); // second rho+ channel mode->addChannel((PhaseSpaceChannel(phase),ires,a1m,ires+1,rhom[ix],ires+1,iloc+2, ires+2,iloc+1,ires+2,iloc+3)); } // I=0 channels for(unsigned int iy=0;iy<3;++iy) { tPDPtr temp; if(iy==0) temp = sigma; else if(iy==1) temp = f2; else if(iy==2) temp = f0; mode->addChannel((PhaseSpaceChannel(phase),ires,a1m,ires+1,temp,ires+1,iloc+3, ires+2,iloc+1,ires+2,iloc+2)); } } // decay mode a_10 -> pi+ pi- pi0 else if(imode==3||imode==4) { // rho modes for(unsigned int ix=0;ix<3;++ix) { // first rho channel mode->addChannel((PhaseSpaceChannel(phase),ires,a10,ires+1,rhom[ix],ires+1,iloc+1, ires+2,iloc+2,ires+2,iloc+3)); // second channel mode->addChannel((PhaseSpaceChannel(phase),ires,a10,ires+1,rhom[ix],ires+1,iloc+2, ires+2,iloc+1,ires+2,iloc+3)); } // I=0 channels for(unsigned int iy=0;iy<3;++iy) { tPDPtr temp; if(iy==0) temp = sigma; else if(iy==1) temp = f2; else if(iy==2) temp = f0; mode->addChannel((PhaseSpaceChannel(phase),ires,a10,ires+1,temp,ires+1,iloc+3, ires+2,iloc+1,ires+2,iloc+2)); } } else if(imode==5) { for(unsigned int ix=0;ix<3;++ix) { // the neutral rho channels // first channel mode->addChannel((PhaseSpaceChannel(phase),ires,a1m,ires+1,rho0[ix],ires+1,iloc+1, ires+2,iloc+2,ires+2,iloc+3)); // interchanged channel mode->addChannel((PhaseSpaceChannel(phase),ires,a1m,ires+1,rho0[ix],ires+1,iloc+2, ires+2,iloc+1,ires+2,iloc+3)); } for(unsigned int iy=0;iy<3;++iy) { tPDPtr temp; if(iy==0) temp = sigma; else if(iy==1) temp = f2; else if(iy==2) temp = f0; // first channel mode->addChannel((PhaseSpaceChannel(phase),ires,a1m,ires+1,temp,ires+1,iloc+1, ires+2,iloc+2,ires+2,iloc+3)); // interchanged channel mode->addChannel((PhaseSpaceChannel(phase),ires,a1m,ires+1,temp,ires+1,iloc+2, ires+2,iloc+1,ires+2,iloc+3)); } } // reset the integration parameters for(unsigned int iy=0;iy<_rhomass.size();++iy) { mode->resetIntermediate(rho0[iy],_rhomass[iy],_rhowidth[iy]); mode->resetIntermediate(rhom[iy],_rhomass[iy],_rhowidth[iy]); } mode->resetIntermediate(sigma,_sigmamass,_sigmawidth); mode->resetIntermediate(f2,_f2mass,_f2width); mode->resetIntermediate(f0,_f0mass,_f0width); mode->resetIntermediate(a10,_a1mass,_a1width); mode->resetIntermediate(a10,_a1mass,_a1width); return true; } void ThreePionCLEOCurrent::dataBaseOutput(ofstream & output,bool header, bool create) const { if(header){output << "update decayers set parameters=\"";} if(create) { output << "create Herwig::ThreePionCLEOCurrent " << name() << " HwWeakCurrents.so\n"; } for(unsigned int ix=0;ix<_rhomass.size();++ix) { if(ix<2) { output << "newdef " << name() << ":RhoMasses " << ix << " " << _rhomass[ix]/MeV << "\n"; } else { output << "insert " << name() << ":RhoMasses " << ix << " " << _rhomass[ix]/MeV << "\n"; } } for(unsigned int ix=0;ix<_rhowidth.size();++ix) { if(ix<2) { output << "newdef " << name() << ":RhoWidths " << ix << " " << _rhowidth[ix]/MeV << "\n"; } else { output << "insert " << name() << ":RhoWidths " << ix << " " << _rhowidth[ix]/MeV << "\n"; } } output << "newdef " << name() << ":f_2Mass " << _f2mass/GeV << "\n"; output << "newdef " << name() << ":f_2Width " << _f2width/GeV << "\n"; output << "newdef " << name() << ":f_0Mass " << _f0mass/GeV << "\n"; output << "newdef " << name() << ":f_0Width " << _f0width/GeV << "\n"; output << "newdef " << name() << ":sigmaMass " << _sigmamass/GeV << "\n"; output << "newdef " << name() << ":sigmaWidth " << _sigmawidth/GeV << "\n"; output << "newdef " << name() << ":a1Mass " << _a1mass/GeV << "\n"; output << "newdef " << name() << ":a1Width " <<_a1width /GeV << "\n"; output << "newdef " << name() << ":KaonMass " << _mK/GeV << "\n"; output << "newdef " << name() << ":KStarMass " << _mKstar/GeV << "\n"; output << "newdef " << name() << ":KaonCoupling " << _gammk << "\n"; output << "newdef " << name() << ":Fpi " << _fpi/MeV << "\n"; output << "newdef " << name() << ":a1WidthOption " << _a1opt << "\n"; for(unsigned int ix=0;ix<_rhomagP.size();++ix) { if(ix<2) { output << "newdef " << name() << ":RhoPWaveMagnitude " << ix << " " << _rhomagP[ix] << "\n"; } else { output << "insert " << name() << ":RhoPWaveMagnitude " << ix << " " << _rhomagP[ix] << "\n"; } } for(unsigned int ix=0;ix<_rhophaseP.size();++ix) { if(ix<2) { output << "newdef " << name() << ":RhoPWavePhase " << ix << " " << _rhophaseP[ix] << "\n"; } else { output << "insert " << name() << ":RhoPWavePhase " << ix << " " << _rhophaseP[ix] << "\n"; } } for(unsigned int ix=0;ix<_rhomagD.size();++ix) { if(ix<2) { output << "newdef " << name() << ":RhoDWaveMagnitude " << ix << " " << _rhomagD[ix]*MeV2 << "\n"; } else { output << "insert " << name() << ":RhoDWaveMagnitude " << ix << " " << _rhomagD[ix]*MeV2 << "\n"; } } for(unsigned int ix=0;ix<_rhophaseD.size();++ix) { if(ix<2) { output << "newdef " << name() << ":RhoDWavePhase " << ix << " " << _rhophaseD[ix] << "\n"; } else { output << "insert " << name() << ":RhoDWavePhase " << ix << " " << _rhophaseD[ix] << "\n"; } } output << "newdef " << name() << ":f0Phase " << _f0phase << "\n"; output << "newdef " << name() << ":f2Phase " <<_f2phase << "\n"; output << "newdef " << name() << ":sigmaPhase " <<_sigmaphase << "\n"; output << "newdef " << name() << ":f0Magnitude " << _f0mag << "\n"; output << "newdef " << name() << ":f2Magnitude " << _f2mag*GeV2 << "\n"; output << "newdef " << name() << ":sigmaMagnitude " <<_sigmamag << "\n"; output << "newdef " << name() << ":Initializea1 " <<_initializea1 << "\n"; for(unsigned int ix=0;ix<_a1runwidth.size();++ix) { if(ix<200) { output << "newdef " << name() << ":a1RunningWidth " << ix << " " << _a1runwidth[ix]/MeV << "\n"; } else { output << "insert " << name() << ":a1RunningWidth " << ix << " " << _a1runwidth[ix]/MeV << "\n"; } } for(unsigned int ix=0;ix<_a1runq2.size();++ix) { if(ix<200) { output << "newdef " << name() << ":a1RunningQ2 " << ix << " " << _a1runq2[ix]/MeV2 << "\n"; } else { output << "insert " << name() << ":a1RunningQ2 " << ix << " " << _a1runq2[ix]/MeV2 << "\n"; } } WeakCurrent::dataBaseOutput(output,false,false); if(header) output << "\n\" where BINARY ThePEGName=\"" << fullName() << "\";" << endl; } void ThreePionCLEOCurrent::doinitrun() { // set up the running a_1 width inita1Width(0); WeakCurrent::doinitrun(); } void ThreePionCLEOCurrent::doupdate() { WeakCurrent::doupdate(); // update running width if needed if ( !touched() ) return; if(_maxmass!=_maxcalc) inita1Width(-1); } Energy ThreePionCLEOCurrent::a1width(Energy2 q2) const { Energy output; if(_a1opt) output=(*_a1runinter)(q2); else { double gam(0.); if(q2<0.1753*GeV2) { gam =0.; } else if(q2<0.823*GeV2) { double p=q2/GeV2-0.1753; gam = 5.80900*p*sqr(p)*(1.-3.00980*p+4.57920*sqr(p)); } else { double p=q2/GeV2; gam = -13.91400+27.67900*p-13.39300*sqr(p) +3.19240*sqr(p)*p-0.10487*sqr(sqr(p)); } if(q2<0.1676*GeV2) { gam+=0.; } else if(q2<0.823*GeV2) { double p=q2/GeV2-0.1676; gam+= 6.28450*p*sqr(p)*(1.-2.95950*p+4.33550*sqr(p)); } else { double p=q2/GeV2; gam+= -15.41100+32.08800*p-17.66600*sqr(p) +4.93550*sqr(p)*p-0.37498*sqr(sqr(p)); } Energy mkst=0.894*GeV,mk=0.496*GeV; Energy2 mk1sq=sqr(mkst+mk), mk2sq=sqr(mkst-mk); double c3pi=sqr(0.2384),ckst=sqr(4.7621)*c3pi; gam*=c3pi; if(q2>mk1sq) gam+=0.5*ckst*sqrt((q2-mk1sq)*(q2-mk2sq))/q2; gam = gam*_a1width*_a1mass/GeV2/1.331/0.814/1.0252088; output = gam*GeV2/sqrt(q2); } return output; } double ThreePionCLEOCurrent::threeBodyMatrixElement(const int iopt, const Energy2 q2, const Energy2 s3, const Energy2 s2, const Energy2 s1, const Energy, const Energy, const Energy) const { Energy p1[5],p2[5],p3[5]; Energy2 p1sq, p2sq, p3sq; Energy q=sqrt(q2); Energy2 mpi2c=_mpic*_mpic; Energy2 mpi20=_mpi0*_mpi0; // construct the momenta for the 2 neutral 1 charged mode Complex F1,F2,F3; if(iopt==0) { // construct the momenta of the decay products p1[0] = 0.5*(q2+mpi20-s1)/q; p1sq=p1[0]*p1[0]; p1[4]=sqrt(p1sq-mpi20); p2[0] = 0.5*(q2+mpi20-s2)/q; p2sq=p2[0]*p2[0]; p2[4]=sqrt(p2sq-mpi20); p3[0] = 0.5*(q2+mpi2c-s3)/q; p3sq=p3[0]*p3[0]; p3[4]=sqrt(p3sq-mpi2c); // take momentum of 1 parallel to z axis p1[1]=ZERO;p1[2]=ZERO;p1[3]=p1[4]; // construct 2 double cos2 = 0.5*(p1sq+p2sq-p3sq-2.*mpi20+mpi2c)/p1[4]/p2[4]; p2[1] = p2[4]*sqrt(1.-cos2*cos2); p2[2]=ZERO; p2[3]=-p2[4]*cos2; // construct 3 double cos3 = 0.5*(p1sq-p2sq+p3sq-mpi2c)/p1[4]/p3[4]; p3[1] =-p3[4]*sqrt(1.-cos3*cos3); p3[2]=ZERO; p3[3]=-p3[4]*cos3; // calculate the form factors CLEOFormFactor(1,-1,q2,s1,s2,s3,F1,F2,F3); } // construct the momenta for the 3 charged mode else { // construct the momenta of the decay products p1[0] = 0.5*(q2+mpi2c-s1)/q; p1sq=p1[0]*p1[0]; p1[4]=sqrt(p1sq-mpi2c); p2[0] = 0.5*(q2+mpi2c-s2)/q; p2sq=p2[0]*p2[0]; p2[4]=sqrt(p2sq-mpi2c); p3[0] = 0.5*(q2+mpi2c-s3)/q; p3sq=p3[0]*p3[0]; p3[4]=sqrt(p3sq-mpi2c); // take momentum of 1 parallel to z axis p1[1]=ZERO;p1[2]=ZERO;p1[3]=p1[4]; // construct 2 double cos2 = 0.5*(p1sq+p2sq-p3sq-mpi2c)/p1[4]/p2[4]; p2[1] = p2[4]*sqrt(1.-cos2*cos2); p2[2]=ZERO; p2[3]=-p2[4]*cos2; // construct 3 double cos3 = 0.5*(p1sq-p2sq+p3sq-mpi2c)/p1[4]/p3[4]; p3[1] =-p3[4]*sqrt(1.-cos3*cos3); p3[2]=ZERO; p3[3]=-p3[4]*cos3; // calculate the form factors CLEOFormFactor(0,-1,q2,s1,s2,s3,F1,F2,F3); } // construct a vector with the current complex current[4]; for(unsigned int ix=0;ix<4;++ix) current[ix] = F1*(p2[ix]-p3[ix])-F2*(p3[ix]-p1[ix])+F3*(p1[ix]-p2[ix]); complex dot1=current[0]*conj(current[0]); for(unsigned int ix=1;ix<4;++ix) dot1-=current[ix]*conj(current[ix]); complex dot2=current[0]*q; return(-dot1+dot2*conj(dot2)/q2).real() / sqr(_rhomass[0]); } // the hadronic currents vector ThreePionCLEOCurrent::current(tcPDPtr resonance, FlavourInfo flavour, const int imode, const int ichan, Energy & scale, const tPDVector & , const vector & momenta, DecayIntegrator::MEOption) const { useMe(); // check the isospin if(flavour.I!=IsoSpin::IUnknown && flavour.I!=IsoSpin::IOne) return vector(); // check I_3 if(flavour.I3!=IsoSpin::I3Unknown) { switch(flavour.I3) { case IsoSpin::I3Zero: if(imode==2||imode==5) return vector(); break; case IsoSpin::I3One: if(imode!=2&&imode!=5) return vector(); break; case IsoSpin::I3MinusOne: if(imode!=2&&imode!=5) return vector(); break; default: return vector(); } } if(flavour.strange != Strangeness::Unknown and flavour.strange != Strangeness::Zero) return vector(); if(flavour.charm != Charm::Unknown and flavour.charm != Charm::Zero ) return vector(); if(flavour.bottom != Beauty::Unknown and flavour.bottom !=Beauty::Zero ) return vector(); // calculate q2,s1,s2,s3 Lorentz5Momentum q; for(unsigned int ix=0;ix a1fact = _fact; if(!resonance) a1fact *= a1BreitWigner(q2); // current LorentzPolarizationVectorE vect = q.mass()*a1fact* ((F2-F1)*momenta[2] + (F1-F3)*momenta[1] + (F3-F2)*momenta[0]); // scalar piece Complex dot=(vect*q)/q2; vect -= dot*q; // return the answer return vector(1,vect); } bool ThreePionCLEOCurrent::accept(vector id) { if(id.size()!=3) return false; for(unsigned int ix=0;ix id) { if(id.size()!=3) return -1; int npip(0),npim(0),npi0(0); for(unsigned int ix=0;ixCC()) extpart[ix]=extpart[ix]->CC(); } } // return the answer return extpart; } diff --git a/Hadronization/SpinHadronizer.h b/Hadronization/SpinHadronizer.h --- a/Hadronization/SpinHadronizer.h +++ b/Hadronization/SpinHadronizer.h @@ -1,191 +1,191 @@ // -*- C++ -*- #ifndef Herwig_SpinHadronizer_H #define Herwig_SpinHadronizer_H // // This is the declaration of the SpinHadronizer class. // #include "ThePEG/Handlers/StepHandler.h" namespace Herwig { using namespace ThePEG; /** * The SpinHadronizer class is designed to be used as a post-hadronization handler to * give a simple model of spin transfer between the perturbative and non-perturbative * stages. * * @see \ref SpinHadronizerInterfaces "The interfaces" * defined for SpinHadronizer. */ class SpinHadronizer: public StepHandler { public: /** * The default constructor. */ SpinHadronizer() : omegaHalf_(2./3.), omegaThreeHalf_(0.2), minFlav_(3), maxFlav_(5), debug_(false), qPol_(6,make_pair(0.,0.)) {} 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: /** * Functions to calculate the spins */ //@{ /** * Calculate the spin of a baryon */ void baryonSpin(tPPtr baryon); /** * Calculate the spin of a meson */ void mesonSpin(tPPtr meson); //@} 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(); /** * Finalize this object. Called in the run phase just after a * run has ended. Used eg. to write out statistics. */ virtual void dofinish(); //@} 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 assignment operator is private and must never be called. * In fact, it should not even be implemented. */ - SpinHadronizer & operator=(const SpinHadronizer &); + SpinHadronizer & operator=(const SpinHadronizer &) = delete; private: /** * Parameters */ //@{ /** * Falk-Peskin \f$\omega_\frac12\f$ parameter */ double omegaHalf_; /** * Falk-Peskin \f$\omega_\frac32\f$ parameter */ double omegaThreeHalf_; /** * Minimum quark flavour */ unsigned int minFlav_; /** * Maximum quark flavour */ unsigned int maxFlav_; /** * Print out debugging info */ bool debug_; /** * Polarization of the quarks */ vector > qPol_; //@} }; } #endif /* Herwig_SpinHadronizer_H */ diff --git a/MatrixElement/Matchbox/External/MadGraph/mg2herwig.in b/MatrixElement/Matchbox/External/MadGraph/mg2herwig.in --- a/MatrixElement/Matchbox/External/MadGraph/mg2herwig.in +++ b/MatrixElement/Matchbox/External/MadGraph/mg2herwig.in @@ -1,392 +1,392 @@ #! /usr/bin/env python import os,sys,glob,errno,shutil,time,fnmatch,tempfile from optparse import OptionParser def mkdir_p(path): """Recursive mkdir""" if not os.path.isdir(path): os.makedirs(path) def finddirs(pattern, path): """Find all paths which contain a filename matching 'pattern'""" result = [ root for root, _, files in os.walk(path) if fnmatch.filter(files, pattern) ] return result # fill the proc.dat file from BornAmplitudes.dat and VirtAmplitudes.dat. def fillprocs(model,oras,orew): """Fill proc.dat from BornAmplitudes.dat and VirtAmplitudes.dat""" oras=int(oras) orew=int(orew) bornlist=[] virtlist=[] result = [] result.append('set fortran_compiler @FC@ --no_save') result.append("import model "+model) borns="BornAmplitudes.dat" virts="VirtAmplitudes.dat" procnr=0 virtlines=[] bornlines=[] # first pass to work out leg numbers minlegs=100 legs=0 for i in [borns, virts]: with open(i, "r") as f: for line in f: line = line.split(" ") N = len(line) if N < minlegs: minlegs = N for it in line: if it.replace("-","").isdigit(): legs += 1 #conversion for heft model to go from (2QCD+1QED)->1HIG for each FS HIGGS. if model=="heft": HIG = oras+orew-legs+2 if HIG % 2 == 0: HIG = HIG//2 else: sys.stderr.write("Warning: No possible coupling power:(int(oras)+int(orew)-legs+2)%2!=0\n") exit(1) else: HIG = 0 with open(borns, "r") as f: for i, line in enumerate(f): #this assumes extra QCD emmissions addalphas = len(line.split(" ")) - minlegs line = line.rstrip() procnr += 1 bornlist.append(str(procnr)) cmd = "generate " if i==0 else "add process" hig = "" qcd = oras+addalphas qed = orew if HIG: hig = "HIG=%s" % HIG qcd -= 2*HIG qed -= HIG bornlines.append("{cmd} {line} {hig} QCD<={qcd} QED<={qed} @{procnr}".format(**locals())) result.extend(bornlines) with open(virts, "r") as f: for i, line in enumerate(f): addalphas = len(line.split(" ")) - minlegs line = line.rstrip() procnr += 1 virtlist.append(str(procnr)) cmd = "generate " if i==0 else "add process" qcd = oras+addalphas qed = orew virtlines.append("{cmd} {line} QCD<={qcd} QED<={qed} [ virt=QCD ] @{procnr}".format(**locals())) if virtlines and bornlines: result.append("output matchbox MG5 --postpone_model") result.extend(virtlines) result.append("output matchbox MG5 -f\n") with open("proc.dat","w") as f: f.write('\n'.join(result)) return bornlist,virtlist def build_matchbox_tmp(pwd,buildpath,absolute_links): """Create the working directories and link the required files from central MG""" pwd = os.path.abspath(pwd) if not os.path.isabs(buildpath): buildpath = os.path.join(pwd,buildpath) resources =glob.glob(os.path.join(buildpath,"MG5","SubProcesses","MadLoop5_resources","*")) resources+=glob.glob(os.path.join(buildpath,"MG5","Cards","*")) resources+=glob.glob(os.path.join(buildpath,"MG5","Cards","SubProcesses","*")) for i in resources: f = os.path.join(MG_TMP, os.path.basename(i)) if not os.path.isfile(f) and not os.path.islink(f): if absolute_links: os.symlink(i,f) else: os.symlink(os.path.relpath(i,MG_TMP), f) parser = OptionParser() parser.add_option("-a", "--buildpath", dest="buildpath",help="Do not use this script. Only for Herwig internal use. ") parser.add_option("-b", "--build", action="store_true", dest="build", default=True,help="Do not use this script. Only for Herwig internal use.") parser.add_option("-c", "--madgraph", dest="madgraph",help="Do not use this script. Only for Herwig internal use.") parser.add_option("-d", "--runpath", dest="runpath",help="Do not use this script. Only for Herwig internal use.") parser.add_option("-e", "--model", dest="model",help="Do not use this script. Only for Herwig internal use.") parser.add_option("-f", "--orderas", dest="orderas",help="Do not use this script. Only for Herwig internal use.") parser.add_option("-g", "--orderew", dest="orderew",help="Do not use this script. Only for Herwig internal use.") parser.add_option("-i", "--datadir",dest="datadir",help="Do not use this script. Only for Herwig internal use.") parser.add_option("-I", "--includedir",dest="includedir",help="Do not use this script. Only for Herwig internal use.") parser.add_option("-l", "--absolute-links",action="store_true", dest="absolute_links", default=False,\ help="Do not use this script. Only for Herwig internal use.") parser.add_option("--cacheprefix", dest="cacheprefix",help="Do not use this script. Only for Herwig internal use.") (options, args) = parser.parse_args() if not options.cacheprefix: sys.stderr.write("Need a value for --cacheprefix\n") exit(1) cachedir = os.path.abspath(options.cacheprefix) mkdir_p(cachedir) #MG_TMP = tempfile.mkdtemp(prefix='MG_tmp_',dir=cachedir) MG_TMP = os.path.join(cachedir, 'MG_tmp') mkdir_p(MG_TMP) pwd=os.getcwd() param_card="" if options.model=="loop_sm" or options.model=="heft": if options.model=="loop_sm": param_card="param_card.dat" else: param_card="param_card_"+options.model+".dat" file = open("%s/MadGraphInterface/%s.in" % (options.datadir,param_card) , "r") paramcard = file.read() file.close() file = open(options.runpath+"/"+param_card, "w") params=open(options.runpath+"/MG-Parameter.dat", "r") for line in params: a=line.split() paramcard=paramcard.replace(a[0],a[1]) params.close() file.write(paramcard) file.close() elif options.model.startswith("/"): os.system("python %s/write_param_card.py " % options.model) else: - print "---------------------------------------------------------------" - print "---------------------------------------------------------------" - print "Warning: The model set for the MadGraph Interface " - print " needs a parameter setting by hand." - print " Please fill the param_card_"+options.model+".dat" - print " with your favourite assumptions." - print " And make sure Herwig uses the same parameters." - print "---------------------------------------------------------------" - print "---------------------------------------------------------------" + print("---------------------------------------------------------------") + print("---------------------------------------------------------------") + print("Warning: The model set for the MadGraph Interface ") + print(" needs a parameter setting by hand.") + print(" Please fill the param_card_"+options.model+".dat") + print(" with your favourite assumptions.") + print(" And make sure Herwig uses the same parameters.") + print("---------------------------------------------------------------") + print("---------------------------------------------------------------") if os.path.isfile(options.buildpath +"/MG5/Cards/param_card.dat") and not os.path.isfile(options.runpath+"/"+"param_card_"+options.model+".dat"): shutil.copyfile(options.buildpath +"/MG5/Cards/param_card.dat", options.runpath+"/"+"param_card_"+options.model+".dat") time.sleep(1) if not os.path.isdir(options.buildpath): - print "The MadGraph Install path did not exist. It has been created for you." - print "Just start Herwig read again.." + print("The MadGraph Install path did not exist. It has been created for you.") + print("Just start Herwig read again..") mkdir_p(options.buildpath) exit() os.chdir(options.buildpath) if os.path.isfile("InterfaceMadGraph.so"): build_matchbox_tmp(pwd,options.buildpath,options.absolute_links) exit() Bornlist,Virtlist=fillprocs(options.model,options.orderas,options.orderew) if not options.madgraph and not os.path.isfile("InterfaceMadGraph.so"): sys.stderr.write("*** MadGraph build failed, check logfile for details ***") exit(1) os.system("python "+options.madgraph+"/mg5_aMC proc.dat") def make_case_stmts(func): """Create Fortran case statements for all processes""" result = [] # add a case option for each item for i in Bornlist + list(set(Virtlist) - set(Bornlist)): if func == "SLOOPMATRIX(momenta,virt)" and i not in Virtlist: continue result.append(" CASE(%s)" % i) result.append(" CALL MG5_%s_%s" % (i,func)) # if we have anything, add header and footer if result: result.insert(0, " SELECT CASE (proc)") result.append(" CASE DEFAULT") result.append(" WRITE(*,*) '##W02A WARNING No id found '") result.append(" END SELECT ") return "\n".join(result) else: return "" def write_interfaceMG(): """Create the InterfaceMadGraph.f FORTRAN file""" subs = { "MG_CalculateBORNtxt" : make_case_stmts("BORN(momenta,hel)"), "MG_CalculateVIRTtxt" : make_case_stmts("SLOOPMATRIX(momenta,virt)"), "MG_Jamptxt" : make_case_stmts("GET_JAMP(color,Jamp)"), "MG_LNJamptxt" : make_case_stmts("GET_LNJAMP(color,Jamp)"), "MG_NColtxt" : make_case_stmts("GET_NCOL(color)"), "MG_ColourMattxt" : make_case_stmts("GET_NCOLOR(i,j,color)"), } baseN = 5 if subs["MG_CalculateVIRTtxt"] else 3 subs["MG_vxxxxxtxt"] = """\ subroutine MG_vxxxxx(p, n,inc,VC) $ bind(c, name='MG_vxxxxx') IMPLICIT NONE double precision p(0:3) double precision n(0:3) INTEGER inc double precision VC(0:7) double complex VCtmp({d}) call vxxxxx(p, 0d0,1,inc ,VCtmp) VC(0)= real(VCtmp({a})) VC(1)=aimag(VCtmp({a})) VC(2)= real(VCtmp({b})) VC(3)=aimag(VCtmp({b})) VC(4)= real(VCtmp({c})) VC(5)=aimag(VCtmp({c})) VC(6)= real(VCtmp({d})) VC(7)=aimag(VCtmp({d})) END """.format(a=baseN, b=baseN+1, c=baseN+2, d=baseN+3) fname = os.path.join( options.datadir, "MadGraphInterface", "InterfaceMadGraph.f.in" ) with open(fname, 'r') as f: tmp = f.read() with open("InterfaceMadGraph.f", 'w') as f: f.write(tmp.format(**subs)) write_interfaceMG() make=" " fortanfiles=glob.glob('*/*/*.f')+glob.glob('*/*/*/*.f') for i in fortanfiles: if "check_sa" not in i and "f2py_wrapper" not in i: if not os.path.islink(i): make += " "+i+"\\\n " incfiles=glob.glob('*/*/*.inc')+glob.glob('*/*/*/*.inc') coefdir="" for i in incfiles: if "nexternal.inc" in i: coefdir+=" -I"+i.replace("nexternal.inc"," ") file=open("makefile","w") file.write("include MG5/Source/make_opts ") if Virtlist!=[]: collierlib=options.madgraph collierlib=collierlib.replace("bin","HEPTools/collier") onelooplib=options.madgraph onelooplib=onelooplib.replace("bin","HEPTools/oneloop") file.write("\nLIBDIR = MG5/lib") file.write("\nLINKLIBS =-L$(LIBDIR) -lcts -liregi ") if (os.path.exists("MG5/lib/ninja_lib")): - file.write("\nLINKLIBS += -L$(LIBDIR)/ninja_lib -lninja ") + file.write("\nLINKLIBS += -L$(LIBDIR)/ninja_lib -lninja ") if (os.path.exists(collierlib)): file.write("\nLINKLIBS += -L%s -lcollier "%(collierlib)) if (os.path.exists(onelooplib)): file.write("\nLINKLIBS += -L%s -lavh_olo "%(onelooplib)) if (os.path.exists("MG5/lib/golem95_lib")): file.write("\nLINKLIBS += -L$(LIBDIR)/golem95_lib -lgolem") file.write("\nPROCESS= InterfaceMadGraph.f "+make+"\n\nall: \n\t @FC@ @FFLAGS@ -w -fbounds-check -ffixed-line-length-none -fPIC -fno-f2c -shared -s -o InterfaceMadGraph.so -IMG5/SubProcesses/" ) if Virtlist!=[]: if (os.path.exists("MG5/lib/golem95_include")): file.write(" -IMG5/lib/golem95_include ") if (os.path.exists("MG5/lib/ninja_include")): file.write(" -IMG5/lib/ninja_include ") incldir=options.madgraph.replace("bin","HEPTools/include") file.write(" -I%s -I./ "%incldir) # Find all .mod files also in /usr/include if golem was build there. # There can be an error message in the MadGraph output to add the golem include path to the makefiles. # Usually MadGraph finds the path if its Golem was build in an separate dictionary. # Our bootstrap script installs golem with gosam beside boost. Here MadGraph creates a link (->errormessage). # If we can find the modfiles easily the user doesn't need to change the makefiles. moddirs=finddirs('*.mod',options.includedir) for moddir in moddirs: file.write(" -I%s " % moddir) if os.path.isdir("/usr/include"): moddirs=finddirs('*.mod',"/usr/include") for moddir in moddirs: file.write(" -I%s " % moddir) if coefdir != "": file.write(coefdir) file.write(" $(PROCESS) $(LINKLIBS) ") file.close() def replacetext(filename, sourceText, replaceText): """Replace text in existing file.""" with open(filename, "r") as f: text = f.read() with open(filename, "w") as f: f.write(text.replace(sourceText, replaceText)) os.chdir(pwd) os.chdir(options.buildpath) replacetext("MG5/Source/MODEL/lha_read.f", "ident_card.dat", os.path.join(options.cacheprefix, "MG_tmp","ident_card.dat")) replacetext("MG5/Source/MODEL/lha_read.f", "param.log", os.path.join(options.cacheprefix, "MG_tmp","param.log")) if Virtlist: replacetext("MG5/SubProcesses/MadLoopCommons.f", "PREFIX='./'", "PREFIX='%s/'" % MG_TMP) os.system("make") if not os.path.isfile("InterfaceMadGraph.so"): - print "Second trial to make MadGraph Interface. " - print "Needed if new .mod files are produced by make." + print("Second trial to make MadGraph Interface. ") + print("Needed if new .mod files are produced by make.") os.system("make") build_matchbox_tmp(pwd,options.buildpath,options.absolute_links) diff --git a/MatrixElement/Matchbox/Utility/DensityOperator.h b/MatrixElement/Matchbox/Utility/DensityOperator.h --- a/MatrixElement/Matchbox/Utility/DensityOperator.h +++ b/MatrixElement/Matchbox/Utility/DensityOperator.h @@ -1,248 +1,248 @@ // -*- C++ -*- // // DensityOperator.h is a part of Herwig - A multi-purpose Monte Carlo event generator // Copyright (C) 2002-2019 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_DensityOperator_H #define Herwig_DensityOperator_H // // This is the declaration of the DensityOperator class. // #include "ThePEG/Handlers/HandlerBase.h" #include "Herwig/MatrixElement/Matchbox/Utility/ColourBasis.h" #include #include #include namespace Herwig { using namespace ThePEG; typedef boost::numeric::ublas::vector CVector; /** * Here is the documentation of the DensityOperator class. * * @see \ref DensityOperatorInterfaces "The interfaces" * defined for DensityOperator. */ class DensityOperator: public HandlerBase { public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ DensityOperator(); /** * The destructor. */ virtual ~DensityOperator(); //@} public: /** * Clears theDensityOperatorMap. */ void clear(); /** * Prepare for the given sub process. */ void prepare(const cPDVector&); /** * Fill the density operator for the given hard subprocess, summing over all * helicity configurations. */ void fill(const Ptr::ptr, const cPDVector&, const vector& momenta); /** * Evolve the density operator, by * M_{n+1} = -\sum_{i,k}{-4*pi*alpha_s/Ti2*V_{ij,k} T_{i,n}M_nT_{k,n}^\dag}, * see arXiv:1206.0180 eq. (5), note that the pi*pj factor is assumed to be * included in V_{ij,k}. */ void evolve(const map,Complex>& Vijk, const cPDVector& before, const cPDVector& after, const map,map >& emissionsMap, const bool splitAGluon, const bool initialGluonSplitting); /** * Calculate the colour matrix element correction. * -(1+delta(i,gluon))/Ti^2 Tr(Sn+1 Ti Mn Tk^dagger)/Tr(Sn Mn) * where the bracket in front compensates for the gluon symmetry factor, * Ti^2 is C_f or C_a, Sn+1 is the matrix of scalar products, and * Ti is the radiation matrix. * The first arg contains (emitter index, spectator index, emission pid) * */ double colourMatrixElementCorrection(const std::tuple& ikemission, const cPDVector& particles); /** * Checking colour conservation for the colour matrix element corrections. */ void colourConservation(const cPDVector& particles); /** * Get the colour basis. */ Ptr::tptr colourBasis() { return theColourBasis; } /** * Get the colour basis. */ const Ptr::tptr colourBasis() const { return theColourBasis; } /** * Set the colour basis. */ void colourBasis(Ptr::ptr ptr) { theColourBasis = ptr; } /** * Get the correlator map. */ const map,pair >,double>& correlatorMap() const { return theCorrelatorMap; } /** @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; //@} // If needed, insert declarations of virtual function defined in the // InterfacedBase class here (using ThePEG-interfaced-decl in Emacs). private: /** * Number of colours used in colourNorm. */ double Nc; /** * QCD vertex normalization. */ double TR; /** * Normalization of colour charges \mathbf{T}_{ij}^2. */ double colourNorm(const cPDPtr particle); /** * Fast evaluation of Tij*Mn, where a Tij is the matrix from ColourBasis::charge, * which is a sparse matrix, and Mn is the density operator, a dense matrix. * */ matrix prodSparseDense(const compressed_matrix&, const matrix&); /** * Fast evaluation of TijMn*Tkdagger, where a TijMn is the result from the method * prodSparseDense, a dense matrix, and Tkdagger is the transponse conjugate of * the matrix from ColourBasis::charge, a sparse matrix. * */ matrix prodDenseSparse(const matrix&, const compressed_matrix&); /** * Boosts a vector of momenta to the rest frame of the initial pair * of particles (the first 2 elements of the argument vector). Returns * the boosted vectors */ vector boostToRestFrame(const vector& momenta); /** * Boosts a vector of momenta to the rest frame of the initial pair */ bool compareMomentum(const Lorentz5Momentum& p, const Lorentz5Momentum& q); /** * Mapping of colour structures to density operator matrices. * */ map,matrix > theDensityOperatorMap; /** * Mapping of colour structures and legs to colour correlators. */ map,pair >,double> theCorrelatorMap; /** * A map from the hard subprocess particles to a map of amplitude colour * basis order to the normal ordered colour basis. */ map > theColourBasisToColourBasisMap; /** * Colour basis used. */ Ptr::ptr theColourBasis; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ - DensityOperator & operator=(const DensityOperator &); + DensityOperator & operator=(const DensityOperator &) = delete; }; } #endif /* Herwig_DensityOperator_H */ diff --git a/Models/DarkMatter/DMDMMediatorVertex.h b/Models/DarkMatter/DMDMMediatorVertex.h --- a/Models/DarkMatter/DMDMMediatorVertex.h +++ b/Models/DarkMatter/DMDMMediatorVertex.h @@ -1,113 +1,113 @@ // -*- C++ -*- #ifndef Herwig_DMDMMediatorVertex_H #define Herwig_DMDMMediatorVertex_H // // This is the declaration of the DMDMMediatorVertex class. // #include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h" namespace Herwig { using namespace ThePEG; /** * The DMDMMediatorVertex class implements the coupling of the dark matter to the mediator * * @see \ref DMDMMediatorVertexInterfaces "The interfaces" * defined for DMDMMediatorVertex. */ class DMDMMediatorVertex: public FFVVertex { public: /** * The default constructor. */ DMDMMediatorVertex(); /** * Calculate the couplings. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3); 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 assignment operator is private and must never be called. * In fact, it should not even be implemented. */ - DMDMMediatorVertex & operator=(const DMDMMediatorVertex &); + DMDMMediatorVertex & operator=(const DMDMMediatorVertex &) = delete; private: /** * DM coupling to the dark mediator */ double cDMmed_; }; } #endif /* Herwig_DMDMMediatorVertex_H */ diff --git a/Models/DarkMatter/MEDM2Mesons.cc b/Models/DarkMatter/MEDM2Mesons.cc --- a/Models/DarkMatter/MEDM2Mesons.cc +++ b/Models/DarkMatter/MEDM2Mesons.cc @@ -1,266 +1,266 @@ // -*- C++ -*- // // This is the implementation of the non-inlined, non-templated member // functions of the MEDM2Mesons class. // #include "MEDM2Mesons.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Reference.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/Repository/UseRandom.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/Utilities/DescribeClass.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" #include "Herwig/Models/General/BSMModel.h" using namespace Herwig; typedef LorentzVector > LorentzPolarizationVectorInvE; MEDM2Mesons::MEDM2Mesons() : cDMmed_(0.), cSMmed_({0.0,0.0,0.0}) {} Energy2 MEDM2Mesons::scale() const { return sHat(); } unsigned int MEDM2Mesons::orderInAlphaS() const { return 0; } unsigned int MEDM2Mesons::orderInAlphaEW() const { return 0; } IBPtr MEDM2Mesons::clone() const { return new_ptr(*this); } IBPtr MEDM2Mesons::fullclone() const { return new_ptr(*this); } void MEDM2Mesons::doinit() { // make sure the current got initialised current_->init(); // max energy Energy Emax = generator()->maximumCMEnergy(); // loop over the modes int nmode=0; for(unsigned int imode=0;imodenumberOfModes();++imode) { // get the external particles for this mode int iq(0),ia(0); tPDVector out = current_->particles(0,imode,iq,ia); current_->decayModeInfo(imode,iq,ia); if(iq==2&&ia==-2) continue; PhaseSpaceModePtr mode = new_ptr(PhaseSpaceMode(incomingA_,out,1., incomingB_,Emax)); PhaseSpaceChannel channel(mode); if(!current_->createMode(0,tcPDPtr(), FlavourInfo(), imode,mode,0,-1,channel,Emax)) continue; modeMap_[imode] = nmode; addMode(mode); ++nmode; } // cast the model Ptr::ptr model = dynamic_ptr_cast::ptr>(generator()->standardModel()); bool foundDM(false),foundU(false),foundD(false),foundS(false); // find the vertices we need and extract the couplings for(unsigned int ix = 0; ix < model->numberOfVertices(); ++ix ) { VertexBasePtr vertex = model->vertex(ix); if(vertex->getNpoint()!=3) continue; for(unsigned int iloc = 0;iloc < 3; ++iloc) { vector ext = vertex->search(iloc, Mediator_->id()); if(ext.empty()) continue; for(unsigned int ioff=0;ioffid() && ext[ioff+1]==incomingB_->id()) || (ext[ioff]==incomingB_->id() && ext[ioff+1]==incomingA_->id())) { foundDM = true; vertex->setCoupling(sqr(Emax),incomingA_,incomingB_,Mediator_); cDMmed_ = vertex->norm(); } else if(abs(ext[ioff])==1 && abs(ext[ioff+1])==1 && ext[ioff]==-ext[ioff+1]) { foundD = true; vertex->setCoupling(sqr(Emax),getParticleData(1),getParticleData(-1),Mediator_); cSMmed_[0] = vertex->norm(); } else if(abs(ext[ioff])==2 && abs(ext[ioff+1])==2 && ext[ioff]==-ext[ioff+1]) { foundU = true; vertex->setCoupling(sqr(Emax),getParticleData(2),getParticleData(-2),Mediator_); cSMmed_[1] = vertex->norm(); } else if(abs(ext[ioff])==3 && abs(ext[ioff+1])==3 && ext[ioff]==-ext[ioff+1]) { foundS = true; vertex->setCoupling(sqr(Emax),getParticleData(3),getParticleData(-3),Mediator_); cSMmed_[2] = vertex->norm(); } } } } if(!foundDM) { throw InitException() << "Cannot find DM coupling in MEDM2Mesons::doinit()"; } if(!foundD) { throw InitException() << "Cannot find down quark coupling in MEDM2Mesons::doinit()"; } if(!foundU) { throw InitException() << "Cannot find up quark coupling in MEDM2Mesons::doinit()"; } if(!foundS) { throw InitException() << "Cannot find strange quark coupling in MEDM2Mesons::doinit()"; } MEMultiChannel::doinit(); } void MEDM2Mesons::persistentOutput(PersistentOStream & os) const { os << current_ << modeMap_ << incomingA_ << incomingB_ << Mediator_ << cDMmed_ << cSMmed_; } void MEDM2Mesons::persistentInput(PersistentIStream & is, int) { is >> current_ >> modeMap_ >> incomingA_ >> incomingB_ >> Mediator_ >> cDMmed_ >> cSMmed_; } //The following static variable is needed for the type // description system in ThePEG. DescribeClass describeHerwigMEDM2Mesons("Herwig::MEDM2Mesons", "Herwig.so"); void MEDM2Mesons::Init() { static ClassDocumentation documentation ("The MEDM2Mesons class simulates the annhilation of" " DM particles to mesons at low energy"); static Reference interfaceWeakCurrent ("WeakCurrent", "The reference for the decay current to be used.", &MEDM2Mesons::current_, false, false, true, false, false); static Reference interfaceIncomingA ("IncomingA", "First incoming particle", &MEDM2Mesons::incomingA_, false, false, true, false, false); static Reference interfaceIncomingB ("IncomingB", "Second incoming particle", &MEDM2Mesons::incomingB_, false, false, true, false, false); static Reference interfaceMediator_ ("Mediator", "DM mediator", &MEDM2Mesons::Mediator_, false, false, true, false, false); } double MEDM2Mesons::me2(const int ichan) const { // compute the incoming current LorentzPolarizationVectorInvE lepton[2][2]; if(incomingA_->iSpin()==PDT::Spin1Half && incomingB_->iSpin()==PDT::Spin1Half) { SpinorWaveFunction em_in( meMomenta()[0],mePartonData()[0],incoming); SpinorBarWaveFunction ep_in( meMomenta()[1],mePartonData()[1],incoming); vector f1; vector a1; for(unsigned int ix=0;ix<2;++ix) { em_in.reset(ix); f1.push_back(em_in); ep_in.reset(ix); a1.push_back(ep_in); } // this should be coupling of DM to mediator/ mediator propagator complex mmed = Mediator_->mass(); complex mmed2 = sqr(mmed); complex mwid = Mediator_->width(); complex prop = sHat()-mmed2+Complex(0.,1.)*mmed*mwid; complex pre = cDMmed_/prop; for(unsigned ix=0;ix<2;++ix) { for(unsigned iy=0;iy<2;++iy) { lepton[ix][iy]= pre*f1[ix].dimensionedWave().vectorCurrent(a1[iy].dimensionedWave()); } } } // TODO think about other spins for the DM else assert(false); // work out the mapping for the hadron vector int nOut = int(meMomenta().size())-2; vector constants(nOut+1); vector iSpin(nOut); vector hadrons(nOut); int itemp(1); int ix(nOut); do { --ix; iSpin[ix] = mePartonData()[ix+2]->iSpin(); itemp *= iSpin[ix]; constants[ix] = itemp; hadrons[ix] = mePartonData()[ix+2]->id(); } while(ix>0); constants[nOut] = 1; // calculate the matrix element me_.reset(ProductionMatrixElement(PDT::Spin1Half,PDT::Spin1Half,iSpin)); // calculate the hadron current unsigned int imode = current_->decayMode(hadrons); Energy q = sqrt(sHat()); vector momenta(meMomenta() .begin()+2, meMomenta().end()); tPDVector out = mode(modeMap_.at(imode))->outgoing(); if(ichan<0) iMode(modeMap_.at(imode)); // get the hadronic currents for the I=1 and I=0 components vector hadronI0(current_->current(tcPDPtr(), FlavourInfo(IsoSpin::IZero, IsoSpin::I3Zero,Strangeness::Zero), imode,ichan,q,out,momenta,DecayIntegrator::Calculate)); vector hadronI1(current_->current(tcPDPtr(), FlavourInfo(IsoSpin::IOne, IsoSpin::I3Zero,Strangeness::Zero), imode,ichan,q,out,momenta,DecayIntegrator::Calculate)); vector hadronssbar(current_->current(tcPDPtr(), FlavourInfo(IsoSpin::IZero, IsoSpin::I3Zero,Strangeness::ssbar), imode,ichan,q,out,momenta,DecayIntegrator::Calculate)); // compute the matrix element vector ihel(meMomenta().size()); double output(0.); unsigned int hI0_size = hadronI0.size(); unsigned int hI1_size = hadronI1.size(); unsigned int hss_size = hadronssbar.size(); unsigned int maxsize = max(max(hadronI0.size(),hadronI1.size()),hss_size); for(unsigned int hhel=0;hhel0;--ix) { ihel[ix+1]=(hhel%constants[ix-1])/constants[ix]; } // loop over the helicities of the incoming particles for(ihel[1]=0;ihel[1]<2;++ihel[1]){ for(ihel[0]=0;ihel[0]<2;++ihel[0]) { Complex amp = 0.; // work on coefficients for the I1 and I0 bits if(hI0_size != 0 ) - amp += (cSMmed_[0]+cSMmed_[1])/sqrt(2.)*(lepton[ihel[0]][ihel[1]].dot(hadronI0[hhel])); + amp += Complex((cSMmed_[0]+cSMmed_[1])/sqrt(2.)*(lepton[ihel[0]][ihel[1]].dot(hadronI0[hhel]))); if(hI1_size !=0) - amp += (cSMmed_[0]-cSMmed_[1])/sqrt(2.)*(lepton[ihel[0]][ihel[1]].dot(hadronI1[hhel])); + amp += Complex((cSMmed_[0]-cSMmed_[1])/sqrt(2.)*(lepton[ihel[0]][ihel[1]].dot(hadronI1[hhel]))); if(hss_size !=0) - amp += cSMmed_[2]* (lepton[ihel[0]][ihel[1]].dot(hadronssbar[hhel])); + amp += Complex(cSMmed_[2]* (lepton[ihel[0]][ihel[1]].dot(hadronssbar[hhel]))); me_(ihel)= amp; output += std::norm(amp); } } } // symmetry factors map ncount; double symmetry(1.); for(tPDPtr o : out) ncount[o->id()]+=1; for(map::const_iterator it=ncount.begin();it!=ncount.end();++it) { symmetry *= it->second; } // prefactors output *= 0.25*sqr(pow(sqrt(sHat())/q,int(momenta.size()-2))); return output/symmetry; } void MEDM2Mesons::constructVertex(tSubProPtr) { } diff --git a/Models/DarkMatter/MEDM2Mesons.h b/Models/DarkMatter/MEDM2Mesons.h --- a/Models/DarkMatter/MEDM2Mesons.h +++ b/Models/DarkMatter/MEDM2Mesons.h @@ -1,177 +1,177 @@ // -*- C++ -*- #ifndef Herwig_MEDM2Mesons_H #define Herwig_MEDM2Mesons_H // // This is the declaration of the MEDM2Mesons class. // #include "Herwig/MatrixElement/MEMultiChannel.h" #include "Herwig/Decay/WeakCurrents/WeakCurrent.h" #include "Herwig/MatrixElement/ProductionMatrixElement.h" namespace Herwig { using namespace ThePEG; /** * The MEDM2Mesons class implements dark matter annhilation via a vector current to * mesons at low energies * * @see \ref MEDM2MesonsInterfaces "The interfaces" * defined for MEDM2Mesons. */ class MEDM2Mesons: public MEMultiChannel { public: /** * The default constructor. */ MEDM2Mesons(); public: /** @name Virtual functions required by the MEBase class. */ //@{ /** * Return the order in \f$\alpha_S\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaS() const; /** * Return the order in \f$\alpha_{EW}\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaEW() const; /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const; //@} /** * Construct the vertex of spin correlations. */ virtual void constructVertex(tSubProPtr); 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: /** * Return the matrix element squared for a given mode and phase-space channel. * @param ichan The channel we are calculating the matrix element for. */ virtual double me2(const int ichan) const; 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: /** * 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 assignment operator is private and must never be called. * In fact, it should not even be implemented. */ - MEDM2Mesons & operator=(const MEDM2Mesons &); + MEDM2Mesons & operator=(const MEDM2Mesons &) = delete; private : /** * Hadronic current etc */ //@{ /** * the hadronic current */ WeakCurrentPtr current_; /** * The matrix element */ mutable ProductionMatrixElement me_; /** * Map for the modes */ map modeMap_; //@} /** * DM */ //@{ /** * Incoming Particles */ PDPtr incomingA_, incomingB_; //@} /** * DM coupling to the dark mediator */ Complex cDMmed_; /** * SM couplings to the dark mediator */ vector cSMmed_; /** * DM vector mediator */ PDPtr Mediator_; }; } #endif /* Herwig_MEDM2Mesons_H */ diff --git a/Models/Feynrules/python/ufo2herwig b/Models/Feynrules/python/ufo2herwig --- a/Models/Feynrules/python/ufo2herwig +++ b/Models/Feynrules/python/ufo2herwig @@ -1,449 +1,474 @@ #! /usr/bin/env python from __future__ import division +from __future__ import print_function import os, sys, pprint, argparse, re,copy -from string import strip, Template +from string import Template # add path to the ufo conversion modules modulepath = os.path.join("@PKGLIBDIR@",'python') sys.path.append(modulepath) from ufo2peg import * # set up the option parser for command line input parser = argparse.ArgumentParser( description='Create Herwig model files from Feynrules UFO input.' ) parser.add_argument( 'ufodir', metavar='UFO_directory', help='the UFO model directory' ) parser.add_argument( '-v', '--verbose', action="store_true", help="print verbose output" ) parser.add_argument( '-n','--name', default="FRModel", help="set custom nametag for the model" ) parser.add_argument( '--ignore-skipped', action="store_true", help="ignore skipped vertices and produce output anyway" ) parser.add_argument( '--split-model', action="store_true", help="Split the model file into pieces to improve compilation for models with many parameters" ) parser.add_argument( '--no-generic-loop-vertices', action="store_true", help="Don't include the automatically generated generic loop vertices for h->gg and h->gamma gamma" ) parser.add_argument( '--include-generic', action="store_true", help="Include support for generic spin structures" ) parser.add_argument( '--use-Herwig-Higgs', action="store_true", help="Use the internal Herwig SM modeling and vertices for Higgs interactions, there may be sign issues but some UFO models have very minimal Higgs interactions" ) parser.add_argument( '--use-generic-for-tensors', action="store_true", help="Use the generic machinery for all tensor vertices (debugging only)" ) parser.add_argument( '--forbidden-particle-name', action="append", default=["eta","phi"], help="Add particle names not allowed as names in UFO models to avoid conflicts with"+\ "Herwig internal particles, names will have _UFO appended" ) +parser.add_argument( + '--convert', + action="store_true", + default=False, + help="Convert the UFO model for python2 to python3 before loading it." +) # get the arguments args = parser.parse_args() +# convert model to python 3 if needed +if(args.convert) : + convertToPython3(args.ufodir) # import the model -import imp -path,mod = os.path.split(os.path.abspath(args.ufodir)) -FR = imp.load_module(mod,*imp.find_module(mod,[path])) +try : + import importlib,importlib.util + try : + path,mod = os.path.split(os.path.abspath(args.ufodir)) + spec = importlib.util.spec_from_file_location(mod,os.path.join(os.path.abspath(args.ufodir),"__init__.py")) + FR = spec.loader.load_module() + except : + print ("Could not load the UFO python module.\n", + "This is usually because you are using python3 and the UFO model is in python2.\n", + "The --convert option can be used to try and convert it, but there is no guarantee.\n", + "As this modifies the model you should make sure you have a backup copy.\n") + quit() +except : + print ("Newer python import did not work, reverting to python 2 imp module") + import imp + path,mod = os.path.split(os.path.abspath(args.ufodir)) + FR = imp.load_module(mod,*imp.find_module(mod,[path])) + ################################################## ################################################## # get the Model name from the arguments modelname = args.name libname = modelname + '.so' # define arrays and variables #allplist = "" parmdecls = [] parmgetters = [] parmconstr = [] doinit = [] paramstoreplace_ = [] paramstoreplace_expressions_ = [] # get external parameters for printing parmsubs = dict( [ (p.name, p.value) for p in FR.all_parameters if p.nature == 'external' ] ) # evaluate python cmath def evaluate(x): import cmath return eval(x, {'cmath':cmath, 'complexconjugate':FR.function_library.complexconjugate, 'im':FR.function_library.im, 're':FR.function_library.re}, parmsubs) ## get internal params into arrays internal = ( p for p in FR.all_parameters if p.nature == 'internal' ) #paramstoreplaceEW_ = [] #paramstoreplaceEW_expressions_ = [] # calculate internal parameters for p in internal: parmsubs.update( { p.name : evaluate(p.value) } ) # if 'aS' in p.value and p.name != 'aS': # paramstoreplace_.append(p.name) # paramstoreplace_expressions_.append(p.value) # if 'aEWM1' in p.value and p.name != 'aEWM1': # paramstoreplaceEW_.append(p.name) # paramstoreplaceEW_expressions_.append(p.value) parmvalues=copy.copy(parmsubs) # more arrays used for substitution in templates paramsforstream = [] parmmodelconstr = [] # loop over parameters and fill in template stuff according to internal/external and complex/real # WARNING: Complex external parameter input not tested! if args.verbose: - print 'verbose mode on: printing all parameters' - print '-'*60 + print ('verbose mode on: printing all parameters') + print ('-'*60) paramsstuff = ('name', 'expression', 'default value', 'nature') pprint.pprint(paramsstuff) interfacedecl_T = """\ static Parameter<{modelname}, {type}> interface{pname} ("{pname}", "The interface for parameter {pname}", &{modelname}::{pname}_, {value}, 0, 0, false, false, Interface::nolimits); """ # sort out the couplings couplingDefns = { "QED" : 99, "QCD" : 99 } try : for coupling in FR.all_orders: name = coupling.name.upper() couplingDefns[name]= coupling.expansion_order except: for coupling in FR.all_couplings: - for name,value in coupling.order.iteritems(): + for name,value in coupling.order.items(): if(name not in couplingDefns) : couplingDefns[name]=99 # sort out the particles massnames = {} widthnames = {} for particle in FR.all_particles: # skip ghosts and goldstones if(isGhost(particle) or isGoldstone(particle)) : continue if particle.mass != 'ZERO' and particle.mass.name != 'ZERO': if(particle.mass in massnames) : if(abs(particle.pdg_code) not in massnames[particle.mass]) : massnames[particle.mass].append(abs(particle.pdg_code)) else : massnames[particle.mass] = [abs(particle.pdg_code)] if particle.width != 'ZERO' and particle.width.name != 'ZERO': if(particle.width in widthnames) : if(abs(particle.pdg_code) not in widthnames[particle.width]) : widthnames[particle.width].append(abs(particle.pdg_code)) else : widthnames[particle.width] = [abs(particle.pdg_code)] interfaceDecls = [] modelparameters = {} for p in FR.all_parameters: value = parmsubs[p.name] if p.type == 'real': assert( value.imag < 1.0e-16 ) value = value.real if p.nature == 'external': if p not in massnames and p not in widthnames: interfaceDecls.append( interfacedecl_T.format(modelname=modelname, pname=p.name, value=value, type=typemap(p.type)) ) else: interfaceDecls.append('\n// no interface for %s. Use particle definition instead.\n' % p.name) if hasattr(p,'lhablock'): lhalabel = '{lhablock}_{lhacode}'.format( lhablock=p.lhablock.upper(), lhacode='_'.join(map(str,p.lhacode)) ) if p not in massnames and p not in widthnames: parmmodelconstr.append('set %s:%s ${%s}' % (modelname, p.name, lhalabel)) else: parmmodelconstr.append('# %s is taken from the particle setup' % p.name) modelparameters[lhalabel] = value parmsubs[p.name] = lhalabel else: if p not in massnames and p not in widthnames: parmmodelconstr.append('set %s:%s %s' % (modelname, p.name, value)) else: parmmodelconstr.append('# %s is taken from the particle setup' % p.name) parmsubs[p.name] = value if p not in massnames and p not in widthnames: parmconstr.append('%s_(%s)' % (p.name, value)) else: parmconstr.append('%s_()' % p.name) else : parmconstr.append('%s_()' % p.name) parmsubs[p.name] = value elif p.type == 'complex': value = complex(value) if p.nature == 'external': parmconstr.append('%s_(%s,%s)' % (p.name, value.real, value.imag)) else : parmconstr.append('%s_(%s,%s)' % (p.name, 0.,0.)) parmsubs[p.name] = value else: raise Exception('Unknown data type "%s".' % p.type) parmdecls.append(' %s %s_;' % (typemap(p.type), p.name)) parmgetters.append(' %s %s() const { return %s_; }' % (typemap(p.type),p.name, p.name)) paramsforstream.append('%s_' % p.name) expression, symbols = 'return %s_' % p.name, None if p.nature != 'external': expression, symbols = py2cpp(p.value) text = add_brackets(expression, symbols) text=text.replace('()()','()') doinit.append(' %s_ = %s;' % (p.name, text) ) if(p.type == 'complex') : doinit.append(' if(std::isnan(%s_.real()) || std::isnan(%s_.imag()) || std::isinf(%s_.real()) || std::isinf(%s_.imag())) {throw InitException() << "Calculated parameter %s is nan or inf in Feynrules model. Check your input parameters.";}' % (p.name,p.name,p.name,p.name,p.name) ) else : doinit.append(' if(std::isnan(%s_) || std::isinf(%s_)) {throw InitException() << "Calculated parameter %s is nan or inf in Feynrules model. Check your input parameters.";}' % (p.name,p.name,p.name) ) if p in massnames: for idCode in massnames[p] : doinit.append(' resetMass(%s,%s_ * GeV);' % (idCode, p.name) ) if p in widthnames: for idCode in widthnames[p] : doinit.append(' getParticleData(%s)->width(%s_ * GeV);' % (idCode, p.name) ) doinit.append(' getParticleData(%s)->cTau (%s_ == 0.0 ? Length() : hbarc/(%s_*GeV));' % (idCode, p.name, p.name) ) doinit.append(' getParticleData(%s)->widthCut(10. * %s_ * GeV);' % (idCode, p.name) ) elif p.nature == 'external': if p in massnames: for idCode in massnames[p] : doinit.append(' %s_ = getParticleData(%s)->mass() / GeV;' % (p.name, idCode) ) if p in widthnames: for idCode in widthnames[p] : doinit.append(' %s_ = getParticleData(%s)->width() / GeV;' % (p.name, idCode) ) if args.verbose: pprint.pprint((p.name,p.value, value, p.nature)) pcwriter = ParamCardWriter(FR.all_parameters) paramcard_output = '\n'.join(pcwriter.output) ### special treatment # if p.name == 'aS': # expression = '0.25 * sqr(strongCoupling(q2)) / Constants::pi' # elif p.name == 'aEWM1': # expression = '4.0 * Constants::pi / sqr(electroMagneticCoupling(q2))' # elif p.name == 'Gf': # expression = 'generator()->standardModel()->fermiConstant() * GeV2' paramconstructor=': ' for ncount in range(0,len(parmconstr)) : paramconstructor += parmconstr[ncount] if(ncount != len(parmconstr) -1) : paramconstructor += ',' if(ncount%5 == 0 ) : paramconstructor += "\n" paramout="" paramin ="" for ncount in range(0,len(paramsforstream)) : if(ncount !=0 ) : paramout += "<< " + paramsforstream[ncount] paramin += ">> " + paramsforstream[ncount] else : paramout += paramsforstream[ncount] paramin += paramsforstream[ncount] if(ncount%5 == 0 ) : paramout += "\n" paramin += "\n" parmtextsubs = { 'parmgetters' : '\n'.join(parmgetters), 'parmdecls' : '\n'.join(parmdecls), 'parmconstr' : paramconstructor, 'getters' : '', 'decls' : '', 'addVertex' : '', 'doinit' : '\n'.join(doinit), 'ostream' : paramout, 'istream' : paramin , 'refs' : '', 'parmextinter': ''.join(interfaceDecls), 'ModelName': modelname, 'calcfunctions': '', 'param_card_data': paramcard_output } ################################################## ################################################## ################################################## # set up the conversion of the vertices vertexConverter = VertexConverter(FR,parmvalues,couplingDefns) vertexConverter.readArgs(args) # convert the vertices vertexConverter.convert() cdefs="" couplingOrders="" ncount=2 -for name,value in couplingDefns.iteritems() : +for name,value in couplingDefns.items() : if(name=="QED") : couplingOrders+=" setCouplings(\"%s\",make_pair(%s,%s));\n" %(name,1,value) elif (name=="QCD") : couplingOrders+=" setCouplings(\"%s\",make_pair(%s,%s));\n" %(name,2,value) else : ncount+=1 cdefs +=" const T %s = %s;\n" % (name,ncount) couplingOrders+=" setCouplings(\"%s\",make_pair(%s,%s));\n" % (name,ncount,value) # coupling definitions couplingTemplate= """\ namespace ThePEG {{ namespace Helicity {{ namespace CouplingType {{ typedef unsigned T; /** * Enums for couplings */ {coup} }} }} }} """ if(cdefs!="") : cdefs = couplingTemplate.format(coup=cdefs) parmtextsubs['couplings'] = cdefs parmtextsubs['couplingOrders'] = couplingOrders # particles plist, names = thepeg_particles(FR,parmsubs,modelname,modelparameters,args.forbidden_particle_name,args.use_Herwig_Higgs) particlelist = [ "# insert HPConstructor:Outgoing 0 /Herwig/{n}/Particles/{p}".format(n=modelname,p=p) for p in names ] # make the first one active to have something runnable in the example .in file particlelist[0] = particlelist[0][2:] particlelist = '\n'.join(particlelist) modelfilesubs = { 'plist' : plist, 'vlist' : vertexConverter.get_vertices(libname), 'setcouplings': '\n'.join(parmmodelconstr), 'ModelName': modelname } # write the files from templates according to the above subs if vertexConverter.should_print(): MODEL_HWIN = getTemplate('LHC-FR.in') if(not args.split_model) : MODEL_CC = [getTemplate('Model.cc')] else : MODEL_EXTRA_CC=getTemplate('Model6.cc') extra_names=[] extra_calcs=[] parmtextsubs['doinit']="" for i in range(0,len(doinit)) : if( i%20 == 0 ) : function_name = "initCalc" +str(int(i/20)) parmtextsubs['doinit'] += function_name +"();\n" parmtextsubs['calcfunctions'] += "void " + function_name + "();\n" extra_names.append(function_name) extra_calcs.append("") extra_calcs[-1] += doinit[i] + "\n" for i in range(0,len(extra_names)) : ccname = '%s_extra_%s.cc' % (modelname,i) writeFile( ccname, MODEL_EXTRA_CC.substitute({'ModelName' : modelname, 'functionName' : extra_names[i], 'functionCalcs' : extra_calcs[i] }) ) MODEL_CC = [getTemplate('Model1.cc'),getTemplate('Model2.cc'),getTemplate('Model3.cc'), getTemplate('Model4.cc'),getTemplate('Model5.cc')] MODEL_H = getTemplate('Model.h') - print 'LENGTH',len(MODEL_CC) + print ('LENGTH',len(MODEL_CC)) MODELINFILE = getTemplate('FR.model') writeFile( 'LHC-%s.in' % modelname, MODEL_HWIN.substitute({ 'ModelName' : modelname, 'Particles' : particlelist }) ) modeltemplate = Template( MODELINFILE.substitute(modelfilesubs) ) writeFile( '%s.h' % modelname, MODEL_H.substitute(parmtextsubs) ) for i in range(0,len(MODEL_CC)) : if(len(MODEL_CC)==1) : ccname = '%s.cc' % modelname else : ccname = '%s.cc' % (modelname + str(i)) writeFile( ccname, MODEL_CC[i].substitute(parmtextsubs) ) writeFile( modelname +'.template', modeltemplate.template ) writeFile( modelname +'.model', modeltemplate.substitute( modelparameters ) ) # copy the Makefile-FR to current directory, # replace with the modelname for compilation with open(os.path.join(modulepath,'Makefile-FR'),'r') as orig: with open('Makefile','w') as dest: dest.write(orig.read().replace("FeynrulesModel.so", libname)) -print 'finished generating model:\t', modelname -print 'model directory:\t\t', args.ufodir -print 'generated:\t\t\t', len(FR.all_vertices), 'vertices' -print '='*60 -print 'library:\t\t\t', libname -print 'input file:\t\t\t', 'LHC-' + modelname +'.in' -print 'model file:\t\t\t', modelname +'.model' -print '='*60 -print """\ +print('finished generating model:\t', modelname) +print('model directory:\t\t', args.ufodir) +print('generated:\t\t\t', len(FR.all_vertices), 'vertices') +print('='*60) +print('library:\t\t\t', libname) +print('input file:\t\t\t', 'LHC-' + modelname +'.in') +print('model file:\t\t\t', modelname +'.model') +print('='*60) +print("""\ To complete the installation, compile by typing "make". An example input file is provided as LHC-FRModel.in, you'll need to change the required particles in there. -""" -print 'DONE!' -print '='*60 +""") +print('DONE!') +print('='*60) diff --git a/Models/Feynrules/python/ufo2peg/Model.h.template b/Models/Feynrules/python/ufo2peg/Model.h.template --- a/Models/Feynrules/python/ufo2peg/Model.h.template +++ b/Models/Feynrules/python/ufo2peg/Model.h.template @@ -1,150 +1,150 @@ // -*- C++ -*- // // ${ModelName}.h is a part of Herwig - A multi-purpose Monte Carlo event generator // Copyright (C) 2002-2013 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_${ModelName}_H #define HERWIG_${ModelName}_H // This is the declaration of the ${ModelName} class. #include "Herwig/Models/General/BSMModel.h" ${couplings} namespace Herwig { using namespace ThePEG; using ThePEG::Constants::pi; const Complex ii = Complex(0,1); /** \ingroup Models * * This is the Herwig ${ModelName} class which inherits from ThePEG * FeynRules Model class and implements additional FeynRules Model couplings, * access to vertices for helicity amplitude calculations etc. * * @see BSMModel */ class ${ModelName}: public BSMModel { public: /// Default constructor ${ModelName}(); 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); //@} /** * Write out a UFO param_card.dat that matches the configured values */ void writeParamCard() const; /** * Standard Init function used to initialize the interfaces. */ static void Init(); protected: virtual bool registerDefaultVertices() const { return false; } public: /** * Pointers to the objects handling the vertices. */ //@{ ${getters} ${parmgetters} //@} 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: /** * 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. Called in the run phase just before * a run begins. */ virtual void doinitrun(); //@} private: /** * Private and non-existent assignment operator. */ - ${ModelName} & operator=(const ${ModelName} &); + ${ModelName} & operator=(const ${ModelName} &) = delete; private: /** * Helper functions for doinit */ //@{ ${calcfunctions} //@} private: /** * Pointers to the vertices for ${ModelName} Model helicity amplitude * calculations. */ //@{ ${decls} ${parmdecls} //@} }; } namespace ThePEG { ThePEG_DECLARE_POINTERS(Herwig::${ModelName},Hw${ModelName}Ptr); } #endif /* HERWIG_${ModelName}_H */ diff --git a/Models/Feynrules/python/ufo2peg/Vertex_class.template b/Models/Feynrules/python/ufo2peg/Vertex_class.template --- a/Models/Feynrules/python/ufo2peg/Vertex_class.template +++ b/Models/Feynrules/python/ufo2peg/Vertex_class.template @@ -1,42 +1,42 @@ class ${ModelName}${classname}: public ${lorentztag}Vertex { public: ${ModelName}${classname}() { ${header} colourStructure(ColourStructure::${colourStructure}); ${addToPlist} } void setCoupling(Energy2 ${couplingptrs}) { ${symbolrefs} ${prepend} // getParams(q2); ${norm} ${left} ${right} ${append} } void persistentOutput(PersistentOStream & os) const { os << model_; } void persistentInput(PersistentIStream & is, int) { is >> model_; } // static void Init(); protected: IBPtr clone() const { return new_ptr(*this); } IBPtr fullclone() const { return new_ptr(*this); } void doinit() { model_ = dynamic_ptr_cast (generator()->standardModel()); assert(model_); // getParams(q2); ${parameters} ${couplingOrders} ${lorentztag}Vertex::doinit(); } // void getParams(Energy2); private: - ${ModelName}${classname} & operator=(const ${ModelName}${classname} &); + ${ModelName}${classname} & operator=(const ${ModelName}${classname} &) = delete; // Complex leftval, rightval, normval; tcHw${ModelName}Ptr model_; }; DescribeClass<${ModelName}${classname},Helicity::${lorentztag}Vertex> describeHerwig${ModelName}${classname}("Herwig::${ModelName}${classname}", "${ModelName}.so"); // void ${ModelName}${classname}::getParams(Energy2 ) { // } diff --git a/Models/Feynrules/python/ufo2peg/__init__.py b/Models/Feynrules/python/ufo2peg/__init__.py --- a/Models/Feynrules/python/ufo2peg/__init__.py +++ b/Models/Feynrules/python/ufo2peg/__init__.py @@ -1,9 +1,9 @@ from .particles import thepeg_particles - +from .helpers import convertToPython3 from .helpers import CheckUnique, getTemplate, writeFile, def_from_model from .helpers import add_brackets, typemap,isGhost,isGoldstone from .converter import py2cpp from .write_paramcard import ParamCardWriter from .vertices import VertexConverter diff --git a/Models/Feynrules/python/ufo2peg/check_lorentz.py b/Models/Feynrules/python/ufo2peg/check_lorentz.py --- a/Models/Feynrules/python/ufo2peg/check_lorentz.py +++ b/Models/Feynrules/python/ufo2peg/check_lorentz.py @@ -1,869 +1,871 @@ +from __future__ import print_function import itertools,cmath,re from .helpers import SkipThisVertex,extractAntiSymmetricIndices from .converter import py2cpp from .lorentzparser import parse_lorentz import string,re def compare(a,b) : num=abs(a-b) den=abs(a+b) if(den == 0. and 1e-10) : return True return num/den<1e-10 def evaluate(x,model,parmsubs): import cmath return eval(x, {'cmath':cmath, 'complexconjugate':model.function_library.complexconjugate}, parmsubs) # ordering for EW VVV vertices (ordering not an issue as all same spin) def VVVordering(vertex) : pattern = "if((p1->id()==%s&&p2->id()==%s&&p3->id()==%s)"+\ "||(p1->id()==%s&&p2->id()==%s&&p3->id()==%s)||"+\ "(p1->id()==%s&&p2->id()==%s&&p3->id()==%s)) {norm(-norm());}" ordering = pattern%(vertex.particles[1].pdg_code, vertex.particles[0].pdg_code, vertex.particles[2].pdg_code, vertex.particles[0].pdg_code, vertex.particles[2].pdg_code, vertex.particles[1].pdg_code, vertex.particles[2].pdg_code, vertex.particles[1].pdg_code, vertex.particles[0].pdg_code) return ordering def tensorCouplings(vertex,value,prefactors,L,lorentztag,pos,all_couplings,order) : # split the structure into its different terms for analysis ordering="" structures = extractStructures(L) if(lorentztag == 'SST') : terms=[['P(1003,2)','P(2003,1)'], ['P(1003,1)','P(2003,2)'], ['P(-1,1)','P(-1,2)','Metric(1003,2003)'], ['Metric(1003,2003)']] signs=[1.,1.,-1.,-1.] new_couplings=[False]*len(terms) elif(lorentztag == 'FFT' ) : terms=[['P(2003,1)','Gamma(1003,2,1)'], ['P(2003,2)','Gamma(1003,2,1)'], ['P(1003,1)','Gamma(2003,2,1)'], ['P(1003,2)','Gamma(2003,2,1)'], ['P(-1,1)','Gamma(-1,2,1)','Metric(1003,2003)'], ['P(-1,2)','Gamma(-1,2,1)','Metric(1003,2003)'], ['Metric(1003,2003)']] signs=[1.,-1.,1.,-1.,-0.5,0.5,1.] new_couplings=[False]*3*len(terms) elif(lorentztag == 'VVT' ) : terms=[['P(-1,1)','P(-1,2)','Metric(1,2003)','Metric(2,1003)'], # from C term ['P(-1,1)','P(-1,2)','Metric(1,1003)','Metric(2,2003)'], # from C term ['P(-1,1)','P(-1,2)','Metric(1,2)','Metric(1003,2003)'], # from C term ['P(1,2)','P(2,1)','Metric(1003,2003)'], # from D term (sym) ['P(1,2)','P(2003,1)','Metric(2,1003)'], # 1st term ['P(1,2)','P(1003,1)','Metric(2,2003)'], # 1st swap ['P(2,1)','P(2003,2)','Metric(1,1003)'], # 2nd term ['P(2,1)','P(1003,2)','Metric(1,2003)'], # 2nd swap ['P(1003,2)','P(2003,1)','Metric(1,2)'], # 3rd term ['P(1003,1)','P(2003,2)','Metric(1,2)'], # 3rd swap ['Metric(1,2003)','Metric(2,1003)'], # from mass term ['Metric(1,1003)','Metric(2,2003)'], # from mass term ['Metric(1,2)','Metric(1003,2003)'], # from mass term ['P(1,1)','P(2,1)','Metric(1003,2003)'], # gauge terms ['P(1,2)','P(2,2)','Metric(1003,2003)'], # gauge terms ['P(1,1)','P(2,2)','Metric(1003,2003)'], # gauge terms ['P(1003,1)','P(1,1)','Metric(2,2003)'], # gauge terms ['P(1003,2)','P(2,2)','Metric(1,2003)'], # gauge terms ['P(2003,1)','P(1,1)','Metric(2,1003)'], # gauge terms ['P(2003,2)','P(2,2)','Metric(1,1003)'], # gauge terms ] signs=[1.,1.,-1.,1.,-1.,-1.,-1.,-1.,1.,1.,1.,1.,-1.,1.,1.,0.25,-1.,-1.,-1.,-1.] new_couplings=[False]*len(terms) elif(lorentztag == 'FFVT' ) : terms = [['Gamma(2004,2,1)','Metric(3,1004)'], ['Gamma(1004,2,1)','Metric(3,2004)'], ['Gamma(3,2,1)','Metric(1004,2004)'], ['Gamma(2004,2,-1)','Metric(3,1004)'], ['Gamma(1004,2,-1)','Metric(3,2004)'], ['Gamma(3,2,-1)','Metric(1004,2004)']] signs=[1.,1.,-0.5,1.,1.,-0.5] new_couplings=[False]*3*len(terms) elif(lorentztag == 'VVVT' ) : # the F(mu nu,rho sigma lambda) terms first terms = [['P(2004,2)','Metric(1,1004)','Metric(2,3)'],['P(2004,3)','Metric(1,1004)','Metric(2,3)'], ['P(1004,2)','Metric(1,2004)','Metric(2,3)'],['P(1004,3)','Metric(1,2004)','Metric(2,3)'], ['P(2004,3)','Metric(1,3)','Metric(2,1004)'],['P(2004,1)','Metric(1,3)','Metric(2,1004)'], ['P(1004,3)','Metric(1,3)','Metric(2,2004)'],['P(1004,1)','Metric(1,3)','Metric(2,2004)'], ['P(2004,1)','Metric(1,2)','Metric(3,1004)'],['P(2004,2)','Metric(1,2)','Metric(3,1004)'], ['P(1004,1)','Metric(1,2)','Metric(3,2004)'],['P(1004,2)','Metric(1,2)','Metric(3,2004)'], ['P(3,1)','Metric(1,2004)','Metric(2,1004)'],['P(3,2)','Metric(1,2004)','Metric(2,1004)'], ['P(3,1)','Metric(1,1004)','Metric(2,2004)'],['P(3,2)','Metric(1,1004)','Metric(2,2004)'], ['P(3,1)','Metric(1,2)','Metric(1004,2004)'],['P(3,2)','Metric(1,2)','Metric(1004,2004)'], ['P(2,3)','Metric(1,2004)','Metric(3,1004)'],['P(2,1)','Metric(1,2004)','Metric(3,1004)'], ['P(2,3)','Metric(1,1004)','Metric(3,2004)'],['P(2,1)','Metric(1,1004)','Metric(3,2004)'], ['P(2,3)','Metric(1,3)','Metric(1004,2004)'],['P(2,1)','Metric(1,3)','Metric(1004,2004)'], ['P(1,2)','Metric(2,2004)','Metric(3,1004)'],['P(1,3)','Metric(2,2004)','Metric(3,1004)'], ['P(1,2)','Metric(2,1004)','Metric(3,2004)'],['P(1,3)','Metric(2,1004)','Metric(3,2004)'], ['P(1,2)','Metric(2,3)','Metric(1004,2004)'],['P(1,3)','Metric(2,3)','Metric(1004,2004)']] signs = [1.,-1.,1.,-1.,1.,-1.,1.,-1.,1.,-1.,1.,-1., 1.,-1.,1.,-1.,-1.,1.,1.,-1.,1.,-1.,-1.,1.,1.,-1.,1.,-1.,-1.,1.] new_couplings=[False]*len(terms) l = lambda c: len(pos[c]) if l(8)!=3 : ordering = VVVordering(vertex) # unknown else : raise Exception('Unknown data type "%s".' % lorentztag) iterm=0 try : for term in terms: for perm in itertools.permutations(term): label = '*'.join(perm) for istruct in range(0,len(structures)) : if label in structures[istruct] : reminder = structures[istruct].replace(label,'1.',1) loc=iterm if(reminder.find("ProjM")>=0) : reminder=re.sub("\*ProjM\(.*,.\)","",reminder) loc+=len(terms) elif(reminder.find("ProjP")>=0) : reminder=re.sub("\*ProjP\(.*,.\)","",reminder) loc+=2*len(terms) structures[istruct] = "Done" val = eval(reminder, {'cmath':cmath} )*signs[iterm] if(new_couplings[loc]) : new_couplings[loc] += val else : new_couplings[loc] = val iterm+=1 except : SkipThisVertex() # check we've handled all the terms for val in structures: if(val!="Done") : raise SkipThisVertex() # special for FFVT if(lorentztag=="FFVT") : t_couplings=new_couplings new_couplings=[False]*9 for i in range(0,9) : - j = i+3*(i/3) - k = i+3+3*(i/3) + j = i+3*(i//3) + k = i+3+3*(i//3) if( not t_couplings[j]) : new_couplings[i] = t_couplings[k] else : new_couplings[i] = t_couplings[j] # set the couplings for icoup in range(0,len(new_couplings)) : if(new_couplings[icoup]) : new_couplings[icoup] = '(%s) * (%s) *(%s)' % (new_couplings[icoup],prefactors,value) if(len(all_couplings)==0) : all_couplings=new_couplings else : for icoup in range(0,len(new_couplings)) : if(new_couplings[icoup] and all_couplings[icoup]) : all_couplings[icoup] = '(%s) + (%s) ' % (new_couplings[icoup],all_couplings[icoup]) elif(new_couplings[icoup]) : all_couplings[icoup] = new_couplings[icoup] # return the results return (ordering,all_couplings) def processTensorCouplings(lorentztag,vertex,model,parmsubs,all_couplings,order) : # check for fermion vertices (i.e. has L/R couplings) fermions = "FF" in lorentztag # test and process the values of the couplings tval = ["Unknown"]*3 value = ["Unknown"]*3 # loop over the colours for icolor in range(0,len(all_couplings)) : lmax = len(all_couplings[icolor]) - if(fermions) : lmax /=3 + if(fermions) : lmax //=3 # loop over the different terms for ix in range(0,lmax) : test = [False]*3 imax=3 # normal case if( not fermions ) : test[0] = all_couplings[icolor][ix] imax=1 else : # first case vector but no L/R couplings if( not all_couplings[icolor][lmax+ix] and not all_couplings[icolor][2*lmax+ix] ) : test[0] = all_couplings[icolor][ix] imax=1 # special for mass terms and massless particles if(not all_couplings[icolor][ix]) : code = abs(vertex.particles[order[0]-1].pdg_code) if(ix==6 and (code ==12 or code ==14 or code==16) ) : continue else : raise SkipThisVertex() # second case L/R couplings elif( not all_couplings[icolor][ix] ) : # L=R, replace with vector if(all_couplings[icolor][lmax+ix] == all_couplings[icolor][2*lmax+ix]) : test[0] = all_couplings[icolor][lmax+ix] + imax=1 else : test[1] = all_couplings[icolor][lmax+ix] test[2] = all_couplings[icolor][2*lmax+ix] else : raise SkipThisVertex() # special handling of mass terms # scalar divide by m**2 if((ix==3 and lorentztag=="SST") or ( ix>=10 and ix<=12 and lorentztag=="VVT" )) : for i in range(0,len(test)) : if(test[i]) : test[i] = '(%s)/%s**2' % (test[i],vertex.particles[order[0]-1].mass.value) # fermions divide by 4*m elif(ix==6 and lorentztag=="FFT" and float(vertex.particles[order[0]-1].mass.value) != 0. ) : for i in range(0,len(test)) : if(test[i]) : test[i] = '-(%s)/%s/4' % (test[i],vertex.particles[order[0]-1].mass.value) # set values on first pass if((tval[0]=="Unknown" and fermions ) or (not fermions and tval[0]=="Unknown" and tval[1]=="Unknown" and tval[2]=="Unknown")) : value = test for i in range(0,len(test)) : if(test[i]) : tval[i] = evaluate(test[i],model,parmsubs) else : for i in range(0,imax) : if(not test[i] and not tval[i]) : continue # special for vector gauge terms if(lorentztag=="VVT" and ix>=13) : continue if(not test[i] or tval[i]=="Unknown") : # special for mass terms and vectors if(lorentztag=="VVT" and ix >=10 and ix <=12 and float(vertex.particles[order[0]-1].mass.value) == 0. ) : continue raise SkipThisVertex() tval2 = evaluate(test[i],model,parmsubs) if(abs(tval[i]-tval2)>1e-6) : # special for fermion mass term if fermions massless if(lorentztag=="FFT" and ix ==6 and tval2 == 0. and float(vertex.particles[order[0]-1].mass.value) == 0. ) : continue raise SkipThisVertex() # simple clean up for i in range(0,len(value)): if(value[i]) : value[i] = value[i].replace("(1.0) * ","").replace(" * (1)","") # put everything together coup_left = 0. coup_right = 0. coup_norm = 0. if(lorentztag == "SST" or lorentztag == "VVT" or lorentztag == "VVVT" or lorentztag == "FFT" ) : coup_norm = value[0] if(value[1] or value[2]) : raise SkipThisVertex() elif(lorentztag=="FFVT") : if(not value[1] and not value[2]) : coup_norm = value[0] coup_left = "1." coup_right = "1." elif(not value[0]) : coup_norm = "1." if(value[1] and value[2]) : coup_left = value[1] coup_right = value[2] elif(value[1]) : coup_left = value[1] coup_right = "0." elif(value[2]) : coup_left = "0." coup_right = value[2] else : raise SkipThisVertex() else : raise SkipThisVertex() else : raise SkipThisVertex() # return the answer return (coup_left,coup_right,coup_norm) def extractStructures(L) : structure1 = L.structure.replace(")-P",") - P").replace(")+P",") + P") structure1 = structure1.split() structures =[] sign='' for struct in structure1 : if(struct=='+') : continue elif(struct=='-') : sign='-' else : structures.append(sign+struct.strip()) sign='' return structures def changeSign(sign1,sign2) : if((sign1=="+" and sign2=="+") or\ (sign1=="-" and sign2=="-")) : return "+" else : return "-" def epsilonOrder(eps) : terms,sign = extractAntiSymmetricIndices(eps,"Epsilon(") return (sign,"Epsilon(%s,%s,%s,%s)" % (terms[0],terms[1],terms[2],terms[3])) def VVSEpsilon(couplings,struct) : if(struct.find("Epsilon")<0) : return fact="" sign="+" if(struct[-1]==")") : fact=struct.split("(")[0] if(fact.find("Epsilon")>=0) : fact="" else : struct=struct.split("(",1)[1][:-1] if(fact[0]=="-") : sign="-" fact=fact[1:] split = struct.split("*") # find the epsilon eps="" for piece in split : if(piece.find("Epsilon")>=0) : eps=piece split.remove(piece) break # and any prefactors for piece in split : if(piece.find("P(")<0) : split.remove(piece) if(piece[0]=="+" or piece[0]=="-") : sign=changeSign(sign,piece[0]) piece=piece[1:] if(fact=="") : fact=piece else : fact = "( %s ) * ( %s )" % (fact , piece) # now sort out the momenta for piece in split : terms=piece.split(",") terms[0]=terms[0].strip("P(") terms[1]=terms[1].strip(")") eps=eps.replace(terms[0],"P%s"%terms[1]) (nsign,eps)=epsilonOrder(eps) if(nsign>0) : sign=changeSign(sign,"-") if(fact=="") : fact="1." if(eps!="Epsilon(1,2,P1,P2)") : return if(couplings[6]==0.) : couplings[6] = "( %s%s )" % (sign,fact) else : couplings[6] = "( %s ) + ( %s%s )" % (couplings[6],sign,fact) def scalarVectorCouplings(value,prefactors,L,lorentztag,all_couplings,order) : # set up the types of term we are looking for if(lorentztag=="VVS") : couplings=[0.,0.,0.,0.,0.,0.,0.] terms=[['P(-1,%s)' % order[0], 'P(-1,%s)' % order[1], 'Metric(%s,%s)' %(order[0],order[1])], ['P(1,%s)' % order[0], 'P(2,%s)' % order[0]], ['P(1,%s)' % order[0], 'P(2,%s)' % order[1]], ['P(1,%s)' % order[1], 'P(2,%s)' % order[0]], ['P(1,%s)' % order[1], 'P(2,%s)' % order[1]], ['Metric(%s,%s)'%(order[0],order[1])]] elif(lorentztag=="VVSS") : couplings=[0.] terms=[['Metric(%s,%s)' % (order[0],order[1])]] elif(lorentztag=="VSS"): couplings=[0.,0.] terms=[['P(%s,%s)' % (order[0],order[2])], ['P(%s,%s)' % (order[0],order[1])]] # extract the lorentz structures structures = extractStructures(L) # handle the scalar couplings itype=-1 try : for term in terms: itype+=1 for perm in itertools.permutations(term): label = '*'.join(perm) for istruct in range(0,len(structures)) : if label in structures[istruct] : reminder = structures[istruct].replace(label,'1.',1) couplings[itype]+=eval(reminder, {'cmath':cmath} ) structures[istruct]='Done' except : raise SkipThisVertex() # special for VVS and epsilon # handle the pseudoscalar couplings for struct in structures : if(struct != "Done" ) : if(lorentztag=="VVS") : VVSEpsilon(couplings,struct) else : raise SkipThisVertex() # put it all together if(len(all_couplings)==0) : for ic in range(0,len(couplings)) : if(couplings[ic]!=0.) : all_couplings.append('(%s) * (%s) * (%s)' % (prefactors,value,couplings[ic])) else : all_couplings.append(False) else : for ic in range(0,len(couplings)) : if(couplings[ic]!=0. and all_couplings[ic]) : all_couplings[ic] = '(%s) * (%s) * (%s) + (%s) ' % (prefactors,value, couplings[ic],all_couplings[ic]) elif(couplings[ic]!=0) : all_couplings[ic] = '(%s) * (%s) * (%s) ' % (prefactors,value,couplings[ic]) return all_couplings def processScalarVectorCouplings(lorentztag,vertex,model,parmsubs,all_couplings,header,order) : # check the values tval = [False]*len(all_couplings[0]) value =[False]*len(all_couplings[0]) for icolor in range(0,len(all_couplings)) : for ix in range(0,len(all_couplings[icolor])) : if(not value[ix]) : value[ix] = all_couplings[icolor][ix] if(value[ix] and not tval[ix]) : tval[ix] = evaluate(value[ix],model,parmsubs) elif(value[ix]) : tval2 = evaluate(all_couplings[icolor][0],model,parmsubs) if(abs(tval[ix]-tval2)>1e-6) : raise SkipThisVertex() append = "" symbols = set() coup_norm=0. if(lorentztag=="VVS") : if(not value[0] and not value[1] and not value[2] and \ not value[3] and not value[4] and not value[6] and value[5]) : coup_norm=value[5] else : for ix in range(0,len(value)) : if(value[ix]) : value[ix], sym = py2cpp(value[ix]) symbols |= sym else : value[ix]=0. lorentztag = 'GeneralVVS' header="kinematics(true);" # g_mu,nv piece of coupling if(value[5]!=0.) : append +='a00( %s + Complex(( %s )* GeV2/invariant(1,2)));\n' % ( value[0],value[5]) else : append +='a00( %s );\n' % value[0] # other couplings append += 'a11( %s );\n a12( %s );\n a21( %s );\n a22( %s );\n aEp( %s );\n' % \ ( value[1],value[2],value[3],value[4],value[6] ) coup_norm="1." elif(lorentztag=="VVSS") : coup_norm = value[0] elif(lorentztag=="VSS") : if(abs(tval[0]+tval[1])>1e-6) : for ix in range(0,len(value)) : if(value[ix]) : value[ix], sym = py2cpp(value[ix]) symbols |= sym else : value[ix]=0. coup_norm = "1." append = 'if(p2->id()==%s) { a( %s ); b( %s);}\n else { a( %s ); b( %s);}' \ % (vertex.particles[order[1]-1].pdg_code, value[0],value[1],value[1],value[0]) else : coup_norm = value[1] append = 'if(p2->id()!=%s){norm(-norm());}' \ % vertex.particles[order[1]-1].pdg_code # return the answer return (coup_norm,append,lorentztag,header,symbols) def getIndices(term) : if(term[0:2]=="P(") : indices = term.strip(")").strip("P(").split(",") mom = int(indices[1]) index = int(indices[0]) return (True,mom,index) else : return (False,0,0) def lorentzScalar(vertex,L) : dotProduct = """(invariant( i[{i1}], i[{i2}] )/GeV2)""" structures=L.structure.split() output="(" for struct in structures: if(struct=="+" or struct=="-") : output+=struct continue structure = struct.split("*") worked = False mom=-1 newTerm="" while True : term = structure[-1] structure.pop() (momentum,mom,index) = getIndices(term) if( not momentum) : break # look for the matching momenta for term in structure : (momentum,mom2,index2) = getIndices(term) if(index2==index) : structure.remove(term) dot = dotProduct.format(i1=mom-1,i2=mom2-1) if(newTerm=="") : newTerm = dot else : newTerm = " ( %s) * ( %s ) " % (newTerm,dot) if(len(structure)==0) : worked = True break if(not worked) : return False else : output+=newTerm output+=")" return output kinematicsline = """\ long id [3]={{{id1},{id2},{id3}}}; long id2[3]={{p1->id(),p2->id(),p3->id()}}; unsigned int i[3]; for(unsigned int ix=0;ix<3;++ix) {{ for(unsigned int iy=0;iy<3;++iy) {{ if(id[ix]==id2[iy]) {{ i[ix] = iy; id2[iy]=0; break; }} }} }} double hw_kine1 = {kine}; """ kinematicsline2 = """\ long id [4]={{{id1},{id2},{id3},{id4}}}; long id2[4]={{p1->id(),p2->id(),p3->id(),p4->id()}}; unsigned int i[4]; for(unsigned int ix=0;ix<4;++ix) {{ for(unsigned int iy=0;iy<4;++iy) {{ if(id[ix]==id2[iy]) {{ i[ix] = iy; id2[iy]=0; break; }} }} }} double hw_kine1 = {kine}; """ kinematicsline3 ="""\ double hw_kine{i} = {kine}; """ def scalarCouplings(vertex,value,prefactors,L,lorentztag, all_couplings,prepend,header) : try : val = int(L.structure) except : output = lorentzScalar(vertex,L) if( not output ) : raise SkipThisVertex() else : if(prepend=="") : if(lorentztag=="SSS") : # order doesn't matter here, all same spin prepend = kinematicsline.format(id1=vertex.particles[0].pdg_code, id2=vertex.particles[1].pdg_code, id3=vertex.particles[2].pdg_code, kine=output) else : # order doesn't matter here, all same spin prepend = kinematicsline2.format(id1=vertex.particles[0].pdg_code, id2=vertex.particles[1].pdg_code, id3=vertex.particles[2].pdg_code, id4=vertex.particles[3].pdg_code, kine=output) value = "(%s) *(hw_kine1)" % value else : osplit=prepend.split("\n") i=-1 while osplit[i]=="": i=i-1 ikin=int(osplit[i].split("=")[0].replace("double hw_kine",""))+1 prepend +=kinematicsline3.format(kine=output,i=ikin) value = "(%s) *(hw_kine%s)" % (value,ikin) header="kinematics(true);" if(len(all_couplings)==0) : all_couplings.append('(%s) * (%s)' % (prefactors,value)) else : all_couplings[0] = '(%s) * (%s) + (%s)' % (prefactors,value,all_couplings[0]) return (prepend, header,all_couplings) def processScalarCouplings(model,parmsubs,all_couplings) : tval = False value = False for icolor in range(0,len(all_couplings)) : if(len(all_couplings[icolor])!=1) : raise SkipThisVertex() if(not value) : value = all_couplings[icolor][0] m = re.findall('hw_kine[0-9]*', all_couplings[icolor][0]) if m: for kine in m: # bizarre number for checks, must be a better option parmsubs[kine] = 987654321. if(not tval) : tval = evaluate(value,model,parmsubs) else : tval2 = evaluate(all_couplings[icolor][0],model,parmsubs) if(abs(tval[i]-tval2)>1e-6) : raise SkipThisVertex() # cleanup and return the answer return value.replace("(1.0) * ","").replace(" * (1)","") def vectorCouplings(vertex,value,prefactors,L,lorentztag,pos, all_couplings,append,qcd,order) : structures=extractStructures(L) terms=[] signs=[] if(lorentztag=="VVV") : terms=[['P(%s,%s)' % (order[2],order[0]),'Metric(%s,%s)' % (order[0],order[1])], ['P(%s,%s)' % (order[2],order[1]),'Metric(%s,%s)' % (order[0],order[1])], ['P(%s,%s)' % (order[1],order[0]),'Metric(%s,%s)' % (order[0],order[2])], ['P(%s,%s)' % (order[1],order[2]),'Metric(%s,%s)' % (order[0],order[2])], ['P(%s,%s)' % (order[0],order[1]),'Metric(%s,%s)' % (order[1],order[2])], ['P(%s,%s)' % (order[0],order[2]),'Metric(%s,%s)' % (order[1],order[2])]] signs=[1.,-1.,-1.,1.,1.,-1.] elif(lorentztag=="VVVV") : terms=[['Metric(%s,%s)' % (order[0],order[3]),'Metric(%s,%s)' % (order[1],order[2])], ['Metric(%s,%s)' % (order[0],order[2]),'Metric(%s,%s)' % (order[1],order[3])], ['Metric(%s,%s)' % (order[0],order[1]),'Metric(%s,%s)' % (order[2],order[3])]] signs=[1.,1.,1.] elif(lorentztag=="VVVS") : terms=[['P(%s,%s)' % (order[2],order[0]),'Metric(%s,%s)' % (order[0],order[1])], ['P(%s,%s)' % (order[2],order[1]),'Metric(%s,%s)' % (order[0],order[1])], ['P(%s,%s)' % (order[1],order[0]),'Metric(%s,%s)' % (order[0],order[2])], ['P(%s,%s)' % (order[1],order[2]),'Metric(%s,%s)' % (order[0],order[2])], ['P(%s,%s)' % (order[0],order[1]),'Metric(%s,%s)' % (order[1],order[2])], ['P(%s,%s)' % (order[0],order[2]),'Metric(%s,%s)' % (order[1],order[2])], ['Epsilon(1,2,3,-1)','P(-1,1)'],['Epsilon(1,2,3,-1)','P(-1,2)'], ['Epsilon(1,2,3,-1)','P(-1,3)']] signs=[1.,-1.,-1.,1.,1.,-1.,1.,1.,1.] # extract the couplings new_couplings = [False]*len(terms) iterm=0 try : for term in terms: for perm in itertools.permutations(term): label = '*'.join(perm) for istruct in range(0,len(structures)) : if label in structures[istruct] : reminder = structures[istruct].replace(label,'1.',1) structures[istruct] = "Done" val = eval(reminder, {'cmath':cmath} )*signs[iterm] if(new_couplings[iterm]) : new_couplings[iterm] += val else : new_couplings[iterm] = val iterm += 1 except : raise SkipThisVertex() # check we've handled all the terms for val in structures: if(val!="Done") : raise SkipThisVertex() # set the couplings for icoup in range(0,len(new_couplings)) : if(new_couplings[icoup]) : new_couplings[icoup] = '(%s) * (%s) *(%s)' % (new_couplings[icoup],prefactors,value) if(len(all_couplings)==0) : all_couplings=new_couplings else : for icoup in range(0,len(new_couplings)) : if(new_couplings[icoup] and all_couplings[icoup]) : all_couplings[icoup] = '(%s) * (%s) *(%s) + (%s) ' % (new_couplings[icoup],prefactors,value,all_couplings[icoup]) elif(new_couplings[icoup]) : all_couplings[icoup] = new_couplings[icoup] # ordering for VVV type vertices if(len(pos[8]) != 3 and (lorentztag=="VVV" or lorentztag=="VVVS")) : append = VVVordering(vertex) return all_couplings,append def processVectorCouplings(lorentztag,vertex,model,parmsubs,all_couplings,append,header) : value = False tval = False if(lorentztag=="VVV") : for icolor in range(0,len(all_couplings)) : # loop over the different terms for ix in range(0,len(all_couplings[icolor])) : if(not value) : value = all_couplings[icolor][ix] tval = evaluate(value,model,parmsubs) else : tval2 = evaluate(all_couplings[icolor][ix],model,parmsubs) if(abs(tval-tval2)>1e-6) : raise SkipThisVertex() elif(lorentztag=="VVVV") : order=[] colours = vertex.color if(len(colours)==1) : tval=[] for i in range(0,3) : tval.append(evaluate(all_couplings[0][i],model,parmsubs)) if(compare(tval[2],-2.*tval[1]) and compare(tval[2],-2.*tval[0]) ) : order=[0,1,2,3] value = "0.5*(%s)" % all_couplings[0][2] elif(compare(tval[1],-2.*tval[2]) and compare(tval[1],-2.*tval[0]) ) : order=[0,2,1,3] value = "0.5*(%s)" % all_couplings[0][1] elif(compare(tval[0],-2.*tval[2]) and compare(tval[0],-2.*tval[1]) ) : order=[0,3,1,2] value = "0.5*(%s)" % all_couplings[0][0] else: raise SkipThisVertex() pattern = \ "bool done[4]={false,false,false,false};\n" + \ " tcPDPtr part[4]={p1,p2,p3,p4};\n" + \ " unsigned int iorder[4]={0,0,0,0};\n" + \ " for(unsigned int ix=0;ix<4;++ix) {\n" + \ " if(!done[0] && part[ix]->id()==%s) {done[0]=true; iorder[%s] = ix; continue;}\n" + \ " if(!done[1] && part[ix]->id()==%s) {done[1]=true; iorder[%s] = ix; continue;}\n" + \ " if(!done[2] && part[ix]->id()==%s) {done[2]=true; iorder[%s] = ix; continue;}\n" + \ " if(!done[3] && part[ix]->id()==%s) {done[3]=true; iorder[%s] = ix; continue;}\n" + \ " }\n" + \ " setType(2);\n" + \ " setOrder(iorder[0],iorder[1],iorder[2],iorder[3]);" # order doesn't matter here same spin append = pattern % ( vertex.particles[0].pdg_code,order[0], vertex.particles[1].pdg_code,order[1], vertex.particles[2].pdg_code,order[2], vertex.particles[3].pdg_code,order[3] ) else : for icolor in range(0,len(all_couplings)) : col=colours[icolor].split("*") if(len(col)==2 and "f(" in col[0] and "f(" in col[1]) : sign = 1 for i in range(0,2) : col[i],stemp = extractAntiSymmetricIndices(col[i],"f(") for ix in range(0,len(col[i])): col[i][ix]=int(col[i][ix]) sign *=stemp if(col[0][0]>col[1][0]) : col[0],col[1] = col[1],col[0] # first flow if(col[0][0]==1 and col[0][1]==2 and col[1][0] ==3 and col[1][1] == 4) : if(all_couplings[icolor][2] or not all_couplings[icolor][0] or not all_couplings[icolor][1]) : raise SkipThisVertex() if(not value) : value = all_couplings[icolor][1] tval = evaluate(value,model,parmsubs) tval2 = -evaluate(all_couplings[icolor][0],model,parmsubs) tval3 = evaluate(all_couplings[icolor][1],model,parmsubs) elif(col[0][0]==1 and col[0][1]==3 and col[1][0] ==2 and col[1][1] == 4) : if(all_couplings[icolor][1] or not all_couplings[icolor][0] or not all_couplings[icolor][2]) : raise SkipThisVertex() if(not value) : value = all_couplings[icolor][2] tval = evaluate(value,model,parmsubs) tval2 = -evaluate(all_couplings[icolor][0],model,parmsubs) tval3 = evaluate(all_couplings[icolor][2],model,parmsubs) elif(col[0][0]==1 and col[0][1]==4 and col[1][0] ==2 and col[1][1] == 3) : if(all_couplings[icolor][0] or not all_couplings[icolor][1] or not all_couplings[icolor][2]) : raise SkipThisVertex() if(not value) : value = all_couplings[icolor][2] tval = evaluate(value,model,parmsubs) tval2 = -evaluate(all_couplings[icolor][1],model,parmsubs) tval3 = evaluate(all_couplings[icolor][2],model,parmsubs) else : raise SkipThisVertex() if(abs(tval-tval2)>1e-6 or abs(tval-tval3)>1e-6 ) : raise SkipThisVertex() append = 'setType(1);\nsetOrder(0,1,2,3);' else : - print 'unknown colour structure for VVVV vertex' + print('unknown colour structure for VVVV vertex') raise SkipThisVertex() elif(lorentztag=="VVVS") : try : # two distinct cases 0-5 = , 6-8= if(all_couplings[0][0]) : imin=0 imax=6 header="scalar(true);" else : imin=6 imax=9 header="scalar(false);" for icolor in range(0,len(all_couplings)) : # loop over the different terms for ix in range(imin,imax) : if(not value) : value = all_couplings[icolor][ix] tval = evaluate(value,model,parmsubs) else : tval2 = evaluate(value,model,parmsubs) if(abs(tval-tval2)>1e-6) : raise SkipThisVertex() except : SkipThisVertex() # cleanup and return the answer value = value.replace("(1.0) * ","").replace(" * (1)","") return (value,append,header) def fermionCouplings(value,prefactors,L,all_couplings,order) : new_couplings=[False,False] try : new_couplings[0],new_couplings[1] = parse_lorentz(L.structure) except : raise SkipThisVertex() for i in range(0,2) : if new_couplings[i]: new_couplings[i] = '(%s) * (%s) * (%s)' % (prefactors,new_couplings[i],value) if(len(all_couplings)==0) : all_couplings=new_couplings else : for i in range(0,len(new_couplings)) : if(new_couplings[i] and all_couplings[i]) : all_couplings[i] = '(%s) + (%s) ' % (new_couplings[i],all_couplings[i]) elif(new_couplings[i]) : all_couplings[i] = new_couplings[i] return all_couplings def processFermionCouplings(lorentztag,vertex,model,parmsubs,all_couplings,order) : leftcontent = all_couplings[0][0] if all_couplings[0][0] else "0." rightcontent = all_couplings[0][1] if all_couplings[0][1] else "0." tval=[evaluate( leftcontent,model,parmsubs), evaluate(rightcontent,model,parmsubs)] for icolor in range(0,len(all_couplings)) : # loop over the different terms for ix in range(0,len(all_couplings[icolor])) : tval2 = evaluate(all_couplings[icolor][ix],model,parmsubs) if all_couplings[icolor][ix] else 0. if(abs(tval[ix]-tval2)>1e-6) : raise SkipThisVertex() normcontent = "1." append="" if lorentztag == 'FFV': append = ('if(p1->id()!=%s) {Complex ltemp=left(), rtemp=right(); left(-rtemp); right(-ltemp);}' % vertex.particles[order[0]-1].pdg_code) return normcontent,leftcontent,rightcontent,append def RSCouplings(value,prefactors,L,all_couplings,order) : raise SkipThisVertex() diff --git a/Models/Feynrules/python/ufo2peg/collapse_vertices.py b/Models/Feynrules/python/ufo2peg/collapse_vertices.py --- a/Models/Feynrules/python/ufo2peg/collapse_vertices.py +++ b/Models/Feynrules/python/ufo2peg/collapse_vertices.py @@ -1,29 +1,29 @@ class CollapsedVertex(object): def __init__(self,v): self.name = v.name[2:] self.particles_list = [v.particles] self.color = tuple(v.color) self.lorentz = tuple(v.lorentz) - self.couplings = tuple(v.couplings.iteritems()) + self.couplings = tuple(v.couplings.items()) def __hash__(self): return hash((self.color, self.lorentz, self.couplings)) def __eq__(self,other): return ( (self.color, self.lorentz, self.couplings) == (other.color, other.lorentz, other.couplings) ) def collapse_vertices(vs): """Collect particle lists with common structure from the Feynrules vertices.""" vertices = {} for v in vs: cv = CollapsedVertex(v) if cv in vertices: vertices[cv].particles_list += cv.particles_list vertices[cv].name += '_%s' % cv.name else: vertices[cv] = cv return vertices.keys() diff --git a/Models/Feynrules/python/ufo2peg/general_lorentz.py b/Models/Feynrules/python/ufo2peg/general_lorentz.py --- a/Models/Feynrules/python/ufo2peg/general_lorentz.py +++ b/Models/Feynrules/python/ufo2peg/general_lorentz.py @@ -1,3029 +1,3030 @@ +from __future__ import print_function import copy from .helpers import SkipThisVertex,def_from_model from .converter import py2cpp import string,re from string import Template epsValue=[[[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]], [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]], [[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]], [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]], [[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]], [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]], [[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]], [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]]] epsValue[0][1][2][3] = -1. epsValue[0][1][3][2] = 1. epsValue[0][2][1][3] = 1. epsValue[0][2][3][1] = -1. epsValue[0][3][1][2] = -1. epsValue[0][3][2][1] = 1. epsValue[1][0][2][3] = 1. epsValue[1][0][3][2] = -1. epsValue[1][2][0][3] = -1. epsValue[1][2][3][0] = 1. epsValue[1][3][0][2] = 1. epsValue[1][3][2][0] = -1. epsValue[2][0][1][3] = -1. epsValue[2][0][3][1] = 1. epsValue[2][1][0][3] = 1. epsValue[2][1][3][0] = -1. epsValue[2][3][0][1] = -1. epsValue[2][3][1][0] = 1. epsValue[3][0][1][2] = 1. epsValue[3][0][2][1] = -1. epsValue[3][1][0][2] = -1. epsValue[3][1][2][0] = 1. epsValue[3][2][0][1] = 1. epsValue[3][2][1][0] = -1. # self contracted tensor propagator tPropA=[[],[],[],[]] tPropA[0].append(Template("-2. / 3. * (M${iloc}2 + 2 * P${iloc}t ** 2) * (M${iloc}2 -p2)*OM${iloc}**2")) tPropA[0].append(Template("-4. / 3. * P${iloc}t * P${iloc}x * (M${iloc}2 -p2)*OM${iloc}**2")) tPropA[0].append(Template("-4. / 3. * P${iloc}t * P${iloc}y * (M${iloc}2 -p2)*OM${iloc}**2")) tPropA[0].append(Template("-4. / 3. * P${iloc}t * P${iloc}z * (M${iloc}2 -p2)*OM${iloc}**2")) tPropA[1].append(Template("-4. / 3. * P${iloc}t * P${iloc}x * (M${iloc}2 -p2)*OM${iloc}**2")) tPropA[1].append(Template(" 2. / 3. * (M${iloc}2 - 2 * P${iloc}x ** 2) * (M${iloc}2 -p2)*OM${iloc}**2")) tPropA[1].append(Template("-4. / 3. * P${iloc}x * P${iloc}y * (M${iloc}2 -p2)*OM${iloc}**2")) tPropA[1].append(Template("-4. / 3. * P${iloc}x * P${iloc}z * (M${iloc}2 -p2)*OM${iloc}**2")) tPropA[2].append(Template("-4. / 3. * P${iloc}t * P${iloc}y * (M${iloc}2 -p2)*OM${iloc}**2")) tPropA[2].append(Template("-4. / 3. * P${iloc}x * P${iloc}y * (M${iloc}2 -p2)*OM${iloc}**2")) tPropA[2].append(Template(" 2. / 3. * (M${iloc}2 - 2 * P${iloc}y ** 2) * (M${iloc}2 -p2)*OM${iloc}**2")) tPropA[2].append(Template("-4. / 3. * P${iloc}y * P${iloc}z * (M${iloc}2 -p2)*OM${iloc}**2")) tPropA[3].append(Template("-4. / 3. * P${iloc}t * P${iloc}z * (M${iloc}2 -p2)*OM${iloc}**2")) tPropA[3].append(Template("-4. / 3. * P${iloc}x * P${iloc}z * (M${iloc}2 -p2)*OM${iloc}**2")) tPropA[3].append(Template("-4. / 3. * P${iloc}y * P${iloc}z * (M${iloc}2 -p2)*OM${iloc}**2")) tPropA[3].append(Template(" 2. / 3. * (M${iloc}2 - 2 * P${iloc}z ** 2) * (M${iloc}2 -p2)*OM${iloc}**2")) # tensor propagator 1 index contracted tPropB=[[[],[],[],[]],[[],[],[],[]],[[],[],[],[]],[[],[],[],[]]] tPropB[0][0].append(Template("4. / 3. * (${V}t - ${dot}*OM${iloc} * P${iloc}t) * (1. - OM${iloc} * P${iloc}t ** 2)")) tPropB[0][0].append(Template("-2 * (${V}t - ${dot}*OM${iloc} * P${iloc}t)*OM${iloc} * P${iloc}t * P${iloc}x - 2. / 3. * (1. - OM${iloc} * P${iloc}t ** 2) * (${V}x - ${dot}*OM${iloc} * P${iloc}x)")) tPropB[0][0].append(Template(" -2 * (${V}t - ${dot}*OM${iloc} * P${iloc}t)*OM${iloc} * P${iloc}t * P${iloc}y - 2. / 3. * (1. - OM${iloc} * P${iloc}t ** 2) * (${V}y - ${dot}*OM${iloc} * P${iloc}y)")) tPropB[0][0].append(Template(" -2 * (${V}t - ${dot}*OM${iloc} * P${iloc}t)*OM${iloc} * P${iloc}t * P${iloc}z - 2. / 3. * (1. - OM${iloc} * P${iloc}t ** 2) * (${V}z - ${dot}*OM${iloc} * P${iloc}z)")) tPropB[0][1].append(Template(" -(${V}t - ${dot}*OM${iloc} * P${iloc}t)*OM${iloc} * P${iloc}t * P${iloc}x / 3. + (1. - OM${iloc} * P${iloc}t ** 2) * (${V}x - ${dot}*OM${iloc} * P${iloc}x)")) tPropB[0][1].append(Template(" (${V}t - ${dot}*OM${iloc} * P${iloc}t) * (-1. - OM${iloc} * P${iloc}x ** 2) - OM${iloc} * P${iloc}t * P${iloc}x * (${V}x - ${dot}*OM${iloc} * P${iloc}x) / 3.")) tPropB[0][1].append(Template("-(${V}t - ${dot}*OM${iloc} * P${iloc}t)*OM${iloc} * P${iloc}x * P${iloc}y - OM${iloc} * P${iloc}t * P${iloc}y * (${V}x - ${dot}*OM${iloc} * P${iloc}x) + 2. / 3.*OM${iloc} * P${iloc}t * P${iloc}x * (${V}y - ${dot}*OM${iloc} * P${iloc}y)")) tPropB[0][1].append(Template("-(${V}t - ${dot}*OM${iloc} * P${iloc}t)*OM${iloc} * P${iloc}x * P${iloc}z - OM${iloc} * P${iloc}t * P${iloc}z * (${V}x - ${dot}*OM${iloc} * P${iloc}x) + 2. / 3.*OM${iloc} * P${iloc}t * P${iloc}x * (${V}z - ${dot}*OM${iloc} * P${iloc}z)")) tPropB[0][2].append(Template(" -(${V}t - ${dot}*OM${iloc} * P${iloc}t)*OM${iloc} * P${iloc}t * P${iloc}y / 3. + (1. - OM${iloc} * P${iloc}t ** 2) * (${V}y - ${dot}*OM${iloc} * P${iloc}y)")) tPropB[0][2].append(Template("-(${V}t - ${dot}*OM${iloc} * P${iloc}t)*OM${iloc} * P${iloc}x * P${iloc}y - OM${iloc} * P${iloc}t * P${iloc}x * (${V}y - ${dot}*OM${iloc} * P${iloc}y) + 2. / 3.*OM${iloc} * P${iloc}t * P${iloc}y * (${V}x - ${dot}*OM${iloc} * P${iloc}x)")) tPropB[0][2].append(Template(" (${V}t - ${dot}*OM${iloc} * P${iloc}t) * (-1. - OM${iloc} * P${iloc}y ** 2) - OM${iloc} * P${iloc}t * P${iloc}y * (${V}y - ${dot}*OM${iloc} * P${iloc}y) / 3.")) tPropB[0][2].append(Template("-(${V}t - ${dot}*OM${iloc} * P${iloc}t)*OM${iloc} * P${iloc}y * P${iloc}z - OM${iloc} * P${iloc}t * P${iloc}z * (${V}y - ${dot}*OM${iloc} * P${iloc}y) + 2. / 3.*OM${iloc} * P${iloc}t * P${iloc}y * (${V}z - ${dot}*OM${iloc} * P${iloc}z)")) tPropB[0][3].append(Template(" -(${V}t - ${dot}*OM${iloc} * P${iloc}t)*OM${iloc} * P${iloc}t * P${iloc}z / 3. + (1. - OM${iloc} * P${iloc}t ** 2) * (${V}z - ${dot}*OM${iloc} * P${iloc}z)")) tPropB[0][3].append(Template("-(${V}t - ${dot}*OM${iloc} * P${iloc}t)*OM${iloc} * P${iloc}x * P${iloc}z - OM${iloc} * P${iloc}t * P${iloc}x * (${V}z - ${dot}*OM${iloc} * P${iloc}z) + 2. / 3.*OM${iloc} * P${iloc}t * P${iloc}z * (${V}x - ${dot}*OM${iloc} * P${iloc}x)")) tPropB[0][3].append(Template(" -(${V}t - ${dot}*OM${iloc} * P${iloc}t)*OM${iloc} * P${iloc}y * P${iloc}z - OM${iloc} * P${iloc}t * P${iloc}y * (${V}z - ${dot}*OM${iloc} * P${iloc}z) + 2. / 3.*OM${iloc} * P${iloc}t * P${iloc}z * (${V}y - ${dot}*OM${iloc} * P${iloc}y)")) tPropB[0][3].append(Template("(${V}t - ${dot}*OM${iloc} * P${iloc}t) * (-1. - OM${iloc} * P${iloc}z ** 2) - OM${iloc} * P${iloc}t * P${iloc}z * (${V}z - ${dot}*OM${iloc} * P${iloc}z) / 3.")) tPropB[1][0].append(Template("-(${V}t - ${dot}*OM${iloc} * P${iloc}t)*OM${iloc} * P${iloc}t * P${iloc}x / 3. + (1 - OM${iloc} * P${iloc}t ** 2) * (${V}x - ${dot}*OM${iloc} * P${iloc}x)")) tPropB[1][0].append(Template(" (${V}t - ${dot}*OM${iloc} * P${iloc}t) * (-1 - OM${iloc} * P${iloc}x ** 2) - OM${iloc} * P${iloc}t * P${iloc}x * (${V}x - ${dot}*OM${iloc} * P${iloc}x) / 3.")) tPropB[1][0].append(Template(" -(${V}t - ${dot}*OM${iloc} * P${iloc}t)*OM${iloc} * P${iloc}x * P${iloc}y - OM${iloc} * P${iloc}t * P${iloc}y * (${V}x - ${dot}*OM${iloc} * P${iloc}x) + 2. / 3.*OM${iloc} * P${iloc}t * P${iloc}x * (${V}y - ${dot}*OM${iloc} * P${iloc}y)")) tPropB[1][0].append(Template(" -(${V}t - ${dot}*OM${iloc} * P${iloc}t)*OM${iloc} * P${iloc}x * P${iloc}z - OM${iloc} * P${iloc}t * P${iloc}z * (${V}x - ${dot}*OM${iloc} * P${iloc}x) + 2. / 3.*OM${iloc} * P${iloc}t * P${iloc}x * (${V}z - ${dot}*OM${iloc} * P${iloc}z)")) tPropB[1][1].append(Template(" -2*OM${iloc} * P${iloc}t * P${iloc}x * (${V}x - ${dot}*OM${iloc} * P${iloc}x) - 2. / 3. * (${V}t - ${dot}*OM${iloc} * P${iloc}t) * (-1 - OM${iloc} * P${iloc}x ** 2)")) tPropB[1][1].append(Template(" 4. / 3. * (${V}x - ${dot}*OM${iloc} * P${iloc}x) * (-1 - OM${iloc} * P${iloc}x ** 2)")) tPropB[1][1].append(Template(" -2 * (${V}x - ${dot}*OM${iloc} * P${iloc}x)*OM${iloc} * P${iloc}x * P${iloc}y - 2. / 3. * (-1 - OM${iloc} * P${iloc}x ** 2) * (${V}y - ${dot}*OM${iloc} * P${iloc}y)")) tPropB[1][1].append(Template(" -2 * (${V}x - ${dot}*OM${iloc} * P${iloc}x)*OM${iloc} * P${iloc}x * P${iloc}z - 2. / 3. * (-1 - OM${iloc} * P${iloc}x ** 2) * (${V}z - ${dot}*OM${iloc} * P${iloc}z)")) tPropB[1][2].append(Template(" -OM${iloc} * P${iloc}t * P${iloc}y * (${V}x - ${dot}*OM${iloc} * P${iloc}x) - OM${iloc} * P${iloc}t * P${iloc}x * (${V}y - ${dot}*OM${iloc} * P${iloc}y) + 2. / 3. * (${V}t - ${dot}*OM${iloc} * P${iloc}t)*OM${iloc} * P${iloc}x * P${iloc}y")) tPropB[1][2].append(Template(" -(${V}x - ${dot}*OM${iloc} * P${iloc}x)*OM${iloc} * P${iloc}x * P${iloc}y / 3. + (-1 - OM${iloc} * P${iloc}x ** 2) * (${V}y - ${dot}*OM${iloc} * P${iloc}y)")) tPropB[1][2].append(Template(" (${V}x - ${dot}*OM${iloc} * P${iloc}x) * (-1 - OM${iloc} * P${iloc}y ** 2) - OM${iloc} * P${iloc}x * P${iloc}y * (${V}y - ${dot}*OM${iloc} * P${iloc}y) / 3.")) tPropB[1][2].append(Template("-(${V}x - ${dot}*OM${iloc} * P${iloc}x)*OM${iloc} * P${iloc}y * P${iloc}z - OM${iloc} * P${iloc}x * P${iloc}z * (${V}y - ${dot}*OM${iloc} * P${iloc}y) + 2. / 3.*OM${iloc} * P${iloc}x * P${iloc}y * (${V}z - ${dot}*OM${iloc} * P${iloc}z)")) tPropB[1][3].append(Template("-OM${iloc} * P${iloc}t * P${iloc}z * (${V}x - ${dot}*OM${iloc} * P${iloc}x) - OM${iloc} * P${iloc}t * P${iloc}x * (${V}z - ${dot}*OM${iloc} * P${iloc}z) + 2. / 3. * (${V}t - ${dot}*OM${iloc} * P${iloc}t)*OM${iloc} * P${iloc}x * P${iloc}z")) tPropB[1][3].append(Template(" -(${V}x - ${dot}*OM${iloc} * P${iloc}x)*OM${iloc} * P${iloc}x * P${iloc}z / 3. + (-1 - OM${iloc} * P${iloc}x ** 2) * (${V}z - ${dot}*OM${iloc} * P${iloc}z)")) tPropB[1][3].append(Template(" -(${V}x - ${dot}*OM${iloc} * P${iloc}x)*OM${iloc} * P${iloc}y * P${iloc}z - OM${iloc} * P${iloc}x * P${iloc}y * (${V}z - ${dot}*OM${iloc} * P${iloc}z) + 2. / 3.*OM${iloc} * P${iloc}x * P${iloc}z * (${V}y - ${dot}*OM${iloc} * P${iloc}y)")) tPropB[1][3].append(Template("(${V}x - ${dot}*OM${iloc} * P${iloc}x) * (-1 - OM${iloc} * P${iloc}z ** 2) - OM${iloc} * P${iloc}x * P${iloc}z * (${V}z - ${dot}*OM${iloc} * P${iloc}z) / 3.")) tPropB[2][0].append(Template(" -(${V}t - ${dot}*OM${iloc} * P${iloc}t)*OM${iloc} * P${iloc}t * P${iloc}y / 3. + (1 - OM${iloc} * P${iloc}t ** 2) * (${V}y - ${dot}*OM${iloc} * P${iloc}y)")) tPropB[2][0].append(Template(" -(${V}t - ${dot}*OM${iloc} * P${iloc}t)*OM${iloc} * P${iloc}x * P${iloc}y - OM${iloc} * P${iloc}t * P${iloc}x * (${V}y - ${dot}*OM${iloc} * P${iloc}y) + 2. / 3.*OM${iloc} * P${iloc}t * P${iloc}y * (${V}x - ${dot}*OM${iloc} * P${iloc}x)")) tPropB[2][0].append(Template(" (${V}t - ${dot}*OM${iloc} * P${iloc}t) * (-1 - OM${iloc} * P${iloc}y ** 2) - OM${iloc} * P${iloc}t * P${iloc}y * (${V}y - ${dot}*OM${iloc} * P${iloc}y) / 3.")) tPropB[2][0].append(Template(" -(${V}t - ${dot}*OM${iloc} * P${iloc}t)*OM${iloc} * P${iloc}y * P${iloc}z - OM${iloc} * P${iloc}t * P${iloc}z * (${V}y - ${dot}*OM${iloc} * P${iloc}y) + 2. / 3.*OM${iloc} * P${iloc}t * P${iloc}y * (${V}z - ${dot}*OM${iloc} * P${iloc}z)")) tPropB[2][1].append(Template("-OM${iloc} * P${iloc}t * P${iloc}y * (${V}x - ${dot}*OM${iloc} * P${iloc}x) - OM${iloc} * P${iloc}t * P${iloc}x * (${V}y - ${dot}*OM${iloc} * P${iloc}y) + 2. / 3. * (${V}t - ${dot}*OM${iloc} * P${iloc}t)*OM${iloc} * P${iloc}x * P${iloc}y")) tPropB[2][1].append(Template("-(${V}x - ${dot}*OM${iloc} * P${iloc}x)*OM${iloc} * P${iloc}x * P${iloc}y / 3. + (-1 - OM${iloc} * P${iloc}x ** 2) * (${V}y - ${dot}*OM${iloc} * P${iloc}y)")) tPropB[2][1].append(Template(" (${V}x - ${dot}*OM${iloc} * P${iloc}x) * (-1 - OM${iloc} * P${iloc}y ** 2) - OM${iloc} * P${iloc}x * P${iloc}y * (${V}y - ${dot}*OM${iloc} * P${iloc}y) / 3.")) tPropB[2][1].append(Template("-(${V}x - ${dot}*OM${iloc} * P${iloc}x)*OM${iloc} * P${iloc}y * P${iloc}z - OM${iloc} * P${iloc}x * P${iloc}z * (${V}y - ${dot}*OM${iloc} * P${iloc}y) + 2. / 3.*OM${iloc} * P${iloc}x * P${iloc}y * (${V}z - ${dot}*OM${iloc} * P${iloc}z)")) tPropB[2][2].append(Template(" -2*OM${iloc} * P${iloc}t * P${iloc}y * (${V}y - ${dot}*OM${iloc} * P${iloc}y) - 2. / 3. * (${V}t - ${dot}*OM${iloc} * P${iloc}t) * (-1 - OM${iloc} * P${iloc}y ** 2)")) tPropB[2][2].append(Template(" -2*OM${iloc} * P${iloc}x * P${iloc}y * (${V}y - ${dot}*OM${iloc} * P${iloc}y) - 2. / 3. * (${V}x - ${dot}*OM${iloc} * P${iloc}x) * (-1 - OM${iloc} * P${iloc}y ** 2)")) tPropB[2][2].append(Template("4. / 3. * (${V}y - ${dot}*OM${iloc} * P${iloc}y) * (-1 - OM${iloc} * P${iloc}y ** 2)")) tPropB[2][2].append(Template(" -2 * (${V}y - ${dot}*OM${iloc} * P${iloc}y)*OM${iloc} * P${iloc}y * P${iloc}z - 2. / 3. * (-1 - OM${iloc} * P${iloc}y ** 2) * (${V}z - ${dot}*OM${iloc} * P${iloc}z)")) tPropB[2][3].append(Template(" -OM${iloc} * P${iloc}t * P${iloc}z * (${V}y - ${dot}*OM${iloc} * P${iloc}y) - OM${iloc} * P${iloc}t * P${iloc}y * (${V}z - ${dot}*OM${iloc} * P${iloc}z) + 2. / 3. * (${V}t - ${dot}*OM${iloc} * P${iloc}t)*OM${iloc} * P${iloc}y * P${iloc}z")) tPropB[2][3].append(Template(" -OM${iloc} * P${iloc}x * P${iloc}z * (${V}y - ${dot}*OM${iloc} * P${iloc}y) - OM${iloc} * P${iloc}x * P${iloc}y * (${V}z - ${dot}*OM${iloc} * P${iloc}z) + 2. / 3. * (${V}x - ${dot}*OM${iloc} * P${iloc}x)*OM${iloc} * P${iloc}y * P${iloc}z")) tPropB[2][3].append(Template(" -(${V}y - ${dot}*OM${iloc} * P${iloc}y)*OM${iloc} * P${iloc}y * P${iloc}z / 3. + (-1 - OM${iloc} * P${iloc}y ** 2) * (${V}z - ${dot}*OM${iloc} * P${iloc}z)")) tPropB[2][3].append(Template(" (${V}y - ${dot}*OM${iloc} * P${iloc}y) * (-1 - OM${iloc} * P${iloc}z ** 2) - OM${iloc} * P${iloc}y * P${iloc}z * (${V}z - ${dot}*OM${iloc} * P${iloc}z) / 3.")) tPropB[3][0].append(Template(" -(${V}t - ${dot}*OM${iloc} * P${iloc}t)*OM${iloc} * P${iloc}t * P${iloc}z / 3. + (1 - OM${iloc} * P${iloc}t ** 2) * (${V}z - ${dot}*OM${iloc} * P${iloc}z)")) tPropB[3][0].append(Template(" -(${V}t - ${dot}*OM${iloc} * P${iloc}t)*OM${iloc} * P${iloc}x * P${iloc}z - OM${iloc} * P${iloc}t * P${iloc}x * (${V}z - ${dot}*OM${iloc} * P${iloc}z) + 2. / 3.*OM${iloc} * P${iloc}t * P${iloc}z * (${V}x - ${dot}*OM${iloc} * P${iloc}x)")) tPropB[3][0].append(Template("-(${V}t - ${dot}*OM${iloc} * P${iloc}t)*OM${iloc} * P${iloc}y * P${iloc}z - OM${iloc} * P${iloc}t * P${iloc}y * (${V}z - ${dot}*OM${iloc} * P${iloc}z) + 2. / 3.*OM${iloc} * P${iloc}t * P${iloc}z * (${V}y - ${dot}*OM${iloc} * P${iloc}y)")) tPropB[3][0].append(Template(" (${V}t - ${dot}*OM${iloc} * P${iloc}t) * (-1 - OM${iloc} * P${iloc}z ** 2) - OM${iloc} * P${iloc}t * P${iloc}z * (${V}z - ${dot}*OM${iloc} * P${iloc}z) / 3.")) tPropB[3][1].append(Template("-OM${iloc} * P${iloc}t * P${iloc}z * (${V}x - ${dot}*OM${iloc} * P${iloc}x) - OM${iloc} * P${iloc}t * P${iloc}x * (${V}z - ${dot}*OM${iloc} * P${iloc}z) + 2. / 3. * (${V}t - ${dot}*OM${iloc} * P${iloc}t)*OM${iloc} * P${iloc}x * P${iloc}z")) tPropB[3][1].append(Template(" -(${V}x - ${dot}*OM${iloc} * P${iloc}x)*OM${iloc} * P${iloc}x * P${iloc}z / 3. + (-1 - OM${iloc} * P${iloc}x ** 2) * (${V}z - ${dot}*OM${iloc} * P${iloc}z)")) tPropB[3][1].append(Template(" -(${V}x - ${dot}*OM${iloc} * P${iloc}x)*OM${iloc} * P${iloc}y * P${iloc}z - OM${iloc} * P${iloc}x * P${iloc}y * (${V}z - ${dot}*OM${iloc} * P${iloc}z) + 2. / 3.*OM${iloc} * P${iloc}x * P${iloc}z * (${V}y - ${dot}*OM${iloc} * P${iloc}y)")) tPropB[3][1].append(Template(" (${V}x - ${dot}*OM${iloc} * P${iloc}x) * (-1 - OM${iloc} * P${iloc}z ** 2) - OM${iloc} * P${iloc}x * P${iloc}z * (${V}z - ${dot}*OM${iloc} * P${iloc}z) / 3.")) tPropB[3][2].append(Template(" -OM${iloc} * P${iloc}t * P${iloc}z * (${V}y - ${dot}*OM${iloc} * P${iloc}y) - OM${iloc} * P${iloc}t * P${iloc}y * (${V}z - ${dot}*OM${iloc} * P${iloc}z) + 2. / 3. * (${V}t - ${dot}*OM${iloc} * P${iloc}t)*OM${iloc} * P${iloc}y * P${iloc}z")) tPropB[3][2].append(Template("-OM${iloc} * P${iloc}x * P${iloc}z * (${V}y - ${dot}*OM${iloc} * P${iloc}y) - OM${iloc} * P${iloc}x * P${iloc}y * (${V}z - ${dot}*OM${iloc} * P${iloc}z) + 2. / 3. * (${V}x - ${dot}*OM${iloc} * P${iloc}x)*OM${iloc} * P${iloc}y * P${iloc}z")) tPropB[3][2].append(Template(" -(${V}y - ${dot}*OM${iloc} * P${iloc}y)*OM${iloc} * P${iloc}y * P${iloc}z / 3. + (-1 - OM${iloc} * P${iloc}y ** 2) * (${V}z - ${dot}*OM${iloc} * P${iloc}z)")) tPropB[3][2].append(Template(" (${V}y - ${dot}*OM${iloc} * P${iloc}y) * (-1 - OM${iloc} * P${iloc}z ** 2) - OM${iloc} * P${iloc}y * P${iloc}z * (${V}z - ${dot}*OM${iloc} * P${iloc}z) / 3.")) tPropB[3][3].append(Template(" -2*OM${iloc} * P${iloc}t * P${iloc}z * (${V}z - ${dot}*OM${iloc} * P${iloc}z) - 2. / 3. * (${V}t - ${dot}*OM${iloc} * P${iloc}t) * (-1 - OM${iloc} * P${iloc}z ** 2)")) tPropB[3][3].append(Template("-2*OM${iloc} * P${iloc}x * P${iloc}z * (${V}z - ${dot}*OM${iloc} * P${iloc}z) - 2. / 3. * (${V}x - ${dot}*OM${iloc} * P${iloc}x) * (-1 - OM${iloc} * P${iloc}z ** 2)")) tPropB[3][3].append(Template("-2*OM${iloc} * P${iloc}y * P${iloc}z * (${V}z - ${dot}*OM${iloc} * P${iloc}z) - 2. / 3. * (${V}y - ${dot}*OM${iloc} * P${iloc}y) * (-1 - OM${iloc} * P${iloc}z ** 2)")) tPropB[3][3].append(Template("4. / 3. * (${V}z - ${dot}*OM${iloc} * P${iloc}z) * (-1 - OM${iloc} * P${iloc}z ** 2)")) # tensor propagator, no contracted indices tPropC=[[[[],[],[],[]],[[],[],[],[]],[[],[],[],[]],[[],[],[],[]]], [[[],[],[],[]],[[],[],[],[]],[[],[],[],[]],[[],[],[],[]]], [[[],[],[],[]],[[],[],[],[]],[[],[],[],[]],[[],[],[],[]]], [[[],[],[],[]],[[],[],[],[]],[[],[],[],[]],[[],[],[],[]]]] tPropC[0][0][0].append(Template("4./3. * (1 - OM${iloc} * P${iloc}t ** 2) ** 2")) tPropC[0][0][0].append(Template("-4./3. * (1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}t * P${iloc}x")) tPropC[0][0][0].append(Template("-4./3. * (1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}t * P${iloc}y")) tPropC[0][0][0].append(Template("-4./3. * (1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}t * P${iloc}z")) tPropC[0][0][1].append(Template("-4./3. * (1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}t * P${iloc}x")) tPropC[0][0][1].append(Template("2*OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}x ** 2 - 2./3. * (1 - OM${iloc} * P${iloc}t ** 2) * (-1 - OM${iloc} * P${iloc}x ** 2)")) tPropC[0][0][1].append(Template("2*OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}x * P${iloc}y + 2./3. * (1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}x * P${iloc}y")) tPropC[0][0][1].append(Template("2*OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}x * P${iloc}z + 2./3. * (1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}x * P${iloc}z")) tPropC[0][0][2].append(Template("-4./3. * (1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}t * P${iloc}y")) tPropC[0][0][2].append(Template("2*OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}x * P${iloc}y + 2./3. * (1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}x * P${iloc}y")) tPropC[0][0][2].append(Template("2*OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}y ** 2 - 2./3. * (1 - OM${iloc} * P${iloc}t ** 2) * (-1 - OM${iloc} * P${iloc}y ** 2)")) tPropC[0][0][2].append(Template("2*OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}y * P${iloc}z + 2./3. * (1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}y * P${iloc}z")) tPropC[0][0][3].append(Template("-4./3. * (1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}t * P${iloc}z")) tPropC[0][0][3].append(Template("2*OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}x * P${iloc}z + 2./3. * (1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}x * P${iloc}z")) tPropC[0][0][3].append(Template("2*OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}y * P${iloc}z + 2./3. * (1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}y * P${iloc}z")) tPropC[0][0][3].append(Template("2*OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}z ** 2 - 2./3. * (1 - OM${iloc} * P${iloc}t ** 2) * (-1 - OM${iloc} * P${iloc}z ** 2)")) tPropC[0][1][0].append(Template("-4./3. * (1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}t * P${iloc}x")) tPropC[0][1][0].append(Template("(1 - OM${iloc} * P${iloc}t ** 2) * (-1 - OM${iloc} * P${iloc}x ** 2) + OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}x ** 2 /3.")) tPropC[0][1][0].append(Template("-(1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}x * P${iloc}y + OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}x * P${iloc}y /3.")) tPropC[0][1][0].append(Template("-(1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}x * P${iloc}z + OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}x * P${iloc}z /3.")) tPropC[0][1][1].append(Template("(1 - OM${iloc} * P${iloc}t ** 2) * (-1 - OM${iloc} * P${iloc}x ** 2) + OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}x ** 2 /3.")) tPropC[0][1][1].append(Template("-4./3.*OM${iloc} * P${iloc}t * P${iloc}x * (-1 - OM${iloc} * P${iloc}x ** 2)")) tPropC[0][1][1].append(Template("OM${iloc}**2 * P${iloc}t * P${iloc}x ** 2 * P${iloc}y /3. - OM${iloc} * P${iloc}t * P${iloc}y * (-1 - OM${iloc} * P${iloc}x ** 2)")) tPropC[0][1][1].append(Template("OM${iloc}**2 * P${iloc}t * P${iloc}x ** 2 * P${iloc}z /3. - OM${iloc} * P${iloc}t * P${iloc}z * (-1 - OM${iloc} * P${iloc}x ** 2)")) tPropC[0][1][2].append(Template("-(1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}x * P${iloc}y + OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}x * P${iloc}y /3.")) tPropC[0][1][2].append(Template("OM${iloc}**2 * P${iloc}t * P${iloc}x ** 2 * P${iloc}y /3. - OM${iloc} * P${iloc}t * P${iloc}y * (-1 - OM${iloc} * P${iloc}x ** 2)")) tPropC[0][1][2].append(Template("2*OM${iloc}**2 * P${iloc}t * P${iloc}y ** 2 * P${iloc}x + 2./3.*OM${iloc} * P${iloc}t * P${iloc}x * (-1 - OM${iloc} * P${iloc}y ** 2)")) tPropC[0][1][2].append(Template("4./3.*OM${iloc}**2 * P${iloc}t * P${iloc}y * P${iloc}x * P${iloc}z")) tPropC[0][1][3].append(Template("-(1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}x * P${iloc}z + OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}x * P${iloc}z /3.")) tPropC[0][1][3].append(Template("OM${iloc}**2 * P${iloc}t * P${iloc}x ** 2 * P${iloc}z /3. - OM${iloc} * P${iloc}t * P${iloc}z * (-1 - OM${iloc} * P${iloc}x ** 2)")) tPropC[0][1][3].append(Template("4./3.*OM${iloc}**2 * P${iloc}t * P${iloc}y * P${iloc}x * P${iloc}z")) tPropC[0][1][3].append(Template("2*OM${iloc}**2 * P${iloc}t * P${iloc}z ** 2 * P${iloc}x + 2./3.*OM${iloc} * P${iloc}t * P${iloc}x * (-1 - OM${iloc} * P${iloc}z ** 2)")) tPropC[0][2][0].append(Template("-4./3. * (1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}t * P${iloc}y")) tPropC[0][2][0].append(Template("-(1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}x * P${iloc}y + OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}x * P${iloc}y /3.")) tPropC[0][2][0].append(Template("(1 - OM${iloc} * P${iloc}t ** 2) * (-1 - OM${iloc} * P${iloc}y ** 2) + OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}y ** 2 /3.")) tPropC[0][2][0].append(Template("-(1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}y * P${iloc}z + OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}y * P${iloc}z /3.")) tPropC[0][2][1].append(Template("-(1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}x * P${iloc}y + OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}x * P${iloc}y /3.")) tPropC[0][2][1].append(Template("2*OM${iloc}**2 * P${iloc}t * P${iloc}x ** 2 * P${iloc}y + 2./3.*OM${iloc} * P${iloc}t * P${iloc}y * (-1 - OM${iloc} * P${iloc}x ** 2)")) tPropC[0][2][1].append(Template("-OM${iloc} * P${iloc}t * P${iloc}x * (-1 - OM${iloc} * P${iloc}y ** 2) + OM${iloc}**2 * P${iloc}t * P${iloc}y ** 2 * P${iloc}x /3.")) tPropC[0][2][1].append(Template("4./3.*OM${iloc}**2 * P${iloc}t * P${iloc}y * P${iloc}x * P${iloc}z")) tPropC[0][2][2].append(Template("(1 - OM${iloc} * P${iloc}t ** 2) * (-1 - OM${iloc} * P${iloc}y ** 2) + OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}y ** 2 /3.")) tPropC[0][2][2].append(Template("-OM${iloc} * P${iloc}t * P${iloc}x * (-1 - OM${iloc} * P${iloc}y ** 2) + OM${iloc}**2 * P${iloc}t * P${iloc}y ** 2 * P${iloc}x /3.")) tPropC[0][2][2].append(Template("-4./3.*OM${iloc} * P${iloc}t * P${iloc}y * (-1 - OM${iloc} * P${iloc}y ** 2)")) tPropC[0][2][2].append(Template("OM${iloc}**2 * P${iloc}t * P${iloc}y ** 2 * P${iloc}z /3. - OM${iloc} * P${iloc}t * P${iloc}z * (-1 - OM${iloc} * P${iloc}y ** 2)")) tPropC[0][2][3].append(Template("-(1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}y * P${iloc}z + OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}y * P${iloc}z /3.")) tPropC[0][2][3].append(Template("4./3.*OM${iloc}**2 * P${iloc}t * P${iloc}y * P${iloc}x * P${iloc}z")) tPropC[0][2][3].append(Template("OM${iloc}**2 * P${iloc}t * P${iloc}y ** 2 * P${iloc}z /3. - OM${iloc} * P${iloc}t * P${iloc}z * (-1 - OM${iloc} * P${iloc}y ** 2)")) tPropC[0][2][3].append(Template("2*OM${iloc}**2 * P${iloc}t * P${iloc}z ** 2 * P${iloc}y + 2./3.*OM${iloc} * P${iloc}t * P${iloc}y * (-1 - OM${iloc} * P${iloc}z ** 2)")) tPropC[0][3][0].append(Template("-4./3. * (1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}t * P${iloc}z")) tPropC[0][3][0].append(Template("-(1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}x * P${iloc}z + OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}x * P${iloc}z /3.")) tPropC[0][3][0].append(Template("-(1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}y * P${iloc}z + OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}y * P${iloc}z /3.")) tPropC[0][3][0].append(Template("(1 - OM${iloc} * P${iloc}t ** 2) * (-1 - OM${iloc} * P${iloc}z ** 2) + OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}z ** 2 /3.")) tPropC[0][3][1].append(Template("-(1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}x * P${iloc}z + OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}x * P${iloc}z /3.")) tPropC[0][3][1].append(Template("2*OM${iloc}**2 * P${iloc}t * P${iloc}x ** 2 * P${iloc}z + 2./3.*OM${iloc} * P${iloc}t * P${iloc}z * (-1 - OM${iloc} * P${iloc}x ** 2)")) tPropC[0][3][1].append(Template("4./3.*OM${iloc}**2 * P${iloc}t * P${iloc}y * P${iloc}x * P${iloc}z")) tPropC[0][3][1].append(Template("-OM${iloc} * P${iloc}t * P${iloc}x * (-1 - OM${iloc} * P${iloc}z ** 2) + OM${iloc}**2 * P${iloc}t * P${iloc}z ** 2 * P${iloc}x /3.")) tPropC[0][3][2].append(Template("-(1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}y * P${iloc}z + OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}y * P${iloc}z /3.")) tPropC[0][3][2].append(Template("4./3.*OM${iloc}**2 * P${iloc}t * P${iloc}y * P${iloc}x * P${iloc}z")) tPropC[0][3][2].append(Template("2*OM${iloc}**2 * P${iloc}t * P${iloc}y ** 2 * P${iloc}z + 2./3.*OM${iloc} * P${iloc}t * P${iloc}z * (-1 - OM${iloc} * P${iloc}y ** 2)")) tPropC[0][3][2].append(Template("-OM${iloc} * P${iloc}t * P${iloc}y * (-1 - OM${iloc} * P${iloc}z ** 2) + OM${iloc}**2 * P${iloc}t * P${iloc}z ** 2 * P${iloc}y /3.")) tPropC[0][3][3].append(Template("(1 - OM${iloc} * P${iloc}t ** 2) * (-1 - OM${iloc} * P${iloc}z ** 2) + OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}z ** 2 /3.")) tPropC[0][3][3].append(Template("-OM${iloc} * P${iloc}t * P${iloc}x * (-1 - OM${iloc} * P${iloc}z ** 2) + OM${iloc}**2 * P${iloc}t * P${iloc}z ** 2 * P${iloc}x /3.")) tPropC[0][3][3].append(Template("-OM${iloc} * P${iloc}t * P${iloc}y * (-1 - OM${iloc} * P${iloc}z ** 2) + OM${iloc}**2 * P${iloc}t * P${iloc}z ** 2 * P${iloc}y /3.")) tPropC[0][3][3].append(Template("-4./3.*OM${iloc} * P${iloc}t * P${iloc}z * (-1 - OM${iloc} * P${iloc}z ** 2)")) tPropC[1][0][0].append(Template(" -4./3. * (1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}t * P${iloc}x")) tPropC[1][0][0].append(Template(" (1 - OM${iloc} * P${iloc}t ** 2) * (-1 - OM${iloc} * P${iloc}x ** 2) + OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}x ** 2 /3.")) tPropC[1][0][0].append(Template(" -(1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}x * P${iloc}y + OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}x * P${iloc}y /3.")) tPropC[1][0][0].append(Template(" -(1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}x * P${iloc}z + OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}x * P${iloc}z /3.")) tPropC[1][0][1].append(Template(" (1 - OM${iloc} * P${iloc}t ** 2) * (-1 - OM${iloc} * P${iloc}x ** 2) + OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}x ** 2 /3.")) tPropC[1][0][1].append(Template(" -4./3.*OM${iloc} * P${iloc}t * P${iloc}x * (-1 - OM${iloc} * P${iloc}x ** 2)")) tPropC[1][0][1].append(Template(" OM${iloc}**2 * P${iloc}t * P${iloc}x ** 2 * P${iloc}y /3. - OM${iloc} * P${iloc}t * P${iloc}y * (-1 - OM${iloc} * P${iloc}x ** 2)")) tPropC[1][0][1].append(Template(" OM${iloc}**2 * P${iloc}t * P${iloc}x ** 2 * P${iloc}z /3. - OM${iloc} * P${iloc}t * P${iloc}z * (-1 - OM${iloc} * P${iloc}x ** 2)")) tPropC[1][0][2].append(Template(" -(1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}x * P${iloc}y + OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}x * P${iloc}y /3.")) tPropC[1][0][2].append(Template(" OM${iloc}**2 * P${iloc}t * P${iloc}x ** 2 * P${iloc}y /3. - OM${iloc} * P${iloc}t * P${iloc}y * (-1 - OM${iloc} * P${iloc}x ** 2)")) tPropC[1][0][2].append(Template(" 2*OM${iloc}**2 * P${iloc}t * P${iloc}y ** 2 * P${iloc}x + 2./3.*OM${iloc} * P${iloc}t * P${iloc}x * (-1 - OM${iloc} * P${iloc}y ** 2)")) tPropC[1][0][2].append(Template(" 4./3.*OM${iloc}**2 * P${iloc}t * P${iloc}y * P${iloc}x * P${iloc}z")) tPropC[1][0][3].append(Template(" -(1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}x * P${iloc}z + OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}x * P${iloc}z /3.")) tPropC[1][0][3].append(Template(" OM${iloc}**2 * P${iloc}t * P${iloc}x ** 2 * P${iloc}z /3. - OM${iloc} * P${iloc}t * P${iloc}z * (-1 - OM${iloc} * P${iloc}x ** 2)")) tPropC[1][0][3].append(Template(" 4./3.*OM${iloc}**2 * P${iloc}t * P${iloc}y * P${iloc}x * P${iloc}z")) tPropC[1][0][3].append(Template(" 2*OM${iloc}**2 * P${iloc}t * P${iloc}z ** 2 * P${iloc}x + 2./3.*OM${iloc} * P${iloc}t * P${iloc}x * (-1 - OM${iloc} * P${iloc}z ** 2)")) tPropC[1][1][0].append(Template(" 2*OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}x ** 2 - 2./3. * (1 - OM${iloc} * P${iloc}t ** 2) * (-1 - OM${iloc} * P${iloc}x ** 2)")) tPropC[1][1][0].append(Template(" -4./3.*OM${iloc} * P${iloc}t * P${iloc}x * (-1 - OM${iloc} * P${iloc}x ** 2)")) tPropC[1][1][0].append(Template(" 2*OM${iloc}**2 * P${iloc}t * P${iloc}x ** 2 * P${iloc}y + 2./3.*OM${iloc} * P${iloc}t * P${iloc}y * (-1 - OM${iloc} * P${iloc}x ** 2)")) tPropC[1][1][0].append(Template(" 2*OM${iloc}**2 * P${iloc}t * P${iloc}x ** 2 * P${iloc}z + 2./3.*OM${iloc} * P${iloc}t * P${iloc}z * (-1 - OM${iloc} * P${iloc}x ** 2)")) tPropC[1][1][1].append(Template(" -4./3.*OM${iloc} * P${iloc}t * P${iloc}x * (-1 - OM${iloc} * P${iloc}x ** 2)")) tPropC[1][1][1].append(Template(" 4./3. * (-1 - OM${iloc} * P${iloc}x ** 2) ** 2")) tPropC[1][1][1].append(Template(" -4./3. * (-1 - OM${iloc} * P${iloc}x ** 2)*OM${iloc} * P${iloc}x * P${iloc}y")) tPropC[1][1][1].append(Template(" -4./3. * (-1 - OM${iloc} * P${iloc}x ** 2)*OM${iloc} * P${iloc}x * P${iloc}z")) tPropC[1][1][2].append(Template(" 2*OM${iloc}**2 * P${iloc}t * P${iloc}x ** 2 * P${iloc}y + 2./3.*OM${iloc} * P${iloc}t * P${iloc}y * (-1 - OM${iloc} * P${iloc}x ** 2)")) tPropC[1][1][2].append(Template(" -4./3. * (-1 - OM${iloc} * P${iloc}x ** 2)*OM${iloc} * P${iloc}x * P${iloc}y")) tPropC[1][1][2].append(Template(" 2*OM${iloc}**2 * P${iloc}x ** 2 * P${iloc}y ** 2 - 2./3. * (-1 - OM${iloc} * P${iloc}x ** 2) * (-1 - OM${iloc} * P${iloc}y ** 2)")) tPropC[1][1][2].append(Template(" 2*OM${iloc}**2 * P${iloc}x ** 2 * P${iloc}y * P${iloc}z + 2./3. * (-1 - OM${iloc} * P${iloc}x ** 2)*OM${iloc} * P${iloc}y * P${iloc}z")) tPropC[1][1][3].append(Template(" 2*OM${iloc}**2 * P${iloc}t * P${iloc}x ** 2 * P${iloc}z + 2./3.*OM${iloc} * P${iloc}t * P${iloc}z * (-1 - OM${iloc} * P${iloc}x ** 2)")) tPropC[1][1][3].append(Template(" -4./3. * (-1 - OM${iloc} * P${iloc}x ** 2)*OM${iloc} * P${iloc}x * P${iloc}z")) tPropC[1][1][3].append(Template(" 2*OM${iloc}**2 * P${iloc}x ** 2 * P${iloc}y * P${iloc}z + 2./3. * (-1 - OM${iloc} * P${iloc}x ** 2)*OM${iloc} * P${iloc}y * P${iloc}z")) tPropC[1][1][3].append(Template(" 2*OM${iloc}**2 * P${iloc}x ** 2 * P${iloc}z ** 2 - 2./3. * (-1 - OM${iloc} * P${iloc}x ** 2) * (-1 - OM${iloc} * P${iloc}z ** 2)")) tPropC[1][2][0].append(Template("2*OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}x * P${iloc}y + 2./3. * (1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}x * P${iloc}y")) tPropC[1][2][0].append(Template("OM${iloc}**2 * P${iloc}t * P${iloc}x ** 2 * P${iloc}y /3. - OM${iloc} * P${iloc}t * P${iloc}y * (-1 - OM${iloc} * P${iloc}x ** 2)")) tPropC[1][2][0].append(Template("-OM${iloc} * P${iloc}t * P${iloc}x * (-1 - OM${iloc} * P${iloc}y ** 2) + OM${iloc}**2 * P${iloc}t * P${iloc}y ** 2 * P${iloc}x /3.")) tPropC[1][2][0].append(Template("4./3.*OM${iloc}**2 * P${iloc}t * P${iloc}y * P${iloc}x * P${iloc}z ")) tPropC[1][2][1].append(Template("OM${iloc}**2 * P${iloc}t * P${iloc}x ** 2 * P${iloc}y /3. - OM${iloc} * P${iloc}t * P${iloc}y * (-1 - OM${iloc} * P${iloc}x ** 2)")) tPropC[1][2][1].append(Template(" -4./3. * (-1 - OM${iloc} * P${iloc}x ** 2)*OM${iloc} * P${iloc}x * P${iloc}y ")) tPropC[1][2][1].append(Template(" (-1 - OM${iloc} * P${iloc}x ** 2) * (-1 - OM${iloc} * P${iloc}y ** 2) + OM${iloc}**2 * P${iloc}x ** 2 * P${iloc}y ** 2 /3. ")) tPropC[1][2][1].append(Template(" -(-1 - OM${iloc} * P${iloc}x ** 2)*OM${iloc} * P${iloc}y * P${iloc}z + OM${iloc}**2 * P${iloc}x ** 2 * P${iloc}y * P${iloc}z /3.")) tPropC[1][2][2].append(Template(" -OM${iloc} * P${iloc}t * P${iloc}x * (-1 - OM${iloc} * P${iloc}y ** 2) + OM${iloc}**2 * P${iloc}t * P${iloc}y ** 2 * P${iloc}x /3.")) tPropC[1][2][2].append(Template(" (-1 - OM${iloc} * P${iloc}x ** 2) * (-1 - OM${iloc} * P${iloc}y ** 2) + OM${iloc}**2 * P${iloc}x ** 2 * P${iloc}y ** 2 /3. ")) tPropC[1][2][2].append(Template(" -4./3.*OM${iloc} * P${iloc}x * P${iloc}y * (-1 - OM${iloc} * P${iloc}y ** 2) ")) tPropC[1][2][2].append(Template(" OM${iloc}**2 * P${iloc}x * P${iloc}y ** 2 * P${iloc}z /3. - OM${iloc} * P${iloc}x * P${iloc}z * (-1 - OM${iloc} * P${iloc}y ** 2)")) tPropC[1][2][3].append(Template(" 4./3.*OM${iloc}**2 * P${iloc}t * P${iloc}y * P${iloc}x * P${iloc}z ")) tPropC[1][2][3].append(Template(" -(-1 - OM${iloc} * P${iloc}x ** 2)*OM${iloc} * P${iloc}y * P${iloc}z + OM${iloc}**2 * P${iloc}x ** 2 * P${iloc}y * P${iloc}z /3.")) tPropC[1][2][3].append(Template(" OM${iloc}**2 * P${iloc}x * P${iloc}y ** 2 * P${iloc}z /3. - OM${iloc} * P${iloc}x * P${iloc}z * (-1 - OM${iloc} * P${iloc}y ** 2)")) tPropC[1][2][3].append(Template(" 2*OM${iloc}**2 * P${iloc}x * P${iloc}z ** 2 * P${iloc}y + 2./3.*OM${iloc} * P${iloc}x * P${iloc}y * (-1 - OM${iloc} * P${iloc}z ** 2)")) tPropC[1][3][0].append(Template("2*OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}x * P${iloc}z + 2./3. * (1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}x * P${iloc}z")) tPropC[1][3][0].append(Template("OM${iloc}**2 * P${iloc}t * P${iloc}x ** 2 * P${iloc}z /3. - OM${iloc} * P${iloc}t * P${iloc}z * (-1 - OM${iloc} * P${iloc}x ** 2)")) tPropC[1][3][0].append(Template("4./3.*OM${iloc}**2 * P${iloc}t * P${iloc}y * P${iloc}x * P${iloc}z ")) tPropC[1][3][0].append(Template("-OM${iloc} * P${iloc}t * P${iloc}x * (-1 - OM${iloc} * P${iloc}z ** 2) + OM${iloc}**2 * P${iloc}t * P${iloc}z ** 2 * P${iloc}x /3.")) tPropC[1][3][1].append(Template("OM${iloc}**2 * P${iloc}t * P${iloc}x ** 2 * P${iloc}z /3. - OM${iloc} * P${iloc}t * P${iloc}z * (-1 - OM${iloc} * P${iloc}x ** 2)")) tPropC[1][3][1].append(Template("-4./3. * (-1 - OM${iloc} * P${iloc}x ** 2)*OM${iloc} * P${iloc}x * P${iloc}z ")) tPropC[1][3][1].append(Template("-(-1 - OM${iloc} * P${iloc}x ** 2)*OM${iloc} * P${iloc}y * P${iloc}z + OM${iloc}**2 * P${iloc}x ** 2 * P${iloc}y * P${iloc}z /3.")) tPropC[1][3][1].append(Template("(-1 - OM${iloc} * P${iloc}x ** 2) * (-1 - OM${iloc} * P${iloc}z ** 2) + OM${iloc}**2 * P${iloc}x ** 2 * P${iloc}z ** 2 /3. ")) tPropC[1][3][2].append(Template("4./3.*OM${iloc}**2 * P${iloc}t * P${iloc}y * P${iloc}x * P${iloc}z ")) tPropC[1][3][2].append(Template("-(-1 - OM${iloc} * P${iloc}x ** 2)*OM${iloc} * P${iloc}y * P${iloc}z + OM${iloc}**2 * P${iloc}x ** 2 * P${iloc}y * P${iloc}z /3.")) tPropC[1][3][2].append(Template("2*OM${iloc}**2 * P${iloc}x * P${iloc}y ** 2 * P${iloc}z + 2./3.*OM${iloc} * P${iloc}x * P${iloc}z * (-1 - OM${iloc} * P${iloc}y ** 2)")) tPropC[1][3][2].append(Template("-OM${iloc} * P${iloc}x * P${iloc}y * (-1 - OM${iloc} * P${iloc}z ** 2) + OM${iloc}**2 * P${iloc}x * P${iloc}z ** 2 * P${iloc}y /3.")) tPropC[1][3][3].append(Template("-OM${iloc} * P${iloc}t * P${iloc}x * (-1 - OM${iloc} * P${iloc}z ** 2) + OM${iloc}**2 * P${iloc}t * P${iloc}z ** 2 * P${iloc}x /3.")) tPropC[1][3][3].append(Template("(-1 - OM${iloc} * P${iloc}x ** 2) * (-1 - OM${iloc} * P${iloc}z ** 2) + OM${iloc}**2 * P${iloc}x ** 2 * P${iloc}z ** 2 /3. ")) tPropC[1][3][3].append(Template("-OM${iloc} * P${iloc}x * P${iloc}y * (-1 - OM${iloc} * P${iloc}z ** 2) + OM${iloc}**2 * P${iloc}x * P${iloc}z ** 2 * P${iloc}y /3.")) tPropC[1][3][3].append(Template("-4./3.*OM${iloc} * P${iloc}x * P${iloc}z * (-1 - OM${iloc} * P${iloc}z ** 2)")) tPropC[2][0][0].append(Template("-4./3. * (1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}t * P${iloc}y ")) tPropC[2][0][0].append(Template("-(1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}x * P${iloc}y + OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}x * P${iloc}y /3. ")) tPropC[2][0][0].append(Template("(1 - OM${iloc} * P${iloc}t ** 2) * (-1 - OM${iloc} * P${iloc}y ** 2) + OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}y ** 2 /3. ")) tPropC[2][0][0].append(Template("-(1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}y * P${iloc}z + OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}y * P${iloc}z /3. ")) tPropC[2][0][1].append(Template("-(1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}x * P${iloc}y + OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}x * P${iloc}y /3. ")) tPropC[2][0][1].append(Template("2*OM${iloc}**2 * P${iloc}t * P${iloc}x ** 2 * P${iloc}y + 2./3.*OM${iloc} * P${iloc}t * P${iloc}y * (-1 - OM${iloc} * P${iloc}x ** 2)")) tPropC[2][0][1].append(Template("-OM${iloc} * P${iloc}t * P${iloc}x * (-1 - OM${iloc} * P${iloc}y ** 2) + OM${iloc}**2 * P${iloc}t * P${iloc}y ** 2 * P${iloc}x /3.")) tPropC[2][0][1].append(Template("4./3.*OM${iloc}**2 * P${iloc}t * P${iloc}y * P${iloc}x * P${iloc}z ")) tPropC[2][0][2].append(Template("(1 - OM${iloc} * P${iloc}t ** 2) * (-1 - OM${iloc} * P${iloc}y ** 2) + OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}y ** 2 /3. ")) tPropC[2][0][2].append(Template("-OM${iloc} * P${iloc}t * P${iloc}x * (-1 - OM${iloc} * P${iloc}y ** 2) + OM${iloc}**2 * P${iloc}t * P${iloc}y ** 2 * P${iloc}x /3.")) tPropC[2][0][2].append(Template("-4./3.*OM${iloc} * P${iloc}t * P${iloc}y * (-1 - OM${iloc} * P${iloc}y ** 2) ")) tPropC[2][0][2].append(Template("OM${iloc}**2 * P${iloc}t * P${iloc}y ** 2 * P${iloc}z /3. - OM${iloc} * P${iloc}t * P${iloc}z * (-1 - OM${iloc} * P${iloc}y ** 2)")) tPropC[2][0][3].append(Template("-(1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}y * P${iloc}z + OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}y * P${iloc}z /3. ")) tPropC[2][0][3].append(Template("4./3.*OM${iloc}**2 * P${iloc}t * P${iloc}y * P${iloc}x * P${iloc}z ")) tPropC[2][0][3].append(Template("OM${iloc}**2 * P${iloc}t * P${iloc}y ** 2 * P${iloc}z /3. - OM${iloc} * P${iloc}t * P${iloc}z * (-1 - OM${iloc} * P${iloc}y ** 2)")) tPropC[2][0][3].append(Template("2*OM${iloc}**2 * P${iloc}t * P${iloc}z ** 2 * P${iloc}y + 2./3.*OM${iloc} * P${iloc}t * P${iloc}y * (-1 - OM${iloc} * P${iloc}z ** 2)")) tPropC[2][1][0].append(Template("2*OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}x * P${iloc}y + 2./3. * (1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}x * P${iloc}y")) tPropC[2][1][0].append(Template("OM${iloc}**2 * P${iloc}t * P${iloc}x ** 2 * P${iloc}y /3. - OM${iloc} * P${iloc}t * P${iloc}y * (-1 - OM${iloc} * P${iloc}x ** 2)")) tPropC[2][1][0].append(Template("-OM${iloc} * P${iloc}t * P${iloc}x * (-1 - OM${iloc} * P${iloc}y ** 2) + OM${iloc}**2 * P${iloc}t * P${iloc}y ** 2 * P${iloc}x /3.")) tPropC[2][1][0].append(Template("4./3.*OM${iloc}**2 * P${iloc}t * P${iloc}y * P${iloc}x * P${iloc}z ")) tPropC[2][1][1].append(Template("OM${iloc}**2 * P${iloc}t * P${iloc}x ** 2 * P${iloc}y /3. - OM${iloc} * P${iloc}t * P${iloc}y * (-1 - OM${iloc} * P${iloc}x ** 2)")) tPropC[2][1][1].append(Template("-4./3. * (-1 - OM${iloc} * P${iloc}x ** 2)*OM${iloc} * P${iloc}x * P${iloc}y ")) tPropC[2][1][1].append(Template("(-1 - OM${iloc} * P${iloc}x ** 2) * (-1 - OM${iloc} * P${iloc}y ** 2) + OM${iloc}**2 * P${iloc}x ** 2 * P${iloc}y ** 2 /3. ")) tPropC[2][1][1].append(Template("-(-1 - OM${iloc} * P${iloc}x ** 2)*OM${iloc} * P${iloc}y * P${iloc}z + OM${iloc}**2 * P${iloc}x ** 2 * P${iloc}y * P${iloc}z /3.")) tPropC[2][1][2].append(Template("-OM${iloc} * P${iloc}t * P${iloc}x * (-1 - OM${iloc} * P${iloc}y ** 2) + OM${iloc}**2 * P${iloc}t * P${iloc}y ** 2 * P${iloc}x /3.")) tPropC[2][1][2].append(Template("(-1 - OM${iloc} * P${iloc}x ** 2) * (-1 - OM${iloc} * P${iloc}y ** 2) + OM${iloc}**2 * P${iloc}x ** 2 * P${iloc}y ** 2 /3. ")) tPropC[2][1][2].append(Template("-4./3.*OM${iloc} * P${iloc}x * P${iloc}y * (-1 - OM${iloc} * P${iloc}y ** 2) ")) tPropC[2][1][2].append(Template("OM${iloc}**2 * P${iloc}x * P${iloc}y ** 2 * P${iloc}z /3. - OM${iloc} * P${iloc}x * P${iloc}z * (-1 - OM${iloc} * P${iloc}y ** 2)")) tPropC[2][1][3].append(Template("4./3.*OM${iloc}**2 * P${iloc}t * P${iloc}y * P${iloc}x * P${iloc}z ")) tPropC[2][1][3].append(Template("-(-1 - OM${iloc} * P${iloc}x ** 2)*OM${iloc} * P${iloc}y * P${iloc}z + OM${iloc}**2 * P${iloc}x ** 2 * P${iloc}y * P${iloc}z /3.")) tPropC[2][1][3].append(Template("OM${iloc}**2 * P${iloc}x * P${iloc}y ** 2 * P${iloc}z /3. - OM${iloc} * P${iloc}x * P${iloc}z * (-1 - OM${iloc} * P${iloc}y ** 2)")) tPropC[2][1][3].append(Template("2*OM${iloc}**2 * P${iloc}x * P${iloc}z ** 2 * P${iloc}y + 2./3.*OM${iloc} * P${iloc}x * P${iloc}y * (-1 - OM${iloc} * P${iloc}z ** 2)")) tPropC[2][2][0].append(Template("2*OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}y ** 2 - 2./3. * (1 - OM${iloc} * P${iloc}t ** 2) * (-1 - OM${iloc} * P${iloc}y ** 2) ")) tPropC[2][2][0].append(Template("2*OM${iloc}**2 * P${iloc}t * P${iloc}y ** 2 * P${iloc}x + 2./3.*OM${iloc} * P${iloc}t * P${iloc}x * (-1 - OM${iloc} * P${iloc}y ** 2) ")) tPropC[2][2][0].append(Template("-4./3.*OM${iloc} * P${iloc}t * P${iloc}y * (-1 - OM${iloc} * P${iloc}y ** 2) ")) tPropC[2][2][0].append(Template("2*OM${iloc}**2 * P${iloc}t * P${iloc}y ** 2 * P${iloc}z + 2./3.*OM${iloc} * P${iloc}t * P${iloc}z * (-1 - OM${iloc} * P${iloc}y ** 2) ")) tPropC[2][2][1].append(Template("2*OM${iloc}**2 * P${iloc}t * P${iloc}y ** 2 * P${iloc}x + 2./3.*OM${iloc} * P${iloc}t * P${iloc}x * (-1 - OM${iloc} * P${iloc}y ** 2) ")) tPropC[2][2][1].append(Template("2*OM${iloc}**2 * P${iloc}x ** 2 * P${iloc}y ** 2 - 2./3. * (-1 - OM${iloc} * P${iloc}x ** 2) * (-1 - OM${iloc} * P${iloc}y ** 2) ")) tPropC[2][2][1].append(Template("-4./3.*OM${iloc} * P${iloc}x * P${iloc}y * (-1 - OM${iloc} * P${iloc}y ** 2) ")) tPropC[2][2][1].append(Template("2*OM${iloc}**2 * P${iloc}x * P${iloc}y ** 2 * P${iloc}z + 2./3.*OM${iloc} * P${iloc}x * P${iloc}z * (-1 - OM${iloc} * P${iloc}y ** 2) ")) tPropC[2][2][2].append(Template("-4./3.*OM${iloc} * P${iloc}t * P${iloc}y * (-1 - OM${iloc} * P${iloc}y ** 2) ")) tPropC[2][2][2].append(Template("-4./3.*OM${iloc} * P${iloc}x * P${iloc}y * (-1 - OM${iloc} * P${iloc}y ** 2) ")) tPropC[2][2][2].append(Template("4./3. * (-1 - OM${iloc} * P${iloc}y ** 2) ** 2 ")) tPropC[2][2][2].append(Template("-4./3. * (-1 - OM${iloc} * P${iloc}y ** 2)*OM${iloc} * P${iloc}y * P${iloc}z ")) tPropC[2][2][3].append(Template("2*OM${iloc}**2 * P${iloc}t * P${iloc}y ** 2 * P${iloc}z + 2./3.*OM${iloc} * P${iloc}t * P${iloc}z * (-1 - OM${iloc} * P${iloc}y ** 2) ")) tPropC[2][2][3].append(Template("2*OM${iloc}**2 * P${iloc}x * P${iloc}y ** 2 * P${iloc}z + 2./3.*OM${iloc} * P${iloc}x * P${iloc}z * (-1 - OM${iloc} * P${iloc}y ** 2) ")) tPropC[2][2][3].append(Template("-4./3. * (-1 - OM${iloc} * P${iloc}y ** 2)*OM${iloc} * P${iloc}y * P${iloc}z ")) tPropC[2][2][3].append(Template("2*OM${iloc}**2 * P${iloc}y ** 2 * P${iloc}z ** 2 - 2./3. * (-1 - OM${iloc} * P${iloc}y ** 2) * (-1 - OM${iloc} * P${iloc}z ** 2)")) tPropC[2][3][0].append(Template(" 2*OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}y * P${iloc}z + 2./3. * (1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}y * P${iloc}z")) tPropC[2][3][0].append(Template(" 4./3.*OM${iloc}**2 * P${iloc}t * P${iloc}y * P${iloc}x * P${iloc}z ")) tPropC[2][3][0].append(Template(" OM${iloc}**2 * P${iloc}t * P${iloc}y ** 2 * P${iloc}z /3. - OM${iloc} * P${iloc}t * P${iloc}z * (-1 - OM${iloc} * P${iloc}y ** 2)")) tPropC[2][3][0].append(Template(" -OM${iloc} * P${iloc}t * P${iloc}y * (-1 - OM${iloc} * P${iloc}z ** 2) + OM${iloc}**2 * P${iloc}t * P${iloc}z ** 2 * P${iloc}y /3.")) tPropC[2][3][1].append(Template(" 4./3.*OM${iloc}**2 * P${iloc}t * P${iloc}y * P${iloc}x * P${iloc}z ")) tPropC[2][3][1].append(Template(" 2*OM${iloc}**2 * P${iloc}x ** 2 * P${iloc}y * P${iloc}z + 2./3. * (-1 - OM${iloc} * P${iloc}x ** 2)*OM${iloc} * P${iloc}y * P${iloc}z")) tPropC[2][3][1].append(Template(" OM${iloc}**2 * P${iloc}x * P${iloc}y ** 2 * P${iloc}z /3. - OM${iloc} * P${iloc}x * P${iloc}z * (-1 - OM${iloc} * P${iloc}y ** 2)")) tPropC[2][3][1].append(Template(" -OM${iloc} * P${iloc}x * P${iloc}y * (-1 - OM${iloc} * P${iloc}z ** 2) + OM${iloc}**2 * P${iloc}x * P${iloc}z ** 2 * P${iloc}y /3.")) tPropC[2][3][2].append(Template(" OM${iloc}**2 * P${iloc}t * P${iloc}y ** 2 * P${iloc}z /3. - OM${iloc} * P${iloc}t * P${iloc}z * (-1 - OM${iloc} * P${iloc}y ** 2)")) tPropC[2][3][2].append(Template(" OM${iloc}**2 * P${iloc}x * P${iloc}y ** 2 * P${iloc}z /3. - OM${iloc} * P${iloc}x * P${iloc}z * (-1 - OM${iloc} * P${iloc}y ** 2)")) tPropC[2][3][2].append(Template(" -4./3. * (-1 - OM${iloc} * P${iloc}y ** 2)*OM${iloc} * P${iloc}y * P${iloc}z ")) tPropC[2][3][2].append(Template(" (-1 - OM${iloc} * P${iloc}y ** 2) * (-1 - OM${iloc} * P${iloc}z ** 2) + OM${iloc}**2 * P${iloc}y ** 2 * P${iloc}z ** 2 /3. ")) tPropC[2][3][3].append(Template(" -OM${iloc} * P${iloc}t * P${iloc}y * (-1 - OM${iloc} * P${iloc}z ** 2) + OM${iloc}**2 * P${iloc}t * P${iloc}z ** 2 * P${iloc}y /3.")) tPropC[2][3][3].append(Template(" -OM${iloc} * P${iloc}x * P${iloc}y * (-1 - OM${iloc} * P${iloc}z ** 2) + OM${iloc}**2 * P${iloc}x * P${iloc}z ** 2 * P${iloc}y /3.")) tPropC[2][3][3].append(Template(" (-1 - OM${iloc} * P${iloc}y ** 2) * (-1 - OM${iloc} * P${iloc}z ** 2) + OM${iloc}**2 * P${iloc}y ** 2 * P${iloc}z ** 2 /3. ")) tPropC[2][3][3].append(Template(" -4./3.*OM${iloc} * P${iloc}y * P${iloc}z * (-1 - OM${iloc} * P${iloc}z ** 2) ")) tPropC[3][0][0].append(Template(" -4./3. * (1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}t * P${iloc}z ")) tPropC[3][0][0].append(Template(" -(1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}x * P${iloc}z + OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}x * P${iloc}z /3. ")) tPropC[3][0][0].append(Template(" -(1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}y * P${iloc}z + OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}y * P${iloc}z /3. ")) tPropC[3][0][0].append(Template(" (1 - OM${iloc} * P${iloc}t ** 2) * (-1 - OM${iloc} * P${iloc}z ** 2) + OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}z ** 2 /3. ")) tPropC[3][0][1].append(Template(" -(1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}x * P${iloc}z + OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}x * P${iloc}z /3. ")) tPropC[3][0][1].append(Template(" 2*OM${iloc}**2 * P${iloc}t * P${iloc}x ** 2 * P${iloc}z + 2./3.*OM${iloc} * P${iloc}t * P${iloc}z * (-1 - OM${iloc} * P${iloc}x ** 2)")) tPropC[3][0][1].append(Template(" 4./3.*OM${iloc}**2 * P${iloc}t * P${iloc}y * P${iloc}x * P${iloc}z ")) tPropC[3][0][1].append(Template(" -OM${iloc} * P${iloc}t * P${iloc}x * (-1 - OM${iloc} * P${iloc}z ** 2) + OM${iloc}**2 * P${iloc}t * P${iloc}z ** 2 * P${iloc}x /3.")) tPropC[3][0][2].append(Template(" -(1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}y * P${iloc}z + OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}y * P${iloc}z /3. ")) tPropC[3][0][2].append(Template(" 4./3.*OM${iloc}**2 * P${iloc}t * P${iloc}y * P${iloc}x * P${iloc}z ")) tPropC[3][0][2].append(Template(" 2*OM${iloc}**2 * P${iloc}t * P${iloc}y ** 2 * P${iloc}z + 2./3.*OM${iloc} * P${iloc}t * P${iloc}z * (-1 - OM${iloc} * P${iloc}y ** 2)")) tPropC[3][0][2].append(Template(" -OM${iloc} * P${iloc}t * P${iloc}y * (-1 - OM${iloc} * P${iloc}z ** 2) + OM${iloc}**2 * P${iloc}t * P${iloc}z ** 2 * P${iloc}y /3.")) tPropC[3][0][3].append(Template(" (1 - OM${iloc} * P${iloc}t ** 2) * (-1 - OM${iloc} * P${iloc}z ** 2) + OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}z ** 2 /3. ")) tPropC[3][0][3].append(Template(" -OM${iloc} * P${iloc}t * P${iloc}x * (-1 - OM${iloc} * P${iloc}z ** 2) + OM${iloc}**2 * P${iloc}t * P${iloc}z ** 2 * P${iloc}x /3.")) tPropC[3][0][3].append(Template(" -OM${iloc} * P${iloc}t * P${iloc}y * (-1 - OM${iloc} * P${iloc}z ** 2) + OM${iloc}**2 * P${iloc}t * P${iloc}z ** 2 * P${iloc}y /3.")) tPropC[3][0][3].append(Template(" -4./3.*OM${iloc} * P${iloc}t * P${iloc}z * (-1 - OM${iloc} * P${iloc}z ** 2)")) tPropC[3][1][0].append(Template(" 2*OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}x * P${iloc}z + 2./3. * (1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}x * P${iloc}z")) tPropC[3][1][0].append(Template(" OM${iloc}**2 * P${iloc}t * P${iloc}x ** 2 * P${iloc}z /3. - OM${iloc} * P${iloc}t * P${iloc}z * (-1 - OM${iloc} * P${iloc}x ** 2)")) tPropC[3][1][0].append(Template(" 4./3.*OM${iloc}**2 * P${iloc}t * P${iloc}y * P${iloc}x * P${iloc}z ")) tPropC[3][1][0].append(Template(" -OM${iloc} * P${iloc}t * P${iloc}x * (-1 - OM${iloc} * P${iloc}z ** 2) + OM${iloc}**2 * P${iloc}t * P${iloc}z ** 2 * P${iloc}x /3.")) tPropC[3][1][1].append(Template(" OM${iloc}**2 * P${iloc}t * P${iloc}x ** 2 * P${iloc}z /3. - OM${iloc} * P${iloc}t * P${iloc}z * (-1 - OM${iloc} * P${iloc}x ** 2)")) tPropC[3][1][1].append(Template(" -4./3. * (-1 - OM${iloc} * P${iloc}x ** 2)*OM${iloc} * P${iloc}x * P${iloc}z ")) tPropC[3][1][1].append(Template(" -(-1 - OM${iloc} * P${iloc}x ** 2)*OM${iloc} * P${iloc}y * P${iloc}z + OM${iloc}**2 * P${iloc}x ** 2 * P${iloc}y * P${iloc}z /3.")) tPropC[3][1][1].append(Template(" (-1 - OM${iloc} * P${iloc}x ** 2) * (-1 - OM${iloc} * P${iloc}z ** 2) + OM${iloc}**2 * P${iloc}x ** 2 * P${iloc}z ** 2 /3. ")) tPropC[3][1][2].append(Template(" 4./3.*OM${iloc}**2 * P${iloc}t * P${iloc}y * P${iloc}x * P${iloc}z ")) tPropC[3][1][2].append(Template(" -(-1 - OM${iloc} * P${iloc}x ** 2)*OM${iloc} * P${iloc}y * P${iloc}z + OM${iloc}**2 * P${iloc}x ** 2 * P${iloc}y * P${iloc}z /3.")) tPropC[3][1][2].append(Template(" 2*OM${iloc}**2 * P${iloc}x * P${iloc}y ** 2 * P${iloc}z + 2./3.*OM${iloc} * P${iloc}x * P${iloc}z * (-1 - OM${iloc} * P${iloc}y ** 2)")) tPropC[3][1][2].append(Template(" -OM${iloc} * P${iloc}x * P${iloc}y * (-1 - OM${iloc} * P${iloc}z ** 2) + OM${iloc}**2 * P${iloc}x * P${iloc}z ** 2 * P${iloc}y /3.")) tPropC[3][1][3].append(Template(" -OM${iloc} * P${iloc}t * P${iloc}x * (-1 - OM${iloc} * P${iloc}z ** 2) + OM${iloc}**2 * P${iloc}t * P${iloc}z ** 2 * P${iloc}x /3.")) tPropC[3][1][3].append(Template(" (-1 - OM${iloc} * P${iloc}x ** 2) * (-1 - OM${iloc} * P${iloc}z ** 2) + OM${iloc}**2 * P${iloc}x ** 2 * P${iloc}z ** 2 /3. ")) tPropC[3][1][3].append(Template(" -OM${iloc} * P${iloc}x * P${iloc}y * (-1 - OM${iloc} * P${iloc}z ** 2) + OM${iloc}**2 * P${iloc}x * P${iloc}z ** 2 * P${iloc}y /3.")) tPropC[3][1][3].append(Template(" -4./3.*OM${iloc} * P${iloc}x * P${iloc}z * (-1 - OM${iloc} * P${iloc}z ** 2) ")) tPropC[3][2][0].append(Template(" 2*OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}y * P${iloc}z + 2./3. * (1 - OM${iloc} * P${iloc}t ** 2)*OM${iloc} * P${iloc}y * P${iloc}z")) tPropC[3][2][0].append(Template(" 4./3.*OM${iloc}**2 * P${iloc}t * P${iloc}y * P${iloc}x * P${iloc}z")) tPropC[3][2][0].append(Template(" OM${iloc}**2 * P${iloc}t * P${iloc}y ** 2 * P${iloc}z /3. - OM${iloc} * P${iloc}t * P${iloc}z * (-1 - OM${iloc} * P${iloc}y ** 2)")) tPropC[3][2][0].append(Template(" -OM${iloc} * P${iloc}t * P${iloc}y * (-1 - OM${iloc} * P${iloc}z ** 2) + OM${iloc}**2 * P${iloc}t * P${iloc}z ** 2 * P${iloc}y /3.")) tPropC[3][2][1].append(Template(" 4./3.*OM${iloc}**2 * P${iloc}t * P${iloc}y * P${iloc}x * P${iloc}z")) tPropC[3][2][1].append(Template(" 2*OM${iloc}**2 * P${iloc}x ** 2 * P${iloc}y * P${iloc}z + 2./3. * (-1 - OM${iloc} * P${iloc}x ** 2)*OM${iloc} * P${iloc}y * P${iloc}z")) tPropC[3][2][1].append(Template(" OM${iloc}**2 * P${iloc}x * P${iloc}y ** 2 * P${iloc}z /3. - OM${iloc} * P${iloc}x * P${iloc}z * (-1 - OM${iloc} * P${iloc}y ** 2)")) tPropC[3][2][1].append(Template(" -OM${iloc} * P${iloc}x * P${iloc}y * (-1 - OM${iloc} * P${iloc}z ** 2) + OM${iloc}**2 * P${iloc}x * P${iloc}z ** 2 * P${iloc}y /3.")) tPropC[3][2][2].append(Template(" OM${iloc}**2 * P${iloc}t * P${iloc}y ** 2 * P${iloc}z /3. - OM${iloc} * P${iloc}t * P${iloc}z * (-1 - OM${iloc} * P${iloc}y ** 2)")) tPropC[3][2][2].append(Template(" OM${iloc}**2 * P${iloc}x * P${iloc}y ** 2 * P${iloc}z /3. - OM${iloc} * P${iloc}x * P${iloc}z * (-1 - OM${iloc} * P${iloc}y ** 2)")) tPropC[3][2][2].append(Template(" -4./3. * (-1 - OM${iloc} * P${iloc}y ** 2)*OM${iloc} * P${iloc}y * P${iloc}z")) tPropC[3][2][2].append(Template(" (-1 - OM${iloc} * P${iloc}y ** 2) * (-1 - OM${iloc} * P${iloc}z ** 2) + OM${iloc}**2 * P${iloc}y ** 2 * P${iloc}z ** 2 /3. ")) tPropC[3][2][3].append(Template(" -OM${iloc} * P${iloc}t * P${iloc}y * (-1 - OM${iloc} * P${iloc}z ** 2) + OM${iloc}**2 * P${iloc}t * P${iloc}z ** 2 * P${iloc}y /3.")) tPropC[3][2][3].append(Template(" -OM${iloc} * P${iloc}x * P${iloc}y * (-1 - OM${iloc} * P${iloc}z ** 2) + OM${iloc}**2 * P${iloc}x * P${iloc}z ** 2 * P${iloc}y /3.")) tPropC[3][2][3].append(Template(" (-1 - OM${iloc} * P${iloc}y ** 2) * (-1 - OM${iloc} * P${iloc}z ** 2) + OM${iloc}**2 * P${iloc}y ** 2 * P${iloc}z ** 2 /3. ")) tPropC[3][2][3].append(Template(" -4./3.*OM${iloc} * P${iloc}y * P${iloc}z * (-1 - OM${iloc} * P${iloc}z ** 2)")) tPropC[3][3][0].append(Template(" 2*OM${iloc}**2 * P${iloc}t ** 2 * P${iloc}z ** 2 - 2./3. * (1 - OM${iloc} * P${iloc}t ** 2) * (-1 - OM${iloc} * P${iloc}z ** 2)")) tPropC[3][3][0].append(Template(" 2*OM${iloc}**2 * P${iloc}t * P${iloc}z ** 2 * P${iloc}x + 2./3.*OM${iloc} * P${iloc}t * P${iloc}x * (-1 - OM${iloc} * P${iloc}z ** 2)")) tPropC[3][3][0].append(Template(" 2*OM${iloc}**2 * P${iloc}t * P${iloc}z ** 2 * P${iloc}y + 2./3.*OM${iloc} * P${iloc}t * P${iloc}y * (-1 - OM${iloc} * P${iloc}z ** 2)")) tPropC[3][3][0].append(Template(" -4./3.*OM${iloc} * P${iloc}t * P${iloc}z * (-1 - OM${iloc} * P${iloc}z ** 2) ")) tPropC[3][3][1].append(Template(" 2*OM${iloc}**2 * P${iloc}t * P${iloc}z ** 2 * P${iloc}x + 2./3.*OM${iloc} * P${iloc}t * P${iloc}x * (-1 - OM${iloc} * P${iloc}z ** 2)")) tPropC[3][3][1].append(Template(" 2*OM${iloc}**2 * P${iloc}x ** 2 * P${iloc}z ** 2 - 2./3. * (-1 - OM${iloc} * P${iloc}x ** 2) * (-1 - OM${iloc} * P${iloc}z ** 2)")) tPropC[3][3][1].append(Template(" 2*OM${iloc}**2 * P${iloc}x * P${iloc}z ** 2 * P${iloc}y + 2./3.*OM${iloc} * P${iloc}x * P${iloc}y * (-1 - OM${iloc} * P${iloc}z ** 2)")) tPropC[3][3][1].append(Template(" -4./3.*OM${iloc} * P${iloc}x * P${iloc}z * (-1 - OM${iloc} * P${iloc}z ** 2) ")) tPropC[3][3][2].append(Template(" 2*OM${iloc}**2 * P${iloc}t * P${iloc}z ** 2 * P${iloc}y + 2./3.*OM${iloc} * P${iloc}t * P${iloc}y * (-1 - OM${iloc} * P${iloc}z ** 2)")) tPropC[3][3][2].append(Template(" 2*OM${iloc}**2 * P${iloc}x * P${iloc}z ** 2 * P${iloc}y + 2./3.*OM${iloc} * P${iloc}x * P${iloc}y * (-1 - OM${iloc} * P${iloc}z ** 2)")) tPropC[3][3][2].append(Template(" 2*OM${iloc}**2 * P${iloc}y ** 2 * P${iloc}z ** 2 - 2./3. * (-1 - OM${iloc} * P${iloc}y ** 2) * (-1 - OM${iloc} * P${iloc}z ** 2)")) tPropC[3][3][2].append(Template(" -4./3.*OM${iloc} * P${iloc}y * P${iloc}z * (-1 - OM${iloc} * P${iloc}z ** 2)")) tPropC[3][3][3].append(Template(" -4./3.*OM${iloc} * P${iloc}t * P${iloc}z * (-1 - OM${iloc} * P${iloc}z ** 2)")) tPropC[3][3][3].append(Template(" -4./3.*OM${iloc} * P${iloc}x * P${iloc}z * (-1 - OM${iloc} * P${iloc}z ** 2)")) tPropC[3][3][3].append(Template(" -4./3.*OM${iloc} * P${iloc}y * P${iloc}z * (-1 - OM${iloc} * P${iloc}z ** 2)")) tPropC[3][3][3].append(Template(" 4./3. * (-1 - OM${iloc} * P${iloc}z ** 2) ** 2")) imap=["t","x","y","z"] RSDotProduct = Template("${s}ts${si}*${v}t-${s}xs${si}*${v}x-${s}ys${si}*${v}y-${s}zs${si}*${v}z") vTemplateT="""\ {header} {{ if({type}W{iloc}.id()=={id}) {{ return {normal}; }} else {{ return {transpose}; }} }}; """ vTemplate4="""\ {header} {{ {swap} if(id{iloc1}=={id1}) {{ if(id{iloc2}=={id2}) {{ return {res1}; }} else {{ return {res2}; }} }} else {{ if(id{iloc2}=={id2}) {{ return {res3}; }} else {{ return {res4}; }} }} }}; """ vecTemplate="""\ Energy2 p2 = P{iloc}.m2(); LorentzPolarizationVector vtemp = {res}; Complex fact = -Complex(0.,1.)*({cf})*propagator(iopt,p2,out,mass,width); if(mass.real() < ZERO) mass = (iopt==5) ? ZERO : out->mass(); complex mass2 = sqr(mass); if(mass.real()==ZERO) {{ vtemp =fact*vtemp; }} else {{ complex dot = P{iloc}*vtemp; vtemp = fact*(vtemp-dot/mass2*P{iloc}); }} return VectorWaveFunction(P{iloc},out,vtemp.x(),vtemp.y(),vtemp.z(),vtemp.t()); """ sTemplate="""\ Energy2 p2 = P{iloc}.m2(); if(mass.real() < ZERO) mass = (iopt==5) ? ZERO : out->mass(); Complex fact = Complex(0.,1.)*({cf})*propagator(iopt,p2,out,mass,width); Lorentz{offTypeA} newSpin = fact*({res}); return {offTypeB}(P{iloc},out,newSpin); """ RSTemplate="""\ if(mass.real() < ZERO) mass = (iopt==5) ? ZERO : out->mass(); Energy2 p2 = P{iloc}.m2(); Complex fact = Complex(0.,-1.)*({cf})*propagator(iopt,p2,out,mass,width); complex Omass = mass.real()==ZERO ? InvEnergy(ZERO) : 1./mass; Lorentz{offTypeA} newSpin = fact*({res}); return {offTypeB}(P{iloc},out,newSpin); """ scaTemplate="""\ if(mass.real() < ZERO) mass = (iopt==5) ? ZERO : out->mass(); Energy2 p2 = P{iloc}.m2(); Complex fact = Complex(0.,1.)*({cf})*propagator(iopt,p2,out,mass,width); complex output = fact*({res}); return ScalarWaveFunction(P{iloc},out,output); """ tenTemplate="""\ if(mass.real() < ZERO) mass = (iopt==5) ? ZERO : out->mass(); InvEnergy2 OM{iloc} = mass.real()==ZERO ? InvEnergy2(ZERO) : 1./sqr(mass.real()); Energy2 M{iloc}2 = sqr(mass.real()); Energy2 p2 = P{iloc}.m2(); Complex fact = Complex(0.,1.)*({cf})*propagator(iopt,p2,out,mass,width); LorentzTensor output = fact*({res}); return TensorWaveFunction(P{iloc},out,output); """ # various strings for matrixes I4 = "Matrix([[1.,0,0,0],[0,1.,0,0],[0,0,1.,0],[0,0,0,1.]])" G5 = "Matrix([[-1.,0,0,0],[0,-1.,0,0],[0,0,1.,0],[0,0,0,1.]])" PM = "Matrix([[1.,0,0,0],[0,1.,0,0],[0,0,0,0],[0,0,0,0]])" PP = "Matrix([[0,0,0,0],[0,0,0,0],[0,0,1.,0],[0,0,0,1.]])" vslash = Template("Matrix([[0,0,${v}TMZ,-${v}XMY],[0,0,-${v}XPY,${v}TPZ],[${v}TPZ,${v}XMY,0,0],[${v}XPY,${v}TMZ,0,0]])") vslashS = Template("${v}TPZ=Symbol(\"${v}TPZ\")\n${v}TMZ=Symbol(\"${v}TMZ\")\n${v}XPY=Symbol(\"${v}XPY\")\n${v}XMY=Symbol(\"${v}XMY\")\n") momCom = Template("${v}t = Symbol(\"${v}t\")\n${v}x = Symbol(\"${v}x\")\n${v}y = Symbol(\"${v}y\")\n${v}z = Symbol(\"${v}z\")\n") vslashD = Template("complex<${var}> ${v}TPZ = ${v}.t()+${v}.z();\n complex<${var}> ${v}TMZ = ${v}.t()-${v}.z();\n complex<${var}> ${v}XPY = ${v}.x()+Complex(0.,1.)*${v}.y();\n complex<${var}> ${v}XMY = ${v}.x()-Complex(0.,1.)*${v}.y();") vslashM = Template("Matrix([[$m,0,${v}TMZ,-${v}XMY],[0,$m,-${v}XPY,${v}TPZ],[${v}TPZ,${v}XMY,$m,0],[${v}XPY,${v}TMZ,0,$m]])") vslashM2 = Template("Matrix([[$m,0,-${v}TMZ,${v}XMY],[0,$m,${v}XPY,-${v}TPZ],[-${v}TPZ,-${v}XMY,$m,0],[-${v}XPY,-${v}TMZ,0,$m]])") vslashMS = Template("${v}TPZ=Symbol(\"${v}TPZ\")\n${v}TMZ=Symbol(\"${v}TMZ\")\n${v}XPY=Symbol(\"${v}XPY\")\n${v}XMY=Symbol(\"${v}XMY\")\n${m}=Symbol(\"${m}\")\nO${m}=Symbol(\"O${m}\")\n") rslash = Template("Matrix([[$m,0,${v}TMZ,-${v}XMY],[0,$m,-${v}XPY,${v}TPZ],[${v}TPZ,${v}XMY,$m,0],[${v}XPY,${v}TMZ,0,$m]])*( ($${eta}-2./3.*O${m}**2*${v}$${A}*${v}$${B})*Matrix([[1.,0,0,0],[0,1.,0,0],[0,0,1.,0],[0,0,0,1.]]) -1./3.*$${DA}*$${DB} -1./3.*O${m}*(${v}$${B}*$${DA}-${v}$${A}*$${DB}))") rslashB = Template("Matrix([[$m,0,${v}TMZ,-${v}XMY],[0,$m,-${v}XPY,${v}TPZ],[${v}TPZ,${v}XMY,$m,0],[${v}XPY,${v}TMZ,0,$m]])*( (${v2}$${A}-2./3.*O${m}**2*${v}$${A}*${dot})*Matrix([[1.,0,0,0],[0,1.,0,0],[0,0,1.,0],[0,0,0,1.]]) -1./3.*$${DA}*${DB} -1./3.*O${m}*(${dot}*$${DA}-${v}$${A}*${DB}))") rslash2 = Template("Matrix([[$m,0,-${v}TMZ,${v}XMY],[0,$m,${v}XPY,-${v}TPZ],[-${v}TPZ,-${v}XMY,$m,0],[-${v}XPY,-${v}TMZ,0,$m]])*( ($${eta}-2./3.*O${m}**2*${v}$${A}*${v}$${B})*Matrix([[1.,0,0,0],[0,1.,0,0],[0,0,1.,0],[0,0,0,1.]]) -1./3.*$${DA}*$${DB} +1./3.*O${m}*(${v}$${B}*$${DA}-${v}$${A}*$${DB}))") rslash2B = Template("Matrix([[$m,0,-${v}TMZ,${v}XMY],[0,$m,${v}XPY,-${v}TPZ],[-${v}TPZ,-${v}XMY,$m,0],[-${v}XPY,-${v}TMZ,0,$m]])*( (${v2}$${B}-2./3.*O${m}**2*${dot}*${v}$${B})*Matrix([[1.,0,0,0],[0,1.,0,0],[0,0,1.,0],[0,0,0,1.]]) -1./3.*${DA}*$${DB} +1./3.*O${m}*(${v}$${B}*${DA}-${dot}*$${DB}))") dirac=["Matrix([[0,0,1.,0],[0,0,0,1.],[1.,0,0,0],[0,1.,0,0]])","Matrix([[0,0,0,1.],[0,0,1.,0],[0,-1.,0,0],[-1.,0,0,0]])", "Matrix([[0,0,0,complex(0, -1.)],[0,0,complex(0, 1.),0],[0,complex(0, 1.),0,0],[complex(0, -1.),0,0,0]])", "Matrix([[0,0,1.,0],[0,0,0,-1.],[-1.,0,0,0],[0,1.,0,0]])"] CC = "Matrix([[0,1.,0,0],[-1.,0,0,0],[0,0,0,-1.],[0,0,1.,0]])" CD = "Matrix([[0,-1.,0,0],[1.,0,0,0],[0,0,0,1.],[0,0,-1.,0]])" evaluateTemplate = """\ {decl} {{ {momenta} {waves} {swap} {symbols} {couplings} {defns} {result} }} """ spinor = Template("Matrix([[${s}s1],[${s}s2],[${s}s3],[${s}s4]])") sbar = Template("Matrix([[${s}s1,${s}s2,${s}s3,${s}s4]])") sline = Template("${s}s1=Symbol(\"${s}s1\")\n${s}s2=Symbol(\"${s}s2\")\n${s}s3=Symbol(\"${s}s3\")\n${s}s4=Symbol(\"${s}s4\")\n") RSSpinorTemplate = Template("${type}(${outxs1},\n${outxs2},\n${outxs3},\n${outxs4},\n${outys1},\n${outys2},\n${outys3},\n${outys4},\n${outzs1},\n${outzs2},\n${outzs3},\n${outzs4},\n${outts1},\n${outts2},\n${outts3},\n${outts4})") SpinorTemplate = Template("${type}(${outs1},\n${outs2},\n${outs3},\n${outs4})") class LorentzIndex : """ A simple classs to store a Lorentz index """ type="" value=0 dimension=0 def __repr__(self): if(self.type=="V" and not isinstance(self.value,int)) : return self.value else : return "%s%s" % (self.type,self.value) def __init__(self,val) : if(isinstance(val,int)) : self.dimension=0 if(val<0) : self.type="D" self.value = val elif(val>0 and val/1000==0) : self.type="E" self.value = val elif(val>0 and val/1000==1) : self.type="T1" self.value = val%1000 elif(val>0 and val/1000==2) : self.type="T2" self.value = val%1000 else : - print "Unknown value in Lorentz index:",val + print("Unknown value in Lorentz index:",val) raise SkipThisVertex() else : - print "Unknown value in Lorentz index:",val + print("Unknown value in Lorentz index:",val) raise SkipThisVertex() def __eq__(self,other): if(not isinstance(other,LorentzIndex)) : return False return ( (self.type, self.value) == (other.type, other.value) ) def __hash__(self) : return hash((self.type,self.value)) class DiracMatrix: """A simple class to store Dirac matrices""" name ="" value="" index=0 def __init(self) : self.name="" self.value="" self.index=0 def __repr__(self) : if(self.value==0) : return "%s" % self.index else : return "%s" % self.value class LorentzStructure: """A simple class to store a Lorentz structures""" name="" value=0 lorentz=[] spin=[] def __init(self) : self.name="" self.value=0 self.lorentz=[] self.spin=[] def __repr__(self): output = self.name if((self.name=="P" or self.name=="Tensor") and self.value!=0) : output += "%s" % self.value if(self.name=="int" or self.name=="sign") : output += "=%s" % self.value elif(len(self.spin)==0) : output += "(" for val in self.lorentz : output += "%s," % val output=output.rstrip(",") output+=")" elif(len(self.lorentz)==0) : output += "(" for val in self.spin : output += "%s," % val output=output.rstrip(",") output+=")" else : output += "(" for val in self.lorentz : output += "%s," % val for val in self.spin : output += "%s," % val output=output.rstrip(",") output+=")" return output def LorentzCompare(a,b) : if(a.name=="int" and b.name=="int") : return int(abs(b.value)-abs(a.value)) elif(a.name=="int") : return -1 elif(b.name=="int") : return 1 elif(len(a.spin)==0) : if(len(b.spin)==0) : return len(b.lorentz)-len(a.lorentz) else : return -1 elif(len(b.spin)==0) : return 1 else : if(len(a.spin)==0 or len(b.spin)==0) : - print 'Index problem in lorentz compare',\ - a.name,b.name,a.spin,b.spin + print('Index problem in lorentz compare', + a.name,b.name,a.spin,b.spin) raise SkipThisVertex() if(a.spin[0]>0 or b.spin[1]>0 ) : return -1 if(a.spin[1]>0 or b.spin[0]>0 ) : return 1 if(a.spin[1]==b.spin[0]) : return -1 if(b.spin[1]==a.spin[0]) : return 1 return 0 def extractIndices(struct) : if(struct.find("(")<0) : return [] temp=struct.split("(")[1].split(")")[0].split(",") output=[] for val in temp : output.append(int(val)) return output def parse_structure(structure,spins) : output=[] found = True while(found) : found = False # signs between terms if(structure=="+" or structure=="-") : output.append(LorentzStructure()) output[0].name="sign" output[0].value=structure[0]+"1." output[0].value=float(output[0].value) output[0].lorentz=[] output[0].spin=[] return output # simple numeric pre/post factors elif((structure[0]=="-" or structure[0]=="+") and structure[-1]==")" and structure[1]=="(") : output.append(LorentzStructure()) output[-1].name="int" output[-1].value=structure[0]+"1." output[-1].value=float(output[-1].value) output[-1].lorentz=[] output[-1].spin=[] structure=structure[2:-1] found=True elif(structure[0]=="(") : temp=structure.rsplit(")",1) structure=temp[0][1:] output.append(LorentzStructure()) output[-1].name="int" output[-1].value="1."+temp[1] output[-1].value=float(eval(output[-1].value)) output[-1].lorentz=[] output[-1].spin=[] found=True elif(structure[0:2]=="-(") : temp=structure.rsplit(")",1) structure=temp[0][2:] output.append(LorentzStructure()) output[-1].name="int" output[-1].value="-1."+temp[1] output[-1].value=float(eval(output[-1].value)) output[-1].lorentz=[] output[-1].spin=[] found=True # special handling for powers power = False if("**" in structure ) : power = True structure = structure.replace("**","^") structures = structure.split("*") if(power) : for j in range(0,len(structures)): if(structures[j].find("^")>=0) : temp = structures[j].split("^") structures[j] = temp[0] for i in range(0,int(temp[1])-1) : structures.append(temp[0]) # split up the structure for struct in structures: ind = extractIndices(struct) # different types of object # object with only spin indices if(struct.find("Identity")==0 or struct.find("Proj")==0 or struct.find("Gamma5")==0) : output.append(LorentzStructure()) output[-1].spin=ind output[-1].lorentz=[] output[-1].name=struct.split("(")[0] output[-1].value=0 if(len(struct.replace("%s(%s,%s)" % (output[-1].name,ind[0],ind[1]),""))!=0) : - print "Problem handling %s structure " % output[-1].name + print("Problem handling %s structure " % output[-1].name) raise SkipThisVertex() # objects with 2 lorentz indices elif(struct.find("Metric")==0) : output.append(LorentzStructure()) output[-1].lorentz=[LorentzIndex(ind[0]),LorentzIndex(ind[1])] output[-1].name=struct.split("(")[0] output[-1].value=0 output[-1].spin=[] if(len(struct.replace("%s(%s,%s)" % (output[-1].name,ind[0],ind[1]),""))!=0) : - print "Problem handling %s structure " % output[-1].name + print("Problem handling %s structure " % output[-1].name) raise SkipThisVertex() elif(struct.find("P(")==0) : output.append(LorentzStructure()) output[-1].lorentz=[LorentzIndex(ind[0])] output[-1].name=struct.split("(")[0] output[-1].value=ind[1] output[-1].spin=[] if(len(struct.replace("%s(%s,%s)" % (output[-1].name,ind[0],ind[1]),""))!=0) : - print "Problem handling %s structure " % output[-1].name + print("Problem handling %s structure " % output[-1].name) raise SkipThisVertex() # 1 lorentz and 1 spin index elif(struct.find("Gamma")==0) : output.append(LorentzStructure()) output[-1].lorentz=[LorentzIndex(ind[0])] output[-1].spin=[ind[1],ind[2]] output[-1].name=struct.split("(")[0] output[-1].value=1 if(len(struct.replace("%s(%s,%s,%s)" % (output[-1].name,ind[0],ind[1],ind[2]),""))!=0) : - print "problem parsing gamma matrix",struct + print("problem parsing gamma matrix",struct) raise SkipThisVertex() # objects with 4 lorentz indices elif(struct.find("Epsilon")==0) : output.append(LorentzStructure()) output[-1].lorentz=[] for i in range(0,len(ind)) : output[-1].lorentz.append(LorentzIndex(ind[i])) output[-1].spin=[] output[-1].name=struct.split("(")[0] output[-1].value=1 if(len(struct.replace("%s(%s,%s,%s,%s)" % (output[-1].name,ind[0],ind[1],ind[2],ind[3]),""))!=0) : - print 'Problem parsing epsilon',struct + print('Problem parsing epsilon',struct) raise SkipThisVertex() # scalars else : try : output.append(LorentzStructure()) output[-1].value=float(struct) output[-1].name="int" output[-1].lorentz=[] output[-1].spin=[] except : if(struct.find("complex")==0) : vals = struct[0:-1].replace("complex(","").split(",") output[-1].value=complex(float(vals[0]),float(vals[1])) output[-1].name="int" output[-1].lorentz=[] output[-1].spin=[] else : - print 'Problem parsing scalar',struct + print('Problem parsing scalar',struct) raise SkipThisVertex() # now do the sorting if(len(output)==1) : return output output = sorted(output,cmp=LorentzCompare) # fix indices in the RS case if(4 in spins) : for i in range(0,len(output)) : for ll in range(0,len(output[i].lorentz)) : if(spins[output[i].lorentz[ll].value-1]==4 and output[i].lorentz[ll].type=="E") : output[i].lorentz[ll].type="R" # return the answer return output def constructDotProduct(ind1,ind2,defns) : (ind1,ind2) = sorted((ind1,ind2),cmp=indSort) dimension=ind1.dimension+ind2.dimension # this product already dealt with ? if((ind1,ind2) in defns) : name = defns[(ind1,ind2)][0] # handle the product else : name = "dot%s" % (len(defns)+1) unit = computeUnit(dimension) defns[(ind1,ind2)] = [name,"complex<%s> %s = %s*%s;" % (unit,name,ind1,ind2)] return (name,dimension) def contract(parsed) : for j in range(0,len(parsed)) : if(parsed[j]=="") : continue if(parsed[j].name=="P") : # simplest case if(parsed[j].lorentz[0].type=="E" or parsed[j].lorentz[0].type=="P") : newIndex = LorentzIndex(parsed[j].value) newIndex.type="P" newIndex.dimension=1 parsed[j].name="Metric" parsed[j].lorentz.append(newIndex) parsed[j].lorentz = sorted(parsed[j].lorentz,cmp=indSort) continue ll=1 found=False for k in range(0,len(parsed)) : if(j==k or parsed[k]=="" ) : continue for i in range(0,len(parsed[k].lorentz)) : if(parsed[k].lorentz[i] == parsed[j].lorentz[0]) : parsed[k].lorentz[i].type="P" parsed[k].lorentz[i].value = parsed[j].value parsed[k].lorentz[i].dimension=1 if(parsed[k].name=="P") : parsed[k].lorentz.append(LorentzIndex(parsed[k].value)) parsed[k].lorentz[1].type="P" parsed[k].lorentz[1].dimension=1 parsed[k].name="Metric" parsed[k].value = 0 found=True break if(found) : parsed[j]="" break return [x for x in parsed if x != ""] def computeUnit(dimension) : if(isinstance(dimension,int)) : dtemp = dimension else : dtemp=dimension[1]+dimension[2] if(dtemp==0) : unit="double" elif(dtemp==1) : unit="Energy" elif(dtemp==-1) : unit="InvEnergy" elif(dtemp>0) : unit="Energy%s" % (dtemp) elif(dtemp<0) : unit="InvEnergy%s" % (dtemp) return unit def computeUnit2(dimension,vDim) : # first correct for any coupling power in vertex totalDim = int(dimension[0])+dimension[2]+vDim-4 output="" if(totalDim!=0) : if(totalDim>0) : if(totalDim==1) : output = "1./GeV" elif(totalDim==2) : output = "1./GeV2" else : output="1." for i in range(0,totalDim) : output +="/GeV" else : if(totalDim==-1) : output = "GeV" elif(totalDim==-2) : output = "GeV2" else : output="1." for i in range(0,-totalDim) : output +="*GeV" expr="" # now remove the remaining dimensionality removal=dimension[1]-int(dimension[0])-vDim+4 if(removal!=0) : if(removal>0) : if(removal==1) : expr = "UnitRemovalInvE" else : expr = "UnitRemovalInvE%s" % removal else : if(removal==-1) : expr = "UnitRemovalE" else : expr = "UnitRemovalE%s" % (-removal) if(output=="") : return expr elif(expr=="") : return output else : return "%s*%s" %(output,expr) # order the indices of a dot product def indSort(a,b) : if(not isinstance(a,LorentzIndex) or not isinstance(b,LorentzIndex)) : - print "Trying to sort something that's not a Lorentz index",a,b + print("Trying to sort something that's not a Lorentz index",a,b) raise SkipThisVertex() if(a.type==b.type) : i1=a.value i2=b.value if(i1>i2) : return 1 elif(i10) : output="+" else : output="-" parsed=[] return (output,parsed,dimension,eps) # replace integers (really lorentz scalars) for j in range(0,len(parsed)) : if(parsed[j]!="" and parsed[j].name=="int") : output *= parsed[j].value parsed[j]="" # bracket this for safety if(output!="") : output = "(%s)" % output # special for tensor indices if("T" in lorentztag) : for j in range(0,len(parsed)) : if(parsed[j]=="") :continue # check for tensor index found=False for li in parsed[j].lorentz : if(li.type[0]=="T") : index = li found=True break if(not found) : continue # workout the other index for the tensor index2 = LorentzIndex(li.value) if(index.type=="T1") : index2.type="T2" else : index2.type="T1" # special is tensor contracted with itself if(parsed[j].name=="Metric" and index2 == parsed[j].lorentz[1]) : parsed[j].name = "Tensor" parsed[j].value = index.value parsed[j].lorentz = [] if(iloc!=index.value) : name= "traceT%s" % parsed[j].value if( name in defns ) : output += "*(%s)" % defns[name][0] else : defns[name] = [name,"Complex %s = T%s.trace();" % (name,parsed[j].value)] output += "*(%s)" % defns[name][0] parsed[j]="" continue # otherwise search for the match for k in range(j+1,len(parsed)) : found = False for li in parsed[k].lorentz : if(li == index2) : found=True break if(not found) : continue if(parsed[j].name=="P") : newIndex1 = LorentzIndex(parsed[j].value) newIndex1.type="P" newIndex1.dimension=1 elif(parsed[j].name=="Metric") : for li in parsed[j].lorentz : if(li != index) : newIndex1=li break else : - print 'Unknown object with tensor index, first object',parsed[j] + print('Unknown object with tensor index, first object',parsed[j]) raise SkipThisVertex() if(parsed[k].name=="P") : newIndex2 = LorentzIndex(parsed[k].value) newIndex2.type="P" newIndex2.dimension=1 elif(parsed[k].name=="Metric") : for li in parsed[k].lorentz : if(li != index) : newIndex2=li break elif(parsed[k].name=="Gamma") : # if we can't contract if(index.value==iloc or (newIndex1.type=="E" and newIndex1.value==iloc)) : newIndex2=index2 # otherwise contract else : unit=computeUnit(newIndex1.dimension) if(index.type=="T1") : name="T%s%sF" % (index.value,newIndex1) defns[name] = [name,"LorentzVector > %s = T%s.preDot(%s);" % (unit,name,index.value,newIndex1)] else : name="T%s%sS" % (index.value,newIndex1) defns[name] = [name,"LorentzVector > %s = T%s.postDot(%s);" % (unit,name,index.value,newIndex1)] parsed[j]="" gIndex=LorentzIndex(-1) gIndex.type="V" gIndex.value=name gIndex.dimension=newIndex1.dimension parsed[k].lorentz[0] = gIndex break else : - print 'Unknown object with tensor index, second object',parsed[j],parsed[k] + print('Unknown object with tensor index, second object',parsed[j],parsed[k]) raise SkipThisVertex() if(index2.type=="T1") : newIndex1,newIndex2=newIndex2,newIndex1 parsed[j].name = "Tensor" parsed[j].value= int(index.value) parsed[j].lorentz= [newIndex1,newIndex2] if(parsed[k].name!="Gamma") : parsed[k]="" break # main handling of lorentz structures for j in range(0,len(parsed)) : if(parsed[j]=="") : continue if(parsed[j].name=="Metric") : # check whether or not we can contract canContract=True for ll in parsed[j].lorentz : if((ll.type=="E" and ll.value==iloc) or ll.type=="R") : canContract = False break if(not canContract) : continue # if we can do it (name,dTemp) = constructDotProduct(parsed[j].lorentz[0],parsed[j].lorentz[1],defns) output += "*(%s)" % name dimension[2] += dTemp parsed[j]="" elif(parsed[j].name=="Epsilon") : if(not eps) : eps = True # work out which, if any of the indices can be summed over summable=[] for ix in range(0,len(parsed[j].lorentz)) : if(parsed[j].lorentz[ix].type=="P" or (parsed[j].lorentz[ix].type=="E" and iloc !=parsed[j].lorentz[ix].value)) : summable.append(True) else : summable.append(False) sc = summable.count(True) # less than 3 contractable indices, leave for later if(sc<3) : continue # can contract to a vector elif(sc==3) : offLoc = -1 for i in range(0,len(summable)): if(not summable[i]) : offLoc = i break else : offLoc = 0 indices=[] dTemp=0 for ix in range(0,len(parsed[j].lorentz)) : dTemp += parsed[j].lorentz[ix].dimension if(ix!=offLoc) : indices.append(parsed[j].lorentz[ix]) # contract all the indices if(sc==4) : dimension[2] += dTemp iTemp = (parsed[j].lorentz[0],parsed[j].lorentz[1], parsed[j].lorentz[2],parsed[j].lorentz[3]) if(iTemp in defns) : output += "*(%s)" % defns[iTemp][0] parsed[j]="" else : name = "dot%s" % (len(defns)+1) unit = computeUnit(dTemp) defns[iTemp] = [name,"complex<%s> %s =-%s*epsilon(%s,%s,%s);" % (unit,name,parsed[j].lorentz[0], indices[0],indices[1],indices[2]) ] output += "*(%s)" % name parsed[j]="" # contract 3 indices leaving a vector else : iTemp = (indices[0],indices[1],indices[2]) sign = "1" if(offLoc%2!=0) : sign="-1" if(iTemp in defns) : name = defns[iTemp][0] else : name = "V%s" % (len(defns)+1) unit = computeUnit(dTemp) defns[iTemp] = [name,"LorentzVector > %s =-epsilon(%s,%s,%s);" % (unit,name, indices[0],indices[1],indices[2]) ] newIndex = LorentzIndex(int(name[1:])) newIndex.type="V" newIndex.dimension=dTemp output += "*(%s)" % (sign) oi = parsed[j].lorentz[offLoc] if(oi.type!="D") : parsed[j].name="Metric" parsed[j].spins=[] parsed[j].value=0 parsed[j].lorentz=[newIndex,oi] else : found=False for k in range(0,len(parsed)): if(k==j or parsed[k]=="") : continue for ll in range(0,len(parsed[k].lorentz)) : if(parsed[k].lorentz[ll]==oi) : found=True parsed[k].lorentz[ll]=newIndex break if(found) : break if(not found) : - print "Problem contracting indices of Epsilon tensor" + print("Problem contracting indices of Epsilon tensor") raise SkipThisVertex() parsed[j]="" elif(parsed[j].name=="Tensor") : # not an external tensor if(parsed[j].value!=iloc) : # now check the lorentz indices con=[] uncon=[] dtemp=0 for li in parsed[j].lorentz : if(li.type=="P" or li.type=="V") : con.append(li) dtemp+=li.dimension elif(li.type=="E") : if(li.value!=iloc) : con.append(li) else : uncon.append(li) else : - print "Can't handle index ",li,"in tensor",parsed[j] + print("Can't handle index ",li,"in tensor",parsed[j]) raise SkipThisVertex() if(len(con)==2) : iTemp = ("T%s%s%s"% (parsed[j].value,con[0],con[1])) dimension[2]+=dtemp if(iTemp in defns) : output += "*(%s)" % defns[iTemp][0] else : unit=computeUnit(dtemp) name = "dot%s" % (len(defns)+1) defns[iTemp] = [name,"complex<%s> %s = T%s.preDot(%s)*%s;" % (unit,name,parsed[j].value,con[0],con[1])] output += "*(%s)" % name parsed[j]="" # handled in final stage else : continue elif(parsed[j].name.find("Proj")>=0 or parsed[j].name.find("Gamma")>=0 or parsed[j].name.find("Identity")>=0) : continue elif(parsed[j].name=="P" and parsed[j].lorentz[0].type=="R") : continue else : - print 'Lorentz structure',parsed[j],'not handled' + print('Lorentz structure',parsed[j],'not handled') raise SkipThisVertex() # remove leading * if(output!="" and output[0]=="*") : output = output[1:] # remove any (now) empty elements parsed = [x for x in parsed if x != ""] return (output,parsed,dimension,eps) def finalContractions(output,parsed,dimension,lorentztag,iloc,defns) : if(len(parsed)==0) : return (output,dimension) elif(len(parsed)!=1) : - print "Summation can't be handled",parsed + print("Summation can't be handled",parsed) raise SkipThisVertex() if(parsed[0].name=="Tensor") : # contracted with off-shell vector if(parsed[0].value!=iloc) : found = False for ll in parsed[0].lorentz : if(ll.type=="E" and ll.value==iloc) : found = True else : lo=ll if(found) : dimension[2]+= lo.dimension unit=computeUnit(lo.dimension) if(lo==parsed[0].lorentz[0]) : name="T%s%sF" % (parsed[0].value,lo) defns[name] = [name,"LorentzVector > %s = T%s.preDot(%s);" % (unit,name,parsed[0].value,lo)] else : name="T%s%sS" % (parsed[0].value,lo) defns[name] = [name,"LorentzVector > %s = T%s.postDot(%s);" % (unit,name,parsed[0].value,lo)] parsed[0]="" if(output=="") : output="1." output = "(%s)*(%s)" %(output,name) else : - print "Can\'t contract tensor",lo,iloc + print("Can\'t contract tensor",lo,iloc) raise SkipThisVertex() # off-shell tensor else : if(len(parsed[0].lorentz)!=0) : dimension[2]+=parsed[0].lorentz[0].dimension+parsed[0].lorentz[1].dimension tensor = tensorPropagator(parsed[0],defns) if(output=="") : output="1." output = [output,tensor,()] elif(parsed[0].name=="Metric") : found = False for ll in parsed[0].lorentz : if(ll.type=="E" and ll.value==iloc) : found = True else : lo=ll if(found) : parsed[0]="" dimension[2] += lo.dimension if(output=="") : output="1." output = "(%s)*(%s)" %(output,lo) else : - print "Structure can't be handled",parsed,iloc + print("Structure can't be handled",parsed,iloc) raise SkipThisVertex() return (output,dimension) def tensorPropagator(struct,defns) : # dummy index i0 = LorentzIndex(-1000) # index for momentum of propagator ip = LorentzIndex(struct.value) ip.type="P" ip.dimension=1 # the metric tensor terms=[] if(len(struct.lorentz)==0) : (dp,dTemp) = constructDotProduct(ip,ip,defns) pre = "-1./3.*(1.-%s*OM%s)" % (dp,struct.value) terms.append((pre,i0,i0)) pre = "-2./3.*(1.-%s*OM%s)" % (dp,struct.value) terms.append(("%s*OM%s" %(pre,struct.value),ip,ip)) else : # indices of the tensor ind1 = struct.lorentz[0] ind2 = struct.lorentz[1] # the dot products we need (d1,dtemp) = constructDotProduct(ind1,ip,defns) (d2,dtemp) = constructDotProduct(ind2,ip,defns) (d3,dtemp) = constructDotProduct(ind1,ind2,defns) # various terms in the propagator terms.append(("0.5",ind1,ind2)) terms.append(("-0.5*OM%s*%s"%(struct.value,d1),ip,ind2)) terms.append(("-0.5*OM%s*%s"%(struct.value,d2),ind1,ip)) terms.append(("0.5",ind2,ind1)) terms.append(("-0.5*OM%s*%s"%(struct.value,d2),ip,ind1)) terms.append(("-0.5*OM%s*%s"%(struct.value,d1),ind2,ip)) terms.append(("-1./3.*"+d3,i0,i0)) terms.append(("1./3.*OM%s*%s*%s"%(struct.value,d1,d2),i0,i0)) terms.append(("1./3.*OM%s*%s"%(struct.value,d3),ip,ip)) terms.append(("2./3.*OM%s*OM%s*%s*%s"%(struct.value,struct.value,d1,d2),ip,ip)) # compute the output as a dict output={} for i1 in imap: for i2 in imap : val="" for term in terms: if(term[0][0]!="-") : pre = "+"+term[0] else : pre = term[0] if(term[1]==i0) : if(i1==i2) : if(i1=="t") : val += pre else : if(pre[0]=="+") : val +="-"+pre[1:] else : val +="+"+pre[1:] else : val += "%s*%s%s*%s%s" % (pre,term[1],i1,term[2],i2) output["%s%s" % (i1,i2) ] = val.replace("+1*","+").replace("-1*","-") return output def generateVertex(iloc,L,parsed,lorentztag,vertex,defns) : # try to import sympy and exit if required try : import sympy from sympy import Matrix,Symbol except : - print 'ufo2herwig uses the python sympy module to translate general lorentz structures.' - print 'This must be installed if you wish to use this option.' - print 'EXITTING' + print('ufo2herwig uses the python sympy module to translate general lorentz structures.') + print('This must be installed if you wish to use this option.') + print('EXITTING') quit() eps=False # parse the lorentz structures output = [1.]*len(parsed) dimension=[] for i in range(0,len(parsed)) : dimension.append([0,0,0]) for i in range (0,len(parsed)) : (output[i],parsed[i],dimension[i],eps) = finishParsing(parsed[i],dimension[i],lorentztag,iloc,defns,eps) # still need to process gamma matrix strings for fermions if(lorentztag[0] in ["F","R"] ) : return convertDirac(output,dimension,eps,iloc,L,parsed,lorentztag,vertex,defns) # return the answer else : handled=True for i in range (0,len(parsed)) : if(len(parsed[i])!=0) : handled = False break if(not handled) : for i in range (0,len(parsed)) : (output[i],dimension[i]) = finalContractions(output[i],parsed[i],dimension[i],lorentztag,iloc,defns) return (output,dimension,eps) def convertDirac(output,dimension,eps,iloc,L,parsed,lorentztag,vertex,defns) : for i in range(0,len(parsed)): # skip empty elements if(len(parsed[i])==0 or (len(parsed[i])==1 and parsed[i][0]=="")) : continue # parse the string (output[i],dimension[i],defns) = convertDiracStructure(parsed[i],output[i],dimension[i], defns,iloc,L,lorentztag,vertex) return (output,dimension,eps) # parse the gamma matrices def convertMatrix(structure,spins,unContracted,Symbols,dtemp,defns,iloc) : i1 = structure.spin[0] i2 = structure.spin[1] if(structure.name=="Identity") : output = DiracMatrix() output.value = I4 output.index=0 output.name="M" structure="" elif(structure.name=="Gamma5") : output = DiracMatrix() output.value = G5 output.index=0 output.name="M" structure="" elif(structure.name=="ProjM") : output = DiracMatrix() output.value = PM output.index=0 output.name="M" structure="" elif(structure.name=="ProjP") : output = DiracMatrix() output.value = PP output.index=0 output.name="M" structure="" elif(structure.name=="Gamma") : # gamma(mu) lorentz matrix contracted with dummy index if(structure.lorentz[0].type=="D" or structure.lorentz[0].type=="R") : if(structure.lorentz[0] not in unContracted) : unContracted[structure.lorentz[0]] = 0 output = DiracMatrix() output.value=0 output.index=structure.lorentz[0] output.name="GMU" structure="" elif(structure.lorentz[0].type == "E" and structure.lorentz[0].value == iloc ) : if(structure.lorentz[0] not in unContracted) : unContracted[structure.lorentz[0]] = 0 output = DiracMatrix() output.value=0 output.index=structure.lorentz[0] output.name="GMU" structure="" elif(structure.lorentz[0].type == "T1" or structure.lorentz[0].type == "T2") : if(structure.lorentz[0] not in unContracted) : unContracted[structure.lorentz[0]] = 0 output = DiracMatrix() output.value=0 output.index=structure.lorentz[0] output.name="GMU" structure="" else : output=DiracMatrix() output.name="M" output.value = vslash.substitute({ "v" : structure.lorentz[0]}) Symbols += vslashS.substitute({ "v" : structure.lorentz[0]}) variable = computeUnit(structure.lorentz[0].dimension) #if(structure.lorentz[0].type!="V" or # structure.lorentz[0].type=="V") : dtemp[2] += structure.lorentz[0].dimension defns["vv%s" % structure.lorentz[0] ] = \ ["vv%s" % structure.lorentz[0], vslashD.substitute({ "var" : variable, "v" : structure.lorentz[0]})] structure="" else : - print 'Unknown Gamma matrix structure',structure + print('Unknown Gamma matrix structure',structure) raise SkipThisVertex() return (i1,i2,output,structure,Symbols) def checkRSContract(parsed,loc,dtemp) : rindex=LorentzIndex(loc) rindex.type="R" contract="" for i in range(0,len(parsed)) : if(parsed[i]=="") : continue found = False for ll in range(0,len(parsed[i].lorentz)) : if(parsed[i].lorentz[ll]==rindex) : found=True break if(not found) : continue if(parsed[i].name=="P") : dtemp[2]+=1 contract = LorentzIndex(parsed[i].value) contract.type="P" contract.dimension=1 parsed[i]="" break elif(parsed[i].name=="Metric") : for ll in parsed[i].lorentz : if(ll==rindex) : continue else : break if(ll.type=="P") : dtemp[2]+=1 contract=ll parsed[i]="" break elif(parsed[i].name=="Epsilon") : continue else : - print "Unkonwn type contracted with RS spinor",parsed[i] + print("Unkonwn type contracted with RS spinor",parsed[i]) raise SkipThisVertex() return contract def processChain(dtemp,parsed,spins,Symbols,unContracted,defns,iloc) : # piece of dimension which is common (0.5 for sbar and spinor) dtemp[0]+=1 # set up the spin indices sind = 0 lind = 0 expr=[] # now find the next thing in the matrix string ii = 0 index=0 while True : # already handled if(parsed[ii]=="") : ii+=1 continue # start of the chain elif(sind==0 and len(parsed[ii].spin)==2 and parsed[ii].spin[0]>0 ) : (sind,index,matrix,parsed[ii],Symbols) \ = convertMatrix(parsed[ii],spins,unContracted,Symbols,dtemp,defns,iloc) expr.append(matrix) # next element in the chain elif(index!=0 and len(parsed[ii].spin)==2 and parsed[ii].spin[0]==index) : (crap,index,matrix,parsed[ii],Symbols) \ = convertMatrix(parsed[ii],spins,unContracted,Symbols,dtemp,defns,iloc) expr.append(matrix) # check the index to see if we're at the end if(index>0) : lind=index break ii+=1 if(ii>=len(parsed)) : - print "Can't parsed the chain of dirac matrices" - print parsed + print("Can't parsed the chain of dirac matrices") + print(parsed) raise SkipThisVertex() # start and end of the spin chains # first particle spin 1/2 if(spins[sind-1]==2) : start = DiracMatrix() endT = DiracMatrix() start.index=0 endT .index=0 # start of chain and end of transpose # off shell if(sind==iloc) : start.name="M" endT .name="M" start.value = vslashM .substitute({ "v" : "P%s" % sind, "m" : "M%s" % sind} ) Symbols += vslashMS.substitute({ "v" : "P%s" % sind, "m" : "M%s" % sind} ) endT.value = vslashM2.substitute({ "v" : "P%s" % sind, "m" : "M%s" % sind} ) defns["vvP%s" % sind ] = ["vvP%s" % sind , vslashD.substitute({ "var" : "Energy", "v" : "P%s" % sind })] dtemp[1]+=1 # onshell else : start.name="S" endT .name="S" subs = {'s' : ("sbar%s" % sind)} start.value = sbar .substitute(subs) Symbols += sline.substitute(subs) subs = {'s' : ("s%s" % sind)} endT.value = spinor.substitute(subs) Symbols += sline.substitute(subs) # spin 3/2 fermion elif spins[sind-1]==4 : # check if we can easily contract contract=checkRSContract(parsed,sind,dtemp) # off-shell if(sind==iloc) : oindex = LorentzIndex(sind) oindex.type="O" unContracted[oindex]=0 Symbols += vslashMS.substitute({ "v" : "P%s" % sind, "m" : "M%s" % sind} ) Symbols += momCom.substitute({"v" : "P%s" %sind }) defns["vvP%s" % sind ] = ["vvP%s" % sind , vslashD.substitute({ "var" : "Energy", "v" : "P%s" % sind })] dtemp[1] += 1 if(contract=="") : rindex = LorentzIndex(sind) rindex.type="R" start=DiracMatrix() start.value = Template(rslash.substitute({ "v" : "P%s" % sind, "m" : "M%s" % sind, "loc" : sind })) start.name = "RP" start.index = (oindex,rindex) endT=DiracMatrix() endT.value = Template(rslash2.substitute({ "v" : "P%s" % sind, "m" : "M%s" % sind, "loc" : sind })) endT.name = "RP" endT.index = (rindex,oindex) else : # construct dot product pi = LorentzIndex(sind) pi.type="P" pi.dimension=1 (name,dummy) = constructDotProduct(pi,contract,defns) Symbols += momCom.substitute({"v" : contract }) RB = vslash.substitute({ "v" : contract}) Symbols += vslashS.substitute({ "v" : contract }) Symbols += "%s = Symbol('%s')\n" % (name,name) defns["vv%s" % contract ] = ["vv%s" % contract, vslashD.substitute({ "var" : computeUnit(contract.dimension), "v" : "%s" % contract })] start=DiracMatrix() start.name="RQ" start.index = oindex start.value =Template( rslashB.substitute({ "v" : "P%s" % sind, "m" : "M%s" % sind, "loc" : sind, "DB" : RB, "dot" : name , "v2" : contract})) endT=DiracMatrix() endT.name = "RQ" endT.index = oindex endT.value = Template(rslash2B.substitute({ "v" : "P%s" % sind, "m" : "M%s" % sind, "loc" : sind , "DA" : RB, "dot" : name , "v2" : contract})) # on-shell else : start = DiracMatrix() endT = DiracMatrix() # no contraction if(contract=="" or (contract.type=="E" and contract.value==iloc) ) : if contract == "" : contract = LorentzIndex(sind) contract.type="R" # start of matrix string start.value = Template(sbar .substitute({'s' : ("Rsbar%s${L}" % sind)})) start.name="RS" start.index = contract # end of transpose string endT.value=Template(spinor.substitute({'s' : ("Rs%s${L}" % sind)})) endT.name="RS" endT.index = contract unContracted[contract]=0 # variables for sympy for LI in imap : Symbols += sline.substitute({'s' : ("Rs%s%s" % (sind,LI))}) Symbols += sline.substitute({'s' : ("Rsbar%s%s" % (sind,LI))}) else : # start of matrix string start.name="S" start.value = "Matrix([[%s,%s,%s,%s]])" % (RSDotProduct.substitute({'s' : ("Rsbar%s" % sind), 'v':contract, 'si' : 1}), RSDotProduct.substitute({'s' : ("Rsbar%s" % sind), 'v':contract, 'si' : 2}), RSDotProduct.substitute({'s' : ("Rsbar%s" % sind), 'v':contract, 'si' : 3}), RSDotProduct.substitute({'s' : ("Rsbar%s" % sind), 'v':contract, 'si' : 4})) endT.name="S" endT.value = "Matrix([[%s],[%s],[%s],[%s]])" % (RSDotProduct.substitute({'s' : ("Rs%s" % sind), 'v':contract, 'si' : 1}), RSDotProduct.substitute({'s' : ("Rs%s" % sind), 'v':contract, 'si' : 2}), RSDotProduct.substitute({'s' : ("Rs%s" % sind), 'v':contract, 'si' : 3}), RSDotProduct.substitute({'s' : ("Rs%s" % sind), 'v':contract, 'si' : 4})) Symbols += momCom.substitute({"v" : contract }) for LI in ["x","y","z","t"] : Symbols += sline.substitute({'s' : ("Rs%s%s" % (sind,LI))}) Symbols += sline.substitute({'s' : ("Rsbar%s%s" % (sind,LI))}) # last particle spin 1/2 if( spins[lind-1]==2 ) : end = DiracMatrix() startT = DiracMatrix() end .index=0 startT.index=0 # end of chain if(lind==iloc) : end.name ="M" startT.name="M" end.value = vslashM2.substitute({ "v" : "P%s" % lind, "m" : "M%s" % lind} ) startT.value = vslashM.substitute({ "v" : "P%s" % lind, "m" : "M%s" % lind} ) Symbols += vslashMS.substitute({ "v" : "P%s" % lind, "m" : "M%s" % lind} ) defns["vvP%s" % lind ] = ["vvP%s" % lind , vslashD.substitute({ "var" : "Energy", "v" : "P%s" % lind })] dtemp[1] += 1 else : startT.name="S" end .name="S" subs = {'s' : ("s%s" % lind)} end.value = spinor.substitute(subs) Symbols += sline.substitute(subs) subs = {'s' : ("sbar%s" % lind)} startT.value = sbar .substitute(subs) Symbols += sline.substitute(subs) # last particle spin 3/2 elif spins[lind-1]==4 : # check if we can easily contract contract=checkRSContract(parsed,lind,dtemp) # off-shell if(lind==iloc) : oindex = LorentzIndex(lind) oindex.type="O" unContracted[oindex]=0 Symbols += vslashMS.substitute({ "v" : "P%s" % lind, "m" : "M%s" % lind} ) Symbols += momCom.substitute({"v" : "P%s" %lind }) defns["vvP%s" % lind ] = ["vvP%s" % lind , vslashD.substitute({ "var" : "Energy", "v" : "P%s" % lind })] dtemp[1] += 1 if(contract=="") : rindex = LorentzIndex(lind) rindex.type="R" end=DiracMatrix() end.value = Template(rslash2.substitute({ "v" : "P%s" % lind, "m" : "M%s" % lind, "loc" : lind })) end.name = "RP" end.index = (rindex,oindex) startT=DiracMatrix() startT.value=Template(rslash.substitute({ "v" : "P%s" % lind, "m" : "M%s" % lind, "loc" : lind })) startT.name = "RP" startT.index = (oindex,rindex) else : # construct dot product pi = LorentzIndex(lind) pi.type="P" pi.dimension=1 (name,unit) = constructDotProduct(pi,contract,defns) Symbols += momCom.substitute({"v" : contract }) RB = vslash.substitute({ "v" : contract}) Symbols += vslashS.substitute({ "v" : contract }) Symbols += "%s = Symbol('%s')\n" % (name,name) defns["vv%s" % contract ] = ["vv%s" % contract, vslashD.substitute({ "var" : computeUnit(contract.dimension), "v" : "%s" % contract })] end=DiracMatrix() end.name="RQ" end.index = oindex end.value =Template( rslash2B.substitute({ "v" : "P%s" % lind, "m" : "M%s" % lind, "loc" : lind, "DA" : RB, "dot" : name , "v2" : contract})) startT=DiracMatrix() startT.name = "RQ" startT.index = oindex startT.value = Template(rslashB.substitute({ "v" : "P%s" % lind, "m" : "M%s" % lind, "loc" : lind , "DB" : RB, "dot" : name , "v2" : contract})) # on-shell else : end = DiracMatrix() startT = DiracMatrix() # no contraction if(contract=="" or (contract.type=="E" and contract.value==iloc) ) : if contract == "" : contract = LorentzIndex(lind) contract.type="R" # end of matrix string end.value = Template(spinor.substitute({'s' : ("Rs%s${L}" % lind)})) end.name = "RS" end.index = contract # start of matrix string startT.value = Template(sbar .substitute({'s' : ("Rsbar%s${L}" % lind)})) startT.name = "RS" startT.index = contract unContracted[contract]=0 # variables for sympy for LI in imap : Symbols += sline.substitute({'s' : ("Rs%s%s" % (lind,LI))}) Symbols += sline.substitute({'s' : ("Rsbar%s%s" % (lind,LI))}) # contraction else : # end of the matrix string end.name = "S" end.value = "Matrix([[%s],[%s],[%s],[%s]])" % (RSDotProduct.substitute({'s' : ("Rs%s" % lind), 'v':contract, 'si' : 1}), RSDotProduct.substitute({'s' : ("Rs%s" % lind), 'v':contract, 'si' : 2}), RSDotProduct.substitute({'s' : ("Rs%s" % lind), 'v':contract, 'si' : 3}), RSDotProduct.substitute({'s' : ("Rs%s" % lind), 'v':contract, 'si' : 4})) startT.name = "S" startT.value = "Matrix([[%s,%s,%s,%s]])" % (RSDotProduct.substitute({'s' : ("Rsbar%s" % lind), 'v':contract, 'si' : 1}), RSDotProduct.substitute({'s' : ("Rsbar%s" % lind), 'v':contract, 'si' : 2}), RSDotProduct.substitute({'s' : ("Rsbar%s" % lind), 'v':contract, 'si' : 3}), RSDotProduct.substitute({'s' : ("Rsbar%s" % lind), 'v':contract, 'si' : 4})) Symbols += momCom.substitute({"v" : contract }) for LI in ["x","y","z","t"] : Symbols += sline.substitute({'s' : ("Rs%s%s" % (lind,LI))}) Symbols += sline.substitute({'s' : ("Rsbar%s%s" % (lind,LI))}) return(sind,lind,expr,start,startT,end,endT,Symbols) def calculateDirac(expr,start,end,startT,endT,sind,lind,Symbols,iloc) : res=[] for ichain in range(0,len(start)) : # calculate the matrix string etemp="*".join(str(x) for x in expr[ichain]) temp={} exec("import sympy\nfrom sympy import Symbol,Matrix\n"+Symbols+"result="+ ( "%s*%s*%s" %(start[ichain],etemp,end[ichain]))) in temp res.append(temp["result"]) tempT={} exec("import sympy\nfrom sympy import Symbol,Matrix,Transpose\n"+Symbols+"result="+ ( "%s*%s*Transpose(%s)*%s*%s" %(startT[ichain],CC,etemp,CD,endT[ichain]))) in tempT res.append(tempT["result"]) if(len(start)==1) : if(iloc==0 or (iloc!=sind[ichain] and iloc!=lind[ichain])) : sVal = {'s' : temp ["result"][0,0],'sT' : tempT["result"][0,0]} else : sVal={} for jj in range(1,5) : sVal["s%s" % jj] = temp ["result"][jj-1] sVal["sT%s" % jj] = tempT["result"][jj-1] else : sVal={} sVal["s" ] = res[0][0,0]*res[2][0,0] sVal["sT2" ] = res[0][0,0]*res[3][0,0] sVal["sT1" ] = res[1][0,0]*res[2][0,0] sVal["sT12"] = res[1][0,0]*res[3][0,0] return sVal def addToOutput(res,nchain,sign,rTemp) : # 1 spin chain if(nchain==1) : for ii in range(0,2) : if(rTemp[ii][0].shape[0]==1) : # result is scalar if(rTemp[ii][0].shape[1]==1) : if(len(res[ii])==0) : res[ii].append(sign*rTemp [ii][0][0,0]) else : res[ii][0] += sign*rTemp [ii][0][0,0] # result is a spinor elif(rTemp[ii][0].shape[1]==4) : if(len(res[ii])==0) : for j in range(0,4) : res[ii].append(sign*rTemp[ii][0][0,j]) else : for j in range(0,4) : res[ii][j] += sign*rTemp[ii][0][0,j] else : - print "Size problem adding results A",sign,rTemp[ii].shape + print("Size problem adding results A",sign,rTemp[ii].shape) raise SkipThisVertex() # spinor elif(rTemp[ii][0].shape[0]==4 and rTemp[ii][0].shape[1]==1 ) : if(len(res[ii])==0) : for j in range(0,4) : res[ii].append(sign*rTemp[ii][0][j,0]) else : for j in range(0,4) : res[ii][j] += sign*rTemp[ii][0][j,0] else : - print "Size problem adding results A",sign,rTemp[ii][0].shape + print("Size problem adding results A",sign,rTemp[ii][0].shape) raise SkipThisVertex() # 2 spin chains, should only be for a vertex else : for j1 in range(0,2) : for j2 in range (0,2) : val = sign*rTemp[j1][0]*rTemp[j2][1] if(len(res[3])==0) : res[2*j1+j2].append(val[0,0]) else : res[2*j1+j2][0] += val[0,0] def calculateDirac2(expr,start,end,startT,endT,sind,lind,Symbols,defns, iloc,unContracted,spins,lorentz) : tDot="" # output sVal={} # no of chains nchain=len(expr) # now deal with the uncontracted cases contracted={} # sort out contracted and uncontracted indices keys = unContracted.keys() for key in keys: # summed dummy index if key.type=="D" : contracted[key]=0 del unContracted[key] # RS index elif key.type =="R" : contracted[key]=0 del unContracted[key] # tensor index elif key.type == "T1" or key.type=="T2" : contracted[key]=0 del unContracted[key] # external index elif key.type == "O" : continue # uncontracted vector index elif key.type=="E" or key.type=="Q": continue else : - print 'Unknown type of uncontracted index',key + print('Unknown type of uncontracted index',key) raise SkipThisVertex() # check the lorentz structures for lstruct in lorentz : if(lstruct.name=="Epsilon" or lstruct.name=="Vector") : for index in lstruct.lorentz : if(index.type=="E" and index.value==iloc) : unContracted[index]=0 elif(index.type=="P" or index.type=="E" or index.type=="R" or index.type=="D") : contracted[index]=0 else : - print 'Unknown index',index, 'in ',lstruct + print('Unknown index',index, 'in ',lstruct) raise SkipThisVertex() elif(lstruct.name=="Tensor") : if(iloc==lstruct.value) : Symbols += momCom.substitute({"v": "P%s"%lstruct.value}) Symbols += "OM%s = Symbol(\"OM%s\")\n" % (lstruct.value,lstruct.value) Symbols += "M%s2 = Symbol(\"M%s2\")\n" % (lstruct.value,lstruct.value) Symbols += "p2 = Symbol(\"p2\")\n" for ival in range(1,3) : newIndex=LorentzIndex(ival) newIndex.type="O" newIndex.dimension=0 lstruct.lorentz.append(newIndex) unContracted[newIndex]=0 # contracted with self if(len(lstruct.lorentz)==0) : pass # both indices uncontracted, deal with later elif lstruct.lorentz[0].type=="T1" and lstruct.lorentz[1].type=="T2": pass elif lstruct.lorentz[0].type=="T1": pIndex = LorentzIndex(lstruct.value) pIndex.dimension=1 pIndex.type="P" (tDot,dtemp) = constructDotProduct(pIndex,lstruct.lorentz[1],defns) Symbols+="%s = Symbol(\"%s\")\n" %(tDot,tDot) Symbols += momCom.substitute({"v": lstruct.lorentz[1]}) elif lstruct.lorentz[1].type=="T2" : pIndex = LorentzIndex(lstruct.value) pIndex.dimension=1 pIndex.type="P" (tDot,dtemp) = constructDotProduct(pIndex,lstruct.lorentz[0],defns) Symbols+="%s = Symbol(\"%s\")\n" %(tDot,tDot) Symbols += momCom.substitute({"v": lstruct.lorentz[0]}) # both indices still to be contracted else : contracted[lstruct.lorentz[0].type]=0 contracted[lstruct.lorentz[1].type]=0 else : - print 'Unknown lorentz object in calculateDirac2',lstruct,iloc + print('Unknown lorentz object in calculateDirac2',lstruct,iloc) raise SkipThisVertex() # iterate over the uncontracted indices while True : # loop over the unContracted indices res = [] for i in range(0,nchain) : res.append([]) res.append([]) # loop over the contracted indices while True : # sign from metric tensor in contractions sign = 1 - for key,val in contracted.iteritems() : + for key,val in contracted.items() : if(val>0) : sign *=-1 eTemp =[] sTemp =[] fTemp =[] sTTemp=[] fTTemp=[] # make the necessary replacements for remaining indices for ichain in range(0,nchain) : # compute the main expression eTemp.append([]) for val in expr[ichain] : # already a matrix if(val.name=="M") : eTemp[ichain].append(val) # gamma(mu), replace with correct dirac matrix elif(val.name=="GMU") : if(val.index in contracted) : eTemp[ichain].append(dirac[contracted[val.index]]) elif(val.index in unContracted) : eTemp[ichain].append(dirac[unContracted[val.index]]) else : - print 'Unknown index for gamma matrix',val + print('Unknown index for gamma matrix',val) raise SkipThisVertex() # unknown to be sorted out else : - print 'Unknown type in expr',val + print('Unknown type in expr',val) raise SkipThisVertex() # start and end # start if(start[ichain].name=="S" or start[ichain].name=="M" ) : sTemp.append(start[ichain].value) elif(start[ichain].name=="RS") : if(start[ichain].index in contracted) : sTemp.append(start[ichain].value.substitute({"L" : imap[ contracted[start[ichain].index]] })) else : sTemp.append(start[ichain].value.substitute({"L" : imap[unContracted[start[ichain].index]] })) elif(start[ichain].name=="RQ") : i1 = unContracted[start[ichain].index] sTemp.append(start[ichain].value.substitute({"A" : imap[i1], "DA" : dirac[i1] })) elif(start[ichain].name=="RP") : i1 = unContracted[start[ichain].index[0]] i2 = contracted[start[ichain].index[1]] eta=0 if(i1==i2) : if(i1==0) : eta = 1 else : eta = -1 sTemp.append(start[ichain].value.substitute({"eta" : eta, "A":imap[i1] , "B":imap[i2] , "DA": dirac[i1], "DB": dirac[i2]})) else : - print 'Barred spinor not a spinor',start[ichain] + print('Barred spinor not a spinor',start[ichain]) raise SkipThisVertex() if(startT[ichain].name=="S" or startT[ichain].name=="M" ) : sTTemp.append(startT[ichain].value) elif(startT[ichain].name=="RS") : if(startT[ichain].index in contracted) : sTTemp.append(startT[ichain].value.substitute({"L" : imap[ contracted[startT[ichain].index]] })) else : sTTemp.append(startT[ichain].value.substitute({"L" : imap[unContracted[startT[ichain].index]] })) elif(startT[ichain].name=="RQ") : i1 = unContracted[startT[ichain].index] sTTemp.append(startT[ichain].value.substitute({"A" : imap[i1], "DA" : dirac[i1] })) elif(startT[ichain].name=="RP") : i1 = unContracted[startT[ichain].index[0]] i2 = contracted[startT[ichain].index[1]] eta=0 if(i1==i2) : if(i1==0) : eta = 1 else : eta = -1 sTTemp.append(startT[ichain].value.substitute({"eta" : eta, "A":imap[i1] , "B":imap[i2] , "DA": dirac[i1], "DB": dirac[i2]})) else : - print 'barred spinorT not a spinor',startT[ichain] + print('barred spinorT not a spinor',startT[ichain]) raise SkipThisVertex() # end if(end[ichain].name=="S" or end[ichain].name=="M" ) : fTemp.append(end[ichain].value) elif(end[ichain].name=="RS") : if(end[ichain].index in contracted) : fTemp.append(end[ichain].value.substitute({"L" : imap[ contracted[end[ichain].index]] })) else : fTemp.append(end[ichain].value.substitute({"L" : imap[unContracted[end[ichain].index]] })) elif(end[ichain].name=="RQ") : i1 = unContracted[end[ichain].index] fTemp.append(end[ichain].value.substitute({"B" : imap[i1], "DB": dirac[i1] })) elif(end[ichain].name=="RP") : i1 = contracted[end[ichain].index[0]] i2 = unContracted[end[ichain].index[1]] eta=0 if(i1==i2) : if(i1==0) : eta = 1 else : eta = -1 fTemp.append(end[ichain].value.substitute({"eta" : eta, "A":imap[i1] , "B":imap[i2] , "DA": dirac[i1], "DB": dirac[i2]})) else : - print 'spinor not a spinor',end[ichain] + print('spinor not a spinor',end[ichain]) raise SkipThisVertex() if(endT[ichain].name=="S" or endT[ichain].name=="M" ) : fTTemp.append(endT[ichain].value) elif(endT[ichain].name=="RS") : if(endT[ichain].index in contracted) : fTTemp.append(endT[ichain].value.substitute({"L" : imap[ contracted[endT[ichain].index]] })) else : fTTemp.append(endT[ichain].value.substitute({"L" : imap[unContracted[endT[ichain].index]] })) elif(endT[ichain].name=="RQ") : i1 = unContracted[endT[ichain].index] fTTemp.append(endT[ichain].value.substitute({"B" : imap[i1], "DB": dirac[i1] })) elif(endT[ichain].name=="RP") : i1 = contracted[endT[ichain].index[0]] i2 = unContracted[endT[ichain].index[1]] eta=0 if(i1==i2) : if(i1==0) : eta = 1 else : eta = -1 fTTemp.append(endT[ichain].value.substitute({"eta" : eta, "A":imap[i1] , "B":imap[i2] , "DA": dirac[i1], "DB": dirac[i2]})) else : - print 'spinorT not a spinor',endT[ichain] + print('spinorT not a spinor',endT[ichain]) raise SkipThisVertex() # and none dirac lorentz structures isZero = False for li in lorentz: # uncontracted vector if(li.name=="Vector") : index = unContracted[li.lorentz[0]] Symbols += momCom.substitute({"v":li.value}) for ichain in range(0,nchain) : eTemp[ichain].append("%s%s"% (li.value,imap[index]) ) elif(li.name=="Epsilon") : value="" ival=[] for index in li.lorentz : if(index in contracted) : if(index.type=="P" or index.type=="E") : value += "*%s%s" % (index,imap[contracted[index]]) ival.append(contracted[index]) elif(index.type=="R" or index.type=="D") : ival.append(contracted[index]) else : - print 'Unknown index in Epsilon Tensor',index + print('Unknown index in Epsilon Tensor',index) raise SkipThisVertex() elif(index in unContracted) : ival.append(unContracted[index]) if(len(value)!=0 and value[0]=="*") : value = value[1:] eVal = epsValue[ival[0]][ival[1]][ival[2]][ival[3]] if(eVal==0) : isZero = True else : for ichain in range(0,nchain) : eTemp[ichain].append("(%s*%s)"% (eVal,value) ) elif(li.name=="Tensor") : if(li.lorentz[0] in unContracted and li.lorentz[1] in unContracted) : value='0.5*(%s)'%tPropA[unContracted[li.lorentz[0]]][unContracted[li.lorentz[0]]].substitute({"iloc" : li.value}) for ichain in range(0,nchain) : eTemp[ichain].append("(%s)"% (value) ) elif(len(li.lorentz)==4) : if li.lorentz[0].type=="T1" and li.lorentz[1].type=="T2" : value='0.5*(%s)'%tPropC[unContracted[li.lorentz[2]]][unContracted[li.lorentz[3]]][contracted[li.lorentz[0]]][contracted[li.lorentz[1]]].substitute({"iloc" : li.value}) elif li.lorentz[0].type=="T1": value='0.5*(%s)'%tPropB[unContracted[li.lorentz[2]]][unContracted[li.lorentz[3]]][contracted[li.lorentz[0]]].substitute({"iloc" : li.value, "V" : li.lorentz[1], "dot" : tDot}) elif li.lorentz[1].type=="T2" : value= '0.5*(%s)'%tPropB[unContracted[li.lorentz[2]]][unContracted[li.lorentz[3]]][contracted[li.lorentz[1]]].substitute({"iloc" : li.value, "V" : li.lorentz[0], "dot" : tDot}) else : - print 'Both contracted tensor indices contracted' + print('Both contracted tensor indices contracted') raise SkipThisVertex() for ichain in range(0,nchain) : eTemp[ichain].append("(%s)"% (value) ) else : - print 'Uncontracted on-shell tensor' + print('Uncontracted on-shell tensor') raise SkipThisVertex() # unknown else : - print 'Unknown expression in lorentz loop',li + print('Unknown expression in lorentz loop',li) raise SkipThisVertex() # now evaluate the result if(not isZero) : rTemp =[[],[]] for ichain in range(0,nchain) : core = "*".join(str(x) for x in eTemp[ichain]) temp={} exec("import sympy\nfrom sympy import Symbol,Matrix\n"+Symbols+"result="+ ( "(%s)*(%s)*(%s)" %(sTemp[ichain],core,fTemp[ichain]))) in temp rTemp[0].append(temp["result"]) temp={} exec("import sympy\nfrom sympy import Symbol,Matrix,Transpose\n"+Symbols+"result="+ ( "(%s)*(%s)*(Transpose(%s))*(%s)*(%s)" %(sTTemp[ichain],CC,core,CD,fTTemp[ichain]))) in temp rTemp[1].append(temp["result"]) # and add it to the output addToOutput(res,nchain,sign,rTemp) #### END OF THE CONTRACTED LOOP ##### # increment the indices being summed over keys=contracted.keys() ii = len(keys)-1 while ii >=0 : if(contracted[keys[ii]]<3) : contracted[keys[ii]]+=1 break else : contracted[keys[ii]]=0 ii-=1 nZero=0 - for (key,val) in contracted.iteritems() : + for (key,val) in contracted.items() : if(val==0) : nZero+=1 if(nZero==len(contracted)) : break ###### END OF THE UNCONTRACTED LOOP ###### # no uncontracted indices if(len(unContracted)==0) : if(len(res[0])==1) : # scalar if(len(res)==2) : sVal["s" ] = res[0] sVal["sT"] = res[1] # 4 fermion else : sVal["s" ] = res[0] sVal["sT2" ] = res[1] sVal["sT1" ] = res[2] sVal["sT12"] = res[3] # spinor elif(len(res[0])==4) : for k in range(0,4) : sVal[ "s%s" % (k+1) ] = res[0][k] sVal[ "sT%s" % (k+1) ] = res[1][k] else : - print 'Sum problem',len(res),len(res[0]) + print('Sum problem',len(res),len(res[0])) raise SkipThisVertex() break # uncontracted indices else : istring = "" - for (key,val) in unContracted.iteritems() : + for (key,val) in unContracted.items() : istring +=imap[val] if(len(istring)>2) : - print 'Index problem',istring + print('Index problem',istring) raise SkipThisVertex() sVal[istring] = res[0] sVal[istring+"T"] = res[1] # increment the unsummed indices keys=unContracted.keys() ii = len(keys)-1 while ii >=0 : if(unContracted[keys[ii]]<3) : unContracted[keys[ii]]+=1 break else : unContracted[keys[ii]]=0 ii-=1 nZero=0 - for (key,val) in unContracted.iteritems() : + for (key,val) in unContracted.items() : if(val==0) : nZero+=1 if(nZero==len(unContracted)) : break # handle the vector case if( "tt" in sVal) : if(len(sVal)==32 and "tt" in sVal and len(sVal["tt"])==1) : for key in sVal: sVal[key] = sVal[key][0] else : - print 'Tensor sum problem',len(sVal) + print('Tensor sum problem',len(sVal)) raise SkipThisVertex() elif( "t" in sVal ) : # deal with pure vectors if(len(sVal)==8 and "t" in sVal and len(sVal["t"])==1) : pass # RS spinors elif(len(sVal)==8 and "t" in sVal and len(sVal["t"])==4) : pass else : - print 'Value problem',len(sVal) + print('Value problem',len(sVal)) raise SkipThisVertex() else : if("s" in sVal) : for key in sVal: sVal[key] = sVal[key][0] return sVal def convertDiracStructure(parsed,output,dimension,defns,iloc,L,lorentztag,vertex) : # get the spins of the particles spins = vertex.lorentz[0].spins # check if we have one or two spin chains nchain = (lorentztag.count("F")+lorentztag.count("R"))/2 # storage of the intermediate results expr =[] start =[] end =[] startT=[] endT =[] sind=[0]*nchain lind=[0]*nchain unContracted={} Symbols="" dtemp=[0,0,0] # parse the dirac matrix strings for ichain in range(0,nchain) : expr .append([]) start .append("") startT.append("") end .append("") endT .append("") sind[ichain],lind[ichain],expr[ichain],start[ichain],startT[ichain],end[ichain],endT[ichain],Symbols =\ processChain(dtemp,parsed,spins,Symbols,unContracted,defns,iloc) # standard ordering of the chains for ichain in range(0,nchain) : for jchain in range(ichain+1,nchain) : if(sind[jchain] s%s = sW%s.wave();" % (fIndex[i-1],fIndex[i-1])) nf+=1 else : decls.append("SpinorBarWaveFunction & sbarW%s" % (fIndex[i-1])) momenta.append([False,"Lorentz5Momentum P%s =-sbarW%s.momentum();" % (fIndex[i-1],fIndex[i-1])]) waves.append("LorentzSpinorBar sbar%s = sbarW%s.wave();" % (fIndex[i-1],fIndex[i-1])) nf+=1 elif(spin==3) : decls.append("VectorWaveFunction & vW%s" % (i)) momenta.append([False,"Lorentz5Momentum P%s =-vW%s.momentum();" % (i,i)]) waves.append("LorentzPolarizationVector E%s = vW%s.wave();" % (i,i)) elif(spin==4) : if(i%2==1) : decls.append("RSSpinorWaveFunction & RsW%s" % (i)) momenta.append([False,"Lorentz5Momentum P%s =-RsW%s.momentum();" % (i,i)]) waves.append("LorentzRSSpinor Rs%s = RsW%s.wave();" % (i,i)) nf+=1 else : decls.append("RSSpinorBarWaveFunction & RsbarW%s" % (i)) momenta.append([False,"Lorentz5Momentum P%s =-RsbarW%s.momentum();" % (i,i)]) waves.append("LorentzRSSpinorBar Rsbar%s = RsbarW%s.wave();" % (i,i)) nf+=1 elif(spin==5) : decls.append("TensorWaveFunction & tW%s" % (i)) momenta.append([False,"Lorentz5Momentum P%s =-tW%s.momentum();" % (i,i)]) waves.append("LorentzTensor T%s = tW%s.wave();" % (i,i)) else : - print 'Unknown spin',spin + print('Unknown spin',spin) raise SkipThisVertex() poff += "-P%s" % (i) # ensure unbarred spinor first ibar=-1 isp=-1 for i in range(0,len(decls)) : if(decls[i].find("Bar")>0 and ibar==-1) : ibar=i elif(decls[i].find("Spinor")>=0 and isp==-1) : isp=i if(isp!=-1 and ibar!=-1 and isp>ibar) : decls[ibar],decls[isp] = decls[isp],decls[ibar] # constrct the signature poff = ("Lorentz5Momentum P%s = " % iloc ) + poff sig="" if(iloc==0) : sig="%s evaluate(Energy2, const %s)" % (offType,", const ".join(decls)) # special for VVT vertex if(len(vertex.lorentz[0].spins)==3 and vertex.lorentz[0].spins.count(3)==2 and vertex.lorentz[0].spins.count(5)==1) : sig = sig[0:-1] + ", Energy vmass=-GeV)" else : sig="%s evaluate(Energy2, int iopt, tcPDPtr out, const %s, complex mass=-GeV, complex width=-GeV)" % (offType,", const ".join(decls)) momenta.append([True,poff+";"]) # special for VVT vertex if(len(vertex.lorentz[0].spins)==3 and vertex.lorentz[0].spins.count(3)==2 and vertex.lorentz[0].spins.count(5)==1 and vertex.lorentz[0].spins[iloc-1]==5) : sig=sig.replace("complex mass=-GeV","Energy vmass=-GeV, complex mass=-GeV") for i in range(0,len(momenta)) : momenta[i][0]=True return offType,nf,poff,sig def combineResult(res,nf,ispin,vertex) : # extract the vals and dimensions (vals,dim) = res # construct the output structure # vertex and off-shell scalars if(ispin<=1) : otype={'res':""} # spins elif(ispin==2) : otype={'s1':"",'s2':"",'s3':"",'s4':""} # vectors elif(ispin==3) : if( "t" in vals[0][1] ) : otype={'t':"",'x':"",'y':"",'z':""} else : otype={"res":""} # RS spinors elif(ispin==4) : otype={} for i1 in imap : for i in range(1,5) : otype["%ss%s"% (i1,i)]="" # off-shell tensors elif(ispin==5) : otype={} for i1 in imap : for i2 in imap : otype["%s%s"%(i1,i2)]="" else : - print 'Unknown spin',ispin + print('Unknown spin',ispin) raise SkipThisVertex() expr=[otype] for i in range(0,nf-1) : expr.append(copy.copy(otype)) # dimension for checking dimCheck=dim[0] for i in range(0,len(vals)) : # simple signs if(vals[i]=="+" or vals[i]=="-") : for ii in range(0,len(expr)) : - for(key,val) in expr[ii].iteritems() : + for(key,val) in expr[ii].items() : expr[ii][key] = expr[ii][key]+vals[i] continue # check the dimensions if(dimCheck[0]!=dim[i][0] or dimCheck[1]!=dim[i][1] or dimCheck[2]!=dim[i][2]) : - print "Dimension problem in result",i,dimCheck,dim,vertex - print vertex.lorentz + print("Dimension problem in result",i,dimCheck,dim,vertex) + print(vertex.lorentz) for j in range(0,len(vals)) : - print j,dim[j],vals[j] + print(j,dim[j],vals[j]) raise SkipThisVertex() # simplest case if(isinstance(vals[i], basestring)) : for ii in range(0,len(expr)) : - for(key,val) in expr[ii].iteritems() : + for(key,val) in expr[ii].items() : expr[ii][key] = expr[ii][key]+vals[i] continue # more complex structures pre = vals[i][0] if(pre=="(1.0)") : pre="" if(not isinstance(vals[i][1],dict)) : - print 'must be a dict here' + print('must be a dict here') raise SkipThisVertex() # tensors if("tt" in vals[i][1]) : for i1 in imap : for i2 in imap : key="%s%s"%(i1,i2) if(pre=="") : expr[0][key] += "(%s)" % vals[i][1][key] else : expr[0][key] += "%s*(%s)" % (pre,vals[i][1][key]) if(len(expr)==2) : if(pre=="") : expr[1][key] +="(%s)" % vals[i][1][key+"T"] else : expr[1][key] +="%s*(%s)" % (pre,vals[i][1][key+"T"]) # standard fermion vertex case elif(len(vals[i][1])==2 and "s" in vals[i][1] and "sT" in vals[i][1]) : if(pre=="") : expr[0]["res"] += "(%s)" % vals[i][1]["s"] expr[1]["res"] += "(%s)" % vals[i][1]["sT"] else : expr[0]["res"] += "%s*(%s)" % (pre,vals[i][1]["s"]) expr[1]["res"] += "%s*(%s)" % (pre,vals[i][1]["sT"]) # spinor case elif(len(vals[i][1])==8 and "s1" in vals[i][1]) : for jj in range(1,5) : if(pre=="") : expr[0]["s%s" % jj] += "(%s)" % vals[i][1]["s%s" % jj] expr[1]["s%s" % jj] += "(%s)" % vals[i][1]["sT%s" % jj] else : expr[0]["s%s" % jj] += "%s*(%s)" % (pre,vals[i][1]["s%s" % jj]) expr[1]["s%s" % jj] += "%s*(%s)" % (pre,vals[i][1]["sT%s" % jj]) # vector elif(len(vals[i][1])%4==0 and "t" in vals[i][1] and len(vals[i][1]["t"])==1 ) : for i1 in imap : if(pre=="") : expr[0][i1] += "(%s)" % vals[i][1][i1][0] else : expr[0][i1] += "%s*(%s)" % (pre,vals[i][1][i1][0]) if(len(expr)==2) : if(pre=="") : expr[1][i1] +="(%s)" % vals[i][1][i1+"T"][0] else : expr[1][i1] +="%s*(%s)" % (pre,vals[i][1][i1+"T"][0]) # 4 fermion vertex case elif(len(vals[i][1])==4 and "sT12" in vals[i][1]) : if(pre=="") : expr[0]["res"] += "(%s)" % vals[i][1]["s"] expr[1]["res"] += "(%s)" % vals[i][1]["sT2"] expr[2]["res"] += "(%s)" % vals[i][1]["sT1"] expr[3]["res"] += "(%s)" % vals[i][1]["sT12"] else : expr[0]["res"] += "%s*(%s)" % (pre,vals[i][1]["s"]) expr[1]["res"] += "%s*(%s)" % (pre,vals[i][1]["sT2"]) expr[2]["res"] += "(%s)" % vals[i][1]["sT1"] expr[3]["res"] += "(%s)" % vals[i][1]["sT12"] # RS spinor elif(len(vals[i][1])%4==0 and "t" in vals[i][1] and len(vals[i][1]["t"])==4 ) : for i1 in imap : for k in range(1,5) : key = "%ss%s" % (i1,k) if(pre=="") : expr[0][key] += "(%s)" % vals[i][1][i1][k-1] expr[1][key] += "(%s)" % vals[i][1][i1+"T"][k-1] else : expr[0][key] += "%s*(%s)" % (pre,vals[i][1][i1][k-1]) expr[1][key] += "%s*(%s)" % (pre,vals[i][1][i1+"T"][k-1]) else : - print 'problem with type',vals[i] + print('problem with type',vals[i]) raise SkipThisVertex() # no of particles in the vertex vDim = len(vertex.lorentz[0].spins) # compute the unit and apply it unit = computeUnit2(dimCheck,vDim) if(unit!="") : for ii in range(0,len(expr)) : - for (key,val) in expr[ii].iteritems() : + for (key,val) in expr[ii].items() : expr[ii][key] = "(%s)*(%s)" % (val,unit) return expr def headerReplace(inval) : return inval.replace("virtual","").replace("ScalarWaveFunction","").replace("SpinorWaveFunction","") \ .replace("SpinorBarWaveFunction","").replace("VectorWaveFunction","").replace("TensorWaveFunction","") \ .replace("Energy2","q2").replace("int","").replace("complex","").replace("Energy","").replace("=-GeV","") \ .replace("const &","").replace("tcPDPtr","").replace(" "," ").replace("Complex","") def combineComponents(result,offType,RS) : for i in range(0,len(result)) : - for (key,value) in result[i].iteritems() : + for (key,value) in result[i].items() : output=py2cpp(value.strip(),True) result[i][key]=output[0] # simplest case, just a value if(len(result[0])==1 and "res" in result[0]) : for i in range(0,len(result)) : result[i] = result[i]["res"] result[i]=result[i].replace("1j","ii") return # calculate the substitutions if(not isinstance(result[0],basestring)) : subs=[] for ii in range(0,len(result)) : subs.append({}) - for (key,val) in result[ii].iteritems() : + for (key,val) in result[ii].items() : subs[ii]["out%s" % key]= val # spinors if("s1" in result[0]) : stype = "LorentzSpinor" sbtype = "LorentzSpinorBar" if(offType.find("Bar")>0) : (stype,sbtype)=(sbtype,stype) subs[0]["type"] = stype result[0] = SpinorTemplate.substitute(subs[0]) subs[1]["type"] = sbtype result[1] = SpinorTemplate.substitute(subs[1]) # tensors elif("tt" in result[0]) : for ii in range(0,len(result)) : result[ii] = Template("LorentzTensor(${outxx},\n${outxy},\n${outxz},\n${outxt},\n${outyx},\n${outyy},\n${outyz},\n${outyt},\n${outzx},\n${outzy},\n${outzz},\n${outzt},\n${outtx},\n${outty},\n${outtz},\n${outtt})").substitute(subs[ii]) result[ii]=result[ii].replace("(+","(") # vectors elif("t" in result[0]) : for ii in range(0,len(result)) : result[ii] = Template("LorentzVector(${outx},\n${outy},\n${outz},\n${outt})").substitute(subs[ii]) result[ii]=result[ii].replace("(+","(") # RS spinors elif("ts1" in result[0]) : stype = "LorentzRSSpinor" sbtype = "LorentzRSSpinorBar" if(offType.find("Bar")>0) : (stype,sbtype)=(sbtype,stype) subs[0]["type"] = stype result[0] = RSSpinorTemplate.substitute(subs[0]) subs[1]["type"] = sbtype result[1] = RSSpinorTemplate.substitute(subs[1]) else : - print 'Type not implemented',result + print('Type not implemented',result) raise SkipThisVertex() for i in range(0,len(result)) : result[i]=result[i].replace("1j","ii") def generateEvaluateFunction(model,vertex,iloc,values,defns,vertexEval,cf,order) : RS = "R" in vertex.lorentz[0].name FM = "F" in vertex.lorentz[0].name # extract the start and end of the spin chains if( RS or FM ) : fIndex = vertexEval[0][0][0][2] else : fIndex=0 # first construct the signature of the function decls=[] momenta=[] waves=[] offType,nf,poff,sig = constructSignature(vertex,order,iloc,decls,momenta,waves,fIndex) # combine the different terms in the result symbols=set() localCouplings=[] result=[] ispin = 0 if(iloc!=0) : ispin = vertex.lorentz[0].spins[iloc-1] # put the lorentz structures and couplings together for j in range(0,len(vertexEval)) : # get the lorentz structure piece expr = combineResult(vertexEval[j],nf,ispin,vertex) # get the coupling for this bit val, sym = py2cpp(values[j]) localCouplings.append("Complex local_C%s = %s;\n" % (j,val)) symbols |=sym # put them together vtype="Complex" if("res" in expr[0] and offType=="VectorWaveFunction") : vtype="LorentzPolarizationVector" if(len(result)==0) : for ii in range(0,len(expr)) : result.append({}) - for (key,val) in expr[ii].iteritems() : + for (key,val) in expr[ii].items() : result[ii][key] = " %s((local_C%s)*(%s)) " % (vtype,j,val) else : for ii in range(0,len(expr)) : - for (key,val) in expr[ii].iteritems(): + for (key,val) in expr[ii].items(): result[ii][key] += " + %s((local_C%s)*(%s)) " % (vtype,j,val) # for more complex types merge the spin/lorentz components combineComponents(result,offType,RS) # multiple by scalar wavefunctions scalars="" for i in range (0,len(vertex.lorentz[0].spins)) : if(vertex.lorentz[0].spins[i]==1 and i+1!=iloc) : scalars += "sca%s*" % (i+1) if(scalars!="") : for ii in range(0,len(result)) : result[ii] = "(%s)*(%s)" % (result[ii],scalars[0:-1]) # vertex, just return the answer if(iloc==0) : result[0] = "return (%s)*(%s);\n" % (result[0],py2cpp(cf)[0]) if(FM or RS) : for i in range(1,len(result)) : result[i] = "return (%s)*(%s);\n" % (result[i],py2cpp(cf)[0]) # off-shell particle else : # off-shell scalar if(vertex.lorentz[0].spins[iloc-1] == 1 ) : result[0] = scaTemplate.format(iloc=iloc,cf=py2cpp(cf[0])[0],res=result[0]) if(FM or RS) : result[1] = scaTemplate.format(iloc=iloc,cf=py2cpp(cf[0])[0],res=result[1]) # off-shell fermion elif(vertex.lorentz[0].spins[iloc-1] == 2 ) : result[0] = sTemplate.format(iloc=iloc,cf=py2cpp(cf[0])[0],offTypeA=offType.replace("WaveFunction",""), res=result[0].replace( "M%s" % iloc, "mass" ),offTypeB=offType) if(FM or RS) : if(offType.find("Bar")>0) : offTypeT=offType.replace("Bar","") else : offTypeT=offType.replace("Spinor","SpinorBar") result[1] = sTemplate.format(iloc=iloc,cf=py2cpp(cf[0])[0],offTypeA=offTypeT.replace("WaveFunction",""), res=result[1].replace( "M%s" % iloc, "mass" ),offTypeB=offTypeT) # off-shell vector elif(vertex.lorentz[0].spins[iloc-1] == 3 ) : result[0] = vecTemplate.format(iloc=iloc,res=result[0],cf=py2cpp(cf)[0]) if(FM or RS) : result[1] = vecTemplate.format(iloc=iloc,cf=py2cpp(cf[0])[0],res=result[1]) elif(vertex.lorentz[0].spins[iloc-1] == 4 ) : if(offType.find("Bar")>0) : offTypeT=offType.replace("Bar","") else : offTypeT=offType.replace("Spinor","SpinorBar") result[1] = RSTemplate.format(iloc=iloc,cf=py2cpp(cf[0])[0],offTypeA=offTypeT.replace("WaveFunction",""), res=result[1].replace( "M%s" % iloc, "mass" ),offTypeB=offTypeT) result[0] = RSTemplate.format(iloc=iloc,cf=py2cpp(cf[0])[0],offTypeA=offType.replace("WaveFunction",""), res=result[0].replace( "M%s" % iloc, "mass" ),offTypeB=offType) # tensors elif(vertex.lorentz[0].spins[iloc-1]) : if(RS) : - print "RS spinors and tensors not handled" + print("RS spinors and tensors not handled") raise SkipThisVertex() result[0] = tenTemplate.format(iloc=iloc,cf=py2cpp(cf)[0],res=result[0]) if(FM or RS) : result[1] = tenTemplate.format(iloc=iloc,cf=py2cpp(cf)[0],res=result[1]) else : - print 'Unknown spin for off-shell particle',vertex.lorentz[0].spins[iloc-1] + print('Unknown spin for off-shell particle',vertex.lorentz[0].spins[iloc-1]) raise SkipThisVertex() # check if momenta defns needed to clean up compile of code - for (key,val) in defns.iteritems() : + for (key,val) in defns.items() : if( isinstance(key, basestring)) : if(key.find("vvP")==0) : momenta[int(key[3])-1][0] = True else : for vals in key : if(vals.type=="P") : momenta[vals.value-1][0] = True # cat the definitions defString="" - for (key,value) in defns.iteritems() : + for (key,value) in defns.items() : if(value[0]=="") : continue if(value[0][0]=="V" or value[0][0]=="T") : defString+=" %s\n" %value[1] - for (key,value) in defns.iteritems() : + for (key,value) in defns.items() : if(value[0]=="") : continue if(value[0][0]!="V" and value[0][0]!="T") : defString+=" %s\n" %value[1] if(len(result)<=2) : sorder=swapOrder(vertex,iloc,momenta,fIndex) else : sorder="" momentastring="" for i in range(0,len(momenta)) : if(momenta[i][0] and momenta[i][1]!="") : momentastring+=momenta[i][1]+"\n " # special for 4-point VVVV if(vertex.lorentz[0].spins.count(3)==4 and iloc==0) : sig=sig.replace("Energy2","Energy2,int") header="virtual %s" % sig sig=sig.replace("=-GeV","") symboldefs = [ def_from_model(model,s) for s in symbols ] function = evaluateTemplate.format(decl=sig,momenta=momentastring,defns=defString, waves="\n ".join(waves),symbols='\n '.join(symboldefs), couplings="\n ".join(localCouplings), result=result[0],swap=sorder) # special for transpose if(FM or RS) : h2=header if(not RS) : h2=header.replace("evaluate","evaluateN") function=function.replace("evaluate(","evaluateN(") headers=[] newHeader="" for ifunction in range(1,len(result)) : waveNew=[] momentastring="" htemp = header.split(",") irs=-1 isp=-1 # RS case if(RS) : # sort out the wavefunctions for i in range(0,len(waves)) : if(waves[i].find("Spinor")<0) : waveNew.append(waves[i]) continue if(waves[i].find("Bar")>0) : waveNew.append(waves[i].replace("Bar","").replace("bar","")) else : waveNew.append(waves[i].replace("Spinor","SpinorBar").replace(" s"," sbar").replace("Rs","Rsbar")) # sort out the momenta definitions for i in range(0,len(momenta)) : if(momenta[i][0] and momenta[i][1]!="") : if(momenta[i][1].find("barW")>0) : momentastring+=momenta[i][1].replace("barW","W")+"\n " elif(momenta[i][1].find("sW")>0) : momentastring+=momenta[i][1].replace("sW","sbarW")+"\n " else : momentastring+=momenta[i][1]+"\n " # header string for i in range(0,len(htemp)) : if(htemp[i].find("RS")>0) : if(htemp[i].find("Bar")>0) : htemp[i]=htemp[i].replace("Bar","").replace("RsbarW","RsW") else : htemp[i]=htemp[i].replace("Spinor","SpinorBar").replace("RsW","RsbarW") if(i>0) : irs=i elif(htemp[i].find("Spinor")>0) : if(htemp[i].find("Bar")>0) : htemp[i]=htemp[i].replace("Bar","").replace("sbarW","sW") else : htemp[i]=htemp[i].replace("Spinor","SpinorBar").replace("sW","sbarW") if(i>0) : isp=i if(irs>0 and isp >0) : htemp[irs],htemp[isp] = htemp[isp],htemp[irs] # fermion case else : htemp2 = header.split(",") # which fermions to exchange if(len(fIndex)==2) : isp = (fIndex[0],) ibar = (fIndex[1],) else : if(ifunction==1) : isp = (fIndex[2],) ibar = (fIndex[3],) elif(ifunction==2) : isp = (fIndex[0],) ibar = (fIndex[1],) elif(ifunction==3) : isp = (fIndex[0],fIndex[2]) ibar = (fIndex[1],fIndex[3]) # wavefunctions for i in range(0,len(waves)) : if(waves[i].find("Spinor")<0) : waveNew.append(waves[i]) continue if(waves[i].find("Bar")>0) : found=False for itest in range(0,len(ibar)) : if(waves[i].find("sbarW%s"%ibar[itest])>=0) : waveNew.append(waves[i].replace("Bar","").replace("bar","")) found=True break if(not found) : waveNew.append(waves[i]) else : found=False for itest in range(0,len(isp)) : if(waves[i].find("sW%s"%isp[itest])>=0) : waveNew.append(waves[i].replace("Spinor","SpinorBar").replace(" s"," sbar")) found=True break if(not found) : waveNew.append(waves[i]) # momenta definitions for i in range(0,len(momenta)) : if(momenta[i][0] and momenta[i][1]!="") : if(momenta[i][1].find("barW")>0) : found = False for itest in range(0,len(ibar)) : if(momenta[i][1].find("barW%s"%ibar[itest])>=0) : momentastring+=momenta[i][1].replace("barW","W")+"\n " found=True break if(not found) : momentastring+=momenta[i][1]+"\n " elif(momenta[i][1].find("sW")>0) : found=False for itest in range(0,len(isp)) : if(momenta[i][1].find("sW%s"%isp[itest])>=0) : momentastring+=momenta[i][1].replace("sW","sbarW")+"\n " found=True break if(not found) : momentastring+=momenta[i][1]+"\n " else : momentastring+=momenta[i][1]+"\n " # header for i in range(0,len(htemp)) : if(htemp[i].find("Spinor")<0) : continue if(htemp[i].find("Bar")>0) : if(i==0) : htemp[i] =htemp [i].replace("Bar","") htemp2[i]=htemp2[i].replace("Bar","") continue for itest in range(0,len(ibar)) : if(htemp[i].find("sbarW%s"%ibar[itest])>=0) : htemp[i] =htemp [i].replace("Bar","").replace("sbarW","sW") htemp2[i]=htemp2[i].replace("Bar","").replace("sbarW%s"%ibar[itest],"sW%s"%isp[itest]) break else : if(i==0) : htemp [i]=htemp [i].replace("Spinor","SpinorBar") htemp2[i]=htemp2[i].replace("Spinor","SpinorBar") continue for itest in range(0,len(isp)) : if(htemp[i].find("sW%s"%isp[itest])>=0) : htemp [i]=htemp [i].replace("Spinor","SpinorBar").replace("sW","sbarW") htemp2[i]=htemp2[i].replace("Spinor","SpinorBar").replace("sW%s"%isp[itest],"sbarW%s"%ibar[itest]) break # header for transposed function hnew = ','.join(htemp) hnew = hnew.replace("virtual ","").replace("=-GeV","") if(not RS) : theader = ','.join(htemp2) theader = theader.replace("virtual ","").replace("=-GeV","") if(len(result)==2) : hnew =hnew .replace("evaluate","evaluateT") theader=theader.replace("evaluate","evaluateT") else : hnew =hnew .replace("evaluate","evaluateT%s" % ifunction) theader=theader.replace("evaluate","evaluateT%s" % ifunction) if(iloc not in fIndex) : theader = headerReplace(theader) else : theader = headerReplace(h2).replace("evaluateN","evaluateT") headers.append(theader) newHeader += hnew +";\n" else : newHeader += hnew fnew = evaluateTemplate.format(decl=hnew,momenta=momentastring,defns=defString, waves="\n ".join(waveNew),symbols='\n '.join(symboldefs), couplings="\n ".join(localCouplings), result=result[ifunction],swap=sorder) function +="\n" + fnew if(FM and not RS) : if(len(result)==2) : if(iloc!=fIndex[1]) : fi=1 stype="sbar" else : fi=0 stype="s" header = vTemplateT.format(header=header.replace("Energy2,","Energy2 q2,"), normal=headerReplace(h2), transpose=theader,type=stype, iloc=fIndex[fi],id=vertex.particles[fIndex[fi]-1].pdg_code) \ +newHeader+h2.replace("virtual","") else : sorder = swapOrderFFFF(vertex,iloc,fIndex) header = vTemplate4.format(header=header.replace("Energy2,","Energy2 q2,"), iloc1=fIndex[1],iloc2=fIndex[3],swap=sorder, id1=vertex.particles[fIndex[1]-1].pdg_code, id2=vertex.particles[fIndex[3]-1].pdg_code, cf=py2cpp(cf)[0], res1=headerReplace(h2).replace("W",""), res2=headers[0].replace("W",""), res3=headers[1].replace("W",""), res4=headers[2].replace("W",""))\ +newHeader+h2.replace("virtual","") else : header=header + ";\n" + newHeader return (header,function) evaluateMultiple = """\ {decl} {{ {code} }} """ def multipleEvaluate(vertex,spin,defns) : if(spin==1) : name="scaW" elif(spin==3) : name="vW" else : - print 'Evaluate multiple problem',spin + print('Evaluate multiple problem',spin) raise SkipThisVertex() if(len(defns)==0) : return ("","") header = defns[0] ccdefn = header.replace("=-GeV","").replace("virtual ","").replace("Energy2","Energy2 q2") code="" spins=vertex.lorentz[0].spins iloc=1 waves=[] for i in range(0,len(spins)) : if(spins[i]==spin) : waves.append("%s%s" %(name,i+1)) for i in range(0,len(spins)) : if(spins[i]==spin) : if(iloc==1) : el="" else : el="else " call = headerReplace(defns[iloc]) if(iloc!=1) : call = call.replace(waves[0],waves[iloc-1]) pdgid = vertex.particles[i].pdg_code code += " %sif(out->id()==%s) return %s;\n" % (el,pdgid,call) iloc+=1 code+=" else assert(false);\n" return (header,evaluateMultiple.format(decl=ccdefn,code=code)) diff --git a/Models/Feynrules/python/ufo2peg/helpers.py b/Models/Feynrules/python/ufo2peg/helpers.py --- a/Models/Feynrules/python/ufo2peg/helpers.py +++ b/Models/Feynrules/python/ufo2peg/helpers.py @@ -1,266 +1,312 @@ +from __future__ import print_function from string import Template from os import path -import sys,cmath +import sys,cmath,glob import re """ Helper functions for the Herwig Feynrules converter """ class CheckUnique: """Uniqueness checker. An object of this class remembers the value it was called with first. Any subsequent call to it will only succeed if the same value is passed again. For example, >>> f = CheckUnique() >>> f(5) >>> f(5) >>> f(4) Traceback (most recent call last): ... AssertionError """ def __init__(self): self.val = None def __call__(self,val): """Store value on first call, then compare.""" if self.val is None: self.val = val else: assert( val == self.val ) def is_number(s): """Check if a value is a number.""" try: float(s) except ValueError: return False return True def getTemplate(name): """Create a python string template from a file.""" templatename = '{name}.template'.format(name=name) # assumes the template files sit next to this script moduledir = path.dirname(path.abspath(__file__)) templatepath = path.join(moduledir,templatename) with open(templatepath, 'r') as f: templateText = f.read() return Template( templateText ) def writeFile(filename, text): """Write text to a filename.""" with open(filename,'w') as f: f.write(text) def coupling_orders(vertex, coupling, defns): # if more than one take QCD over QED and then lowest order in QED if type(coupling) is list: - print 'not sure this happens' + print('not sure this happens') quit() qed = 0 qcd = 0 for coup in coupling : qed1 = coup.order.get('QED',0) qcd1 = coup.order.get('QCD',0) if qcd1 != 0: if qcd == 0 or (qcd1 != 0 and qcd1 < qcd): qcd=qcd1 qed=qed1 else: if qed == 0 or (qed1 != 0 and qed1 < qed): qed=qed1 else: output={} for ctype in defns : output[ctype]=coupling.order.get(ctype,0) return output def def_from_model(FR,s): """Return a C++ line that defines parameter s as coming from the model file.""" if("hw_kine" in s) :return "" stype = typemap(getattr(FR.parameters,s).type) return '{t} {s} = model_->{s}();'.format(t=stype,s=s) _typemap = {'complex':'Complex', 'real':'double'} def typemap(s): return _typemap[s] def add_brackets(expr, syms): result = expr for s in syms: pattern = r'({symb})(\W|$)'.format(symb=s) result = re.sub(pattern, r'\1()\2', result) return result def banner(): return """\ =============================================================================================================== ______ ______ _ __ _ _ _ | ___| | ___ \ | | / /| | | | (_) _ _ | |_ ___ _ _ _ __ | |_/ /_ _ | | ___ ___ / / | |_| | ___ _ __ __ __ _ __ _ _| |_ _| |_ | _|/ _ \| | | || \_ \ | /| | | || | / _ \/ __| / / | _ | / _ \| \__|\ \ /\ / /| | / _` ||_ _||_ _| | | | __/| |_| || | | || |\ \| |_| || || __/\__ \ / / | | | || __/| | \ V V / | || (_| | |_| |_| \_| \___| \__, ||_| |_|\_| \_|\__,_||_| \___||___//_/ \_| |_/ \___||_| \_/\_/ |_| \__, | __/ | __/ | |___/ |___/ =============================================================================================================== generating model/vertex/.model/.in files please be patient! =============================================================================================================== """ #################### ??? ####################### # function that replaces alphaS (aS)-dependent variables # with their explicit form which also contains strongCoupling def aStoStrongCoup(stringin, paramstoreplace, paramstoreplace_expressions): #print stringin for xx in range(0,len(paramstoreplace)): #print paramstoreplace[xx], paramstoreplace_expressions[xx] stringout = stringin.replace(paramstoreplace[xx], '(' + PyMathToThePEGMath(paramstoreplace_expressions[xx],allparams) + ')') stringout = stringout.replace('aS', '(sqr(strongCoupling(q2))/(4.0*Constants::pi))') #print 'resulting string', stringout return stringout # function that replaces alphaEW (aEW)-dependent variables # with their explicit form which also contains weakCoupling def aEWtoWeakCoup(stringin, paramstoreplace, paramstoreplace_expressions): #print stringin for xx in range(0,len(paramstoreplace)): #print paramstoreplace[xx], paramstoreplace_expressions[xx] stringout = stringin.replace(paramstoreplace[xx], '(' + PyMathToThePEGMath(paramstoreplace_expressions[xx],allparams) + ')') stringout = stringout.replace('aEWM1', '(1/(sqr(electroMagneticCoupling(q2))/(4.0*Constants::pi)))') #print 'resulting string', stringout return stringout if __name__ == "__main__": import doctest doctest.testmod() if False: # Check if the Vertex is self-conjugate or not pdgcode = [0,0,0,0] notsmvertex = False vhasw = 0 vhasz = 0 vhasf = 0 vhasg = 0 vhash = 0 vhasp = 0 # print 'printing particles in vertex' for i in range(len(v.particles)): # print v.particles[i].pdg_code pdgcode[i] = v.particles[i].pdg_code if pdgcode[i] == 23: vhasz += 1 if pdgcode[i] == 22: vhasp += 1 if pdgcode[i] == 25: vhash += 1 if pdgcode[i] == 21: vhasg += 1 if pdgcode[i] == 24: vhasw += 1 if abs(pdgcode[i]) < 7 or (abs(pdgcode[i]) > 10 and abs(pdgcode[i]) < 17): vhasf += 1 if pdgcode[i] not in SMPARTICLES: notsmvertex = True # treat replacement of SM vertices with BSM vertices? if notsmvertex == False: if( (vhasf == 2 and vhasz == 1) or (vhasf == 2 and vhasw == 1) or (vhasf == 2 and vhash == 1) or (vhasf == 2 and vhasg == 1) or (vhasf == 2 and vhasp == 0) or (vhasg == 3) or (vhasg == 4) or (vhasw == 2 and vhash == 1) or (vhasw == 3) or (vhasw == 4) or (vhash == 1 and vhasg == 2) or (vhash == 1 and vhasp == 2)): #print 'VERTEX INCLUDED IN STANDARD MODEL!' v.include = 0 notincluded += 1 #continue selfconjugate = 0 for j in range(len(pdgcode)): for k in range(len(pdgcode)): if j != k and j != 0 and abs(pdgcode[j]) == abs(pdgcode[k]): selfconjugate = 1 #print 'self-conjugate vertex' # print pdgcode[j] # if the Vertex is not self-conjugate, then add the conjugate vertex # automatically scfac = [1,1,1,1] if selfconjugate == 0: #first find the self-conjugate particles for u in range(len(v.particles)): if v.particles[u].selfconjugate == 0: scfac[u] = -1 # print 'particle ', v.particles[u].pdg_code, ' found not to be self-conjugate' if selfconjugate == 0: plistarray[1] += str(scfac[1] * v.particles[1].pdg_code) + ',' + str(scfac[0] * v.particles[0].pdg_code) + ',' + str(scfac[2] * v.particles[2].pdg_code) if len(v.particles) is 4: plistarray[1] += ',' + str(scfac[3] * v.particles[3].pdg_code) #print 'Conjugate vertex:', plistarray[1] class SkipThisVertex(Exception): pass def extractAntiSymmetricIndices(instring,funct) : terms = instring.strip(funct).strip(")").split(",") sign=1. for iy in range(0,len(terms)) : for ix in range(-1,-len(terms)+iy,-1) : swap = False if(len(terms[ix])==1 and len(terms[ix-1])==1) : swap = int(terms[ix]) items + line=line.replace("iteritems","items") + # fix imports + if("import" in line) : + for val in names : + if("import %s" %val in line) : + line=line.replace("import %s" %val, + "from . import %s" %val) + if(val in tNames) : tNames.remove(val) + if("from %s" %val in line) : + line=line.replace("from %s" %val, + "from .%s" %val) + # add brackets to print statements + if("print" in line) : + if line.strip()[0:5] == "print" : + line=line.strip("\n").replace("print","print(")+")\n" + output += line + line=inFile.readline() + inFile.close() + if(isInit) : + if "__init__" in tNames : tNames.remove("__init__") + temp="" + for val in tNames : + temp+= "from . import %s\n" % val + output = temp+output + with open(fName,'w') as dest: + dest.write(output) diff --git a/Models/Feynrules/python/ufo2peg/lorentzparser.py b/Models/Feynrules/python/ufo2peg/lorentzparser.py --- a/Models/Feynrules/python/ufo2peg/lorentzparser.py +++ b/Models/Feynrules/python/ufo2peg/lorentzparser.py @@ -1,109 +1,110 @@ """ AST visitor class to extract left / right couplings from Lorentz structures """ import ast def parse_lorentz(expr): result = LorentzParser().parse(expr) return result class LorentzParserException(Exception): """Base class for all LorentzParser exceptions.""" def cleaner(text): """Convert LorentzParser output to a (left,right) tuple of prefactors""" if 'm' in text and 'p' in text: raise LorentzParserException('Both projections in one term: %s' % text) if text in [['g'],['i']]: return (1,1) else: try: text.remove('g') except ValueError: pass try: text.remove('i') except ValueError: pass def helper(text,char): text.remove(char) try: return int(''.join(text)) except ValueError: text.append('1') return int(''.join(text)) left, right = 0, 0 if 'm' in text: left = helper(text,'m') elif 'p' in text: right = helper(text,'p') elif 'y' in text: val = helper(text,'y') left = -val right = val return (left,right) class LorentzParser(ast.NodeVisitor): """Convert UFO Lorentz structures to left / right couplings This parser is very sensitive to changes in the way UFO Lorentz structures are written out. """ def parse(self,expression): + from functools import reduce self.result = [[]] tree = ast.parse(expression) - #print '---\n',ast.dump(tree),'\n---' + #print ('---\n',ast.dump(tree),'\n---') cleaned = map(cleaner,self.visit(tree)) return reduce(lambda a,b: (a[0]+b[0], a[1]+b[1]), cleaned) ################################## def newterm(self): self.result.append([]) def add(self,a): self.result[-1].append(a) ################################## def visit_Module(self,node): self.generic_visit(node) return self.result def generic_visit(self,node): typename = type(node).__name__ harmless = ['Module','Expr','BinOp','Mult'] if typename not in harmless: raise LorentzParserException('Missing implementation for %s' % typename) super(LorentzParser,self).generic_visit(node) def visit_Call(self,node): subs = { 'Gamma' : 'g', 'Gamma5' : 'y', 'Identity' : 'i', 'ProjM' : 'm', 'ProjP' : 'p', } try: self.add(subs[node.func.id]) except KeyError: err = "Unknown lorentz component %s" % node.func.id raise LorentzParserException(err) def visit_Num(self,node): self.add(str(node.n)) def visit_Sub(self,node): self.newterm() self.add('-') def visit_Add(self,node): self.newterm() diff --git a/Models/Feynrules/python/ufo2peg/particles.py b/Models/Feynrules/python/ufo2peg/particles.py --- a/Models/Feynrules/python/ufo2peg/particles.py +++ b/Models/Feynrules/python/ufo2peg/particles.py @@ -1,243 +1,243 @@ +from __future__ import print_function from string import Template - # ignore these, they're in Hw++ already # TODO reset Hw++ settings instead SMPARTICLES = { 1:'d', 2:'u', 3:'s', 4:'c', 5:'b', 6:'t', # think about this one later 11:'e-', 12:'nu_e', 13:'mu-', 14:'nu_mu', 15:'tau-', 16:'nu_tau', 21:'g', 22:'gamma', 23:'Z0', 24:'W+', -1:'dbar', -2:'ubar', -3:'sbar', -4:'cbar', -5:'bbar', -6:'tbar', -11:'e+', -12:'nu_ebar', -13:'mu+', -14:'nu_mubar', -15:'tau+', -16:'nu_taubar', -24:'W-', } particleT = Template( """ create ThePEG::ParticleData $name # values set to 999999 are recalculated later from other model parameters setup $name $pdg_code $name $mass $width $wcut $ctau $charge $color $spin 0 """ ) class ParticleConverter: 'Convert a FR particle to extract the information ThePEG needs.' def __init__(self,p,parmsubs,modelparameters): self.name = p.name self.pdg_code = p.pdg_code self.spin = p.spin self.color = p.color if self.color == 1: self.color = 0 self.selfconjugate = 0 self.mass = parmsubs[str(p.mass)] if type(self.mass) == str: value = modelparameters[self.mass] try: value = value.real except: pass newname = '%s_ABS' % self.mass self.mass = '${%s}' % newname modelparameters[newname] = abs(value) else: try: self.mass = self.mass.real except: pass self.mass = 999999. # abs(self.mass) hbarc = 197.3269631e-15 # GeV mm (I hope ;-) ) self.width = parmsubs[str(p.width)] if type(self.width) == str: width = modelparameters[self.width] ctau = (hbarc / width) if width != 0 else 0 newname = '%s_CTAU' % self.width self.ctau = '${%s}' % newname modelparameters[newname] = ctau wcut = 10 * width newname = '%s_WCUT' % self.width self.wcut = '${%s}' % newname modelparameters[newname] = wcut self.width = '${%s}' % self.width else: self.ctau = 999999. # (hbarc / self.width) if self.width != 0 else 0 self.wcut = 999999. #10.0 * self.width self.width = 999999. # was blank line before self.charge = int(3 * p.charge) def subs(self): return self.__dict__ def check_effective_vertex(FR,p,ig) : for vertex in FR.all_vertices: if(len(vertex.particles) != 3) : continue if(p not in vertex.particles ) : continue ng=0 for part in vertex.particles : if(part.pdg_code==ig) : ng+=1 if(ng==2) : return False return True def thepeg_particles(FR,parameters,modelname,modelparameters,forbidden_names,hw_higgs): plist = [] antis = {} names = [] splittings = [] done_splitting_QCD=[] done_splitting_QED=[] for p in FR.all_particles: if p.spin == -1: continue gsnames = ['goldstone', 'goldstoneboson', 'GoldstoneBoson'] def gstest(name): try: return getattr(p,name) except AttributeError: return False if any(map(gstest, gsnames)): continue if p.pdg_code in SMPARTICLES: continue if p.pdg_code == 25 and not hw_higgs: plist.append( """ set /Herwig/Particles/h0:Mass_generator NULL set /Herwig/Particles/h0:Width_generator NULL rm /Herwig/Masses/HiggsMass rm /Herwig/Widths/hWidth """ ) if p.name in forbidden_names: - print 'RENAMING PARTICLE',p.name,'as ',p.name+'_UFO' + print('RENAMING PARTICLE',p.name,'as ',p.name+'_UFO') p.name +="_UFO" subs = ParticleConverter(p,parameters,modelparameters).subs() if not (p.pdg_code == 25 and hw_higgs) : plist.append( particleT.substitute(subs) ) pdg, name = subs['pdg_code'], subs['name'] names.append(name) if -pdg in antis: plist.append( 'makeanti %s %s\n' % (antis[-pdg], name) ) elif not (p.pdg_code == 25 and hw_higgs) : plist.append( 'insert /Herwig/NewPhysics/NewModel:DecayParticles 0 %s\n' % name ) plist.append( 'insert /Herwig/Shower/ShowerHandler:DecayInShower 0 %s # %s' % (abs(pdg), name) ) antis[pdg] = name selfconjugate = 1 class SkipMe(Exception): pass def spin_name(s): spins = { 1 : 'Zero', 2 : 'Half', 3 : 'One' } if s not in spins: raise SkipMe() else: return spins[s] def col_name(c): cols = { 3 : 'Triplet', 6 : 'Sextet', 8 : 'Octet' } return cols[c] try: # QCD splitting functions if p.color in [3,6,8] and abs(pdg) not in done_splitting_QCD: # which colors? done_splitting_QCD.append(abs(pdg)) splitname = '{name}SplitFnQCD'.format(name=p.name) sudname = '{name}SudakovQCD'.format(name=p.name) splittings.append( """ create Herwig::{s}{s}OneSplitFn {name} set {name}:InteractionType QCD set {name}:ColourStructure {c}{c}Octet cp /Herwig/Shower/SudakovCommon {sudname} set {sudname}:SplittingFunction {name} do /Herwig/Shower/SplittingGenerator:AddFinalSplitting {pname}->{pname},g; {sudname} """.format(s=spin_name(p.spin), name=splitname, c=col_name(p.color), pname=p.name, sudname=sudname) ) except SkipMe: pass # QED splitting functions try: if p.charge != 0 and abs(pdg) not in done_splitting_QED: done_splitting_QED.append(abs(pdg)) splitname = '{name}SplitFnQED'.format(name=p.name) sudname = '{name}SudakovQED'.format(name=p.name) splittings.append( """ create Herwig::{s}{s}OneSplitFn {name} set {name}:InteractionType QED set {name}:ColourStructure ChargedChargedNeutral cp /Herwig/Shower/SudakovCommon {sudname} set {sudname}:SplittingFunction {name} set {sudname}:Alpha /Herwig/Shower/AlphaQED do /Herwig/Shower/SplittingGenerator:AddFinalSplitting {pname}->{pname},gamma; {sudname} """.format(s=spin_name(p.spin), name=splitname, pname=p.name, sudname=sudname) ) except SkipMe: pass if p.charge == 0 and p.color == 1 and p.spin == 1 and not (p.pdg_code == 25 and hw_higgs) : if(check_effective_vertex(FR,p,21)) : plist.append( """ insert /Herwig/{ModelName}/V_GenericHGG:Bosons 0 {pname} """.format(pname=p.name, ModelName=modelname) ) if(check_effective_vertex(FR,p,22)) : plist.append( """ insert /Herwig/{ModelName}/V_GenericHPP:Bosons 0 {pname} """.format(pname=p.name, ModelName=modelname) ) return ''.join(plist)+''.join(splittings), names diff --git a/Models/Feynrules/python/ufo2peg/vertices.py b/Models/Feynrules/python/ufo2peg/vertices.py --- a/Models/Feynrules/python/ufo2peg/vertices.py +++ b/Models/Feynrules/python/ufo2peg/vertices.py @@ -1,894 +1,889 @@ +from __future__ import print_function import sys,pprint from .helpers import CheckUnique,getTemplate,writeFile,coupling_orders,def_from_model from .converter import py2cpp from .collapse_vertices import collapse_vertices from .check_lorentz import tensorCouplings,VVVordering,lorentzScalar,\ processTensorCouplings,scalarCouplings,processScalarCouplings,scalarVectorCouplings,\ processScalarVectorCouplings,vectorCouplings,processVectorCouplings,fermionCouplings,processFermionCouplings,\ RSCouplings from .general_lorentz import convertLorentz,generateEvaluateFunction,multipleEvaluate from .helpers import SkipThisVertex,extractAntiSymmetricIndices,isGoldstone # prefactors for vertices lfactors = { 'FFV' : '-complex(0,1)', # ok 'VVV' : 'complex(0,1)', # changed to fix ttbar 'VVVS' : 'complex(0,1)', # should be as VVV 'VVVV' : 'complex(0,1)', 'VVS' : '-complex(0,1)', 'VSS' : '-complex(0,1)', # changed to minus to fix dL ->x1 W- d 'SSS' : '-complex(0,1)', # ok 'VVSS' : '-complex(0,1)', # ok 'VVT' : 'complex(0,2)', 'VVVT' : '-complex(0,2)', 'SSSS' : '-complex(0,1)', # ok 'FFS' : '-complex(0,1)', # ok 'SST' : 'complex(0,2)', 'FFT' : '-complex(0,8)', 'FFVT' : '-complex(0,4)', 'RFS' : 'complex(0,1)', 'RFV' : 'complex(0,1)', } genericVertices=['FFFF','FFVV','FFSS','FFVS','VVVV','VVVT','FFVT', 'RFVV','RFVS','RFSS','SSST','VVST','FFST'] skipped5Point=False # template for the header for a vertex VERTEXHEADER = """\ #include "ThePEG/Helicity/Vertex/{spindirectory}/{lorentztag}Vertex.h" """ GENERALVERTEXHEADER = """\ #include "ThePEG/Helicity/Vertex/Abstract{lorentztag}Vertex.h" """ # template for the implmentation for a vertex VERTEXCLASS = getTemplate('Vertex_class') GENERALVERTEXCLASS = getTemplate('GeneralVertex_class') # template for the .cc file for vertices VERTEX = getTemplate('Vertex.cc') vertexline = """\ create Herwig::FRModel{classname} /Herwig/{modelname}/{classname} insert {modelname}:ExtraVertices 0 /Herwig/{modelname}/{classname} """ def get_lorentztag(spin): """Produce a ThePEG spin tag for the given numeric FR spins.""" spins = { 1 : 'S', 2 : 'F', 3 : 'V', 4 : 'R', 5 : 'T', -1 : 'U' } result=[] for i in range(0,len(spin)) : result.append((spins[spin[i]],i+1)) - def spinsort(a,b): - """Helper function for ThePEG's FVST spin tag ordering.""" - (a1,a2) = a - (b1,b2) = b - if a1 == b1: return 0 - for letter in 'URFVST': - if a1 == letter: return -1 - if b1 == letter: return 1 + def spinsort(inVal): + output=0 + vals=['U','R','F','V','S','T'] + for val in vals: + if inVal==val : break + output+=1 + return output - result = sorted(result, cmp=spinsort) + result = sorted(result, key=spinsort) order=[] output="" for i in range(0,len(result)) : (a,b) = result[i] order.append(b) output+=a return (output,order) def unique_lorentztag(vertex): """Check and return the Lorentz tag of the vertex.""" unique = CheckUnique() for l in vertex.lorentz: (lorentztag,order) = get_lorentztag(l.spins) unique( lorentztag ) lname = l.name[:len(lorentztag)] if sorted(lorentztag) != sorted(lname): raise Exception("Lorentztags: %s is not %s in %s" % (lorentztag,lname,vertex)) return (lorentztag,order) def colors(vertex) : try: unique = CheckUnique() for pl in vertex.particles_list: struct = [ p.color for p in pl ] unique(struct) except: struct = [ p.color for p in vertex.particles ] pos = colorpositions(struct) L = len(struct) return (L,pos) -def coloursort(a,b) : - if a == b: return 0 - i1=int(a[4]) - i2=int(b[4]) - if(i1==i2) : return 0 - elif(i1id()=={id1} && p2->id()=={id3} && p3->id()=={id2}) || (p1->id()=={id2} && p2->id()=={id1} && p3->id()=={id3}) || (p1->id()=={id3} && p2->id()=={id2} && p3->id()=={id1})) {{ sign *= -1.; }} norm(norm()*sign); """ if(not "p1" in couplingptrs[0]) : couplingptrs[0] += ' p1' if(not "p2" in couplingptrs[1]) : couplingptrs[1] += ' p2' if(not "p3" in couplingptrs[2]) : couplingptrs[2] += ' p3' if("Bar" not in vertex.color[0]) : order,sign = extractAntiSymmetricIndices(vertex.color[0],"Epsilon(") else : order,sign = extractAntiSymmetricIndices(vertex.color[0],"EpsilonBar(") subs = {"id1" : vertex.particles[int(order[0])-1].pdg_code, "id2" : vertex.particles[int(order[1])-1].pdg_code, "id3" : vertex.particles[int(order[2])-1].pdg_code, "epssign" : sign } append+=EPSSIGN.format(**subs) return couplingptrs,append class VertexConverter: 'Convert the vertices in a FR model to extract the information ThePEG needs.' def __init__(self,model,parmsubs,defns) : 'Initialize the parameters' self.verbose=False self.vertex_skipped=False self.ignore_skipped=False self.model=model self.all_vertices= [] self.vertex_names = {} self.modelname="" self.no_generic_loop_vertices = False self.parmsubs = parmsubs self.couplingDefns = defns self.genericTensors = False self.hw_higgs = False def readArgs(self,args) : 'Extract the relevant command line arguments' self.ignore_skipped = args.ignore_skipped self.verbose = args.verbose self.modelname = args.name self.no_generic_loop_vertices = args.no_generic_loop_vertices self.include_generic = args.include_generic self.genericTensors = args.use_generic_for_tensors self.hw_higgs = args.use_Herwig_Higgs def should_print(self) : 'Check if we should output the results' return not self.vertex_skipped or self.ignore_skipped def convert(self) : 'Convert the vertices' if(self.verbose) : - print 'verbose mode on: printing all vertices' - print '-'*60 + print('verbose mode on: printing all vertices') + print('-'*60) labels = ('vertex', 'particles', 'Lorentz', 'C_L', 'C_R', 'norm') pprint.pprint(labels) # extract the vertices self.all_vertices = self.model.all_vertices # find the SM Higgs boson higgs=None if(self.hw_higgs) : for part in self.model.all_particles: if(part.pdg_code==25) : higgs=part break # convert the vertices vertexclasses, vertexheaders = [], set() ifile=1 icount=0 for vertexnumber,vertex in enumerate(self.all_vertices,1) : # process the vertex (skip,vertexClass,vertexHeader) = \ self.processVertex(vertexnumber,vertex) # check it can be handled if(skip) : continue # check if Higgs and skip if using Hw higgs sector if higgs in vertex.particles : nH = vertex.particles.count(higgs) # skip trilinear and quartic higgs vertices if ( nH == len(vertex.particles) ) : vertex.herwig_skip_vertex = True continue elif (len(vertex.particles)-nH==2) : p=[] for part in vertex.particles : if(part!=higgs) : p.append(part) if(nH==1 and p[0].pdg_code==-p[1].pdg_code and abs(p[0].pdg_code) in [1,2,3,4,5,6,11,13,15,24]) : vertex.herwig_skip_vertex = True continue elif((nH==1 or nH==2) and p[0].pdg_code==p[1].pdg_code and p[0].pdg_code ==23) : vertex.herwig_skip_vertex = True continue elif(nH==2 and p[0].pdg_code==-p[1].pdg_code and abs(p[0].pdg_code)==24) : vertex.herwig_skip_vertex = True continue # add to the list icount +=1 vertexclasses.append(vertexClass) vertexheaders.add(vertexHeader) WRAP = 25 if icount % WRAP == 0 or vertexHeader.find("Abstract")>=0: write_vertex_file({'vertexnumber' : ifile, 'vertexclasses' : '\n'.join(vertexclasses), 'vertexheaders' : ''.join(vertexheaders), 'ModelName' : self.modelname}) vertexclasses = [] vertexheaders = set() icount=0 ifile+=1 # exit if there's vertices we can't handle if not self.should_print(): sys.stderr.write( """ Error: The conversion was unsuccessful, some vertices could not be generated. The new --include-generic option should be able to generate these. Otherwise, if you think the missing vertices are not important and want to go ahead anyway, use --ignore-skipped. Herwig may not give correct results, though. """ ) sys.exit(1) # if still stuff to output it do it if vertexclasses: write_vertex_file({'vertexnumber' : ifile + 1, 'vertexclasses' : '\n'.join(vertexclasses), 'vertexheaders' : ''.join(vertexheaders), 'ModelName' : self.modelname}) - print '='*60 + print('='*60) def setCouplingPtrs(self,lorentztag,qcd,append,prepend) : couplingptrs = [',tcPDPtr']*len(lorentztag) if lorentztag == 'VSS': couplingptrs[1] += ' p2' elif lorentztag == 'FFV': couplingptrs[0] += ' p1' elif (lorentztag == 'VVV' or lorentztag == 'VVVS' or lorentztag == "SSS" or lorentztag == "VVVT" ) \ and (append or prepend ) : couplingptrs[0] += ' p1' couplingptrs[1] += ' p2' couplingptrs[2] += ' p3' elif (lorentztag == 'VVVV' and (qcd < 2 or append)) or\ (lorentztag == "SSSS" and prepend ): couplingptrs[0] += ' p1' couplingptrs[1] += ' p2' couplingptrs[2] += ' p3' couplingptrs[3] += ' p4' return couplingptrs def processVertex(self,vertexnumber,vertex) : global skipped5Point # get the Lorentz tag for the vertex lorentztag,order = unique_lorentztag(vertex) # check if we should skip the vertex vertex.herwig_skip_vertex = checkGhostGoldstoneVertex(lorentztag,vertex) # check the order of the vertex and skip 5 points if(len(lorentztag)>=5) : vertex.herwig_skip_vertex = True if(not skipped5Point) : skipped5Point = True - print "Skipping 5 point vertices which aren\'t used in Herwig7" + print("Skipping 5 point vertices which aren\'t used in Herwig7") if(vertex.herwig_skip_vertex) : return (True,"","") # check if we support this at all if( lorentztag not in lfactors and lorentztag not in genericVertices) : msg = 'Warning: Lorentz structure {tag} ( {ps} ) in {name} ' \ 'is not supported.\n'.format(tag=lorentztag, name=vertex.name, ps=' '.join(map(str,vertex.particles))) sys.stderr.write(msg) vertex.herwig_skip_vertex = True self.vertex_skipped=True return (True,"","") # get the factor for the vertex generic = False try: lf = lfactors[lorentztag] if( self.genericTensors and "T" in lorentztag) : raise KeyError() except KeyError: if(not self.include_generic) : msg = 'Warning: Lorentz structure {tag} ( {ps} ) in {name} ' \ 'is not supported.\n'.format(tag=lorentztag, name=vertex.name, ps=' '.join(map(str,vertex.particles))) sys.stderr.write(msg) vertex.herwig_skip_vertex = True self.vertex_skipped=True return (True,"","") else : lf=1. generic=True # get the ids of the particles at the vertex plistarray = [ ','.join([ str(vertex.particles[o-1].pdg_code) for o in order ]) ] # parse the colour structure for the vertex try: L,pos = colors(vertex) cs,cf = colorfactor(vertex,L,pos,lorentztag) except SkipThisVertex: msg = 'Warning: Color structure for vertex ( {ps} ) in {name} ' \ 'is not supported.\n'.format(tag=lorentztag, name=vertex.name, ps=' '.join(map(str,vertex.particles))) sys.stderr.write(msg) vertex.herwig_skip_vertex = True self.vertex_skipped=True return (True,"","") ### classname classname = 'V_%s' % vertex.name if(not generic) : try : return self.extractGeneric(vertex,order,lorentztag,classname,plistarray,pos,lf,cf,cs) except SkipThisVertex: if(not self.include_generic) : msg = 'Warning: Lorentz structure {tag} ( {ps} ) in {name} ' \ 'is not supported, may have a non-perturbative form.\n'.format(tag=lorentztag, name=vertex.name, ps=' '.join(map(str,vertex.particles))) sys.stderr.write(msg) vertex.herwig_skip_vertex = True self.vertex_skipped=True return (True,"","") else : try : return self.extractGeneral(vertex,order,lorentztag,classname,plistarray,pos,cf,cs) except SkipThisVertex: msg = 'Warning: Lorentz structure {tag} ( {ps} ) in {name} ' \ 'is not supported, may have a non-perturbative form.\n'.format(tag=lorentztag, name=vertex.name, ps=' '.join(map(str,vertex.particles))) sys.stderr.write(msg) vertex.herwig_skip_vertex = True self.vertex_skipped=True return (True,"","") else : try : return self.extractGeneral(vertex,order,lorentztag,classname,plistarray,pos,cf,cs) except SkipThisVertex: msg = 'Warning: Lorentz structure {tag} ( {ps} ) in {name} ' \ 'is not supported, may have a non-perturbative form.\n'.format(tag=lorentztag, name=vertex.name, ps=' '.join(map(str,vertex.particles))) sys.stderr.write(msg) vertex.herwig_skip_vertex = True self.vertex_skipped=True return (True,"","") def extractGeneric(self,vertex,order,lorentztag,classname,plistarray,pos,lf,cf,cs) : classes="" headers="" # identify the maximum colour flow and orders of the couplings maxColour=0 couplingOrders=[] self.vertex_names[vertex.name] = [classname] - for (color_idx,lorentz_idx),coupling in vertex.couplings.iteritems(): + for (color_idx,lorentz_idx),coupling in vertex.couplings.items(): maxColour=max(maxColour,color_idx) orders = coupling_orders(vertex, coupling, self.couplingDefns) if(orders not in couplingOrders) : couplingOrders.append(orders) # loop the order of the couplings iorder = 0 for corder in couplingOrders : iorder +=1 cname=classname if(iorder!=1) : cname= "%s_%s" % (classname,iorder) self.vertex_names[vertex.name].append(cname) header = "" prepend="" append="" all_couplings=[] for ix in range(0,maxColour+1) : all_couplings.append([]) # loop over the colour structures for colour in range(0,maxColour+1) : - for (color_idx,lorentz_idx),coupling in vertex.couplings.iteritems() : + for (color_idx,lorentz_idx),coupling in vertex.couplings.items() : # check colour structure and coupling order if(color_idx!=colour) : continue if(coupling_orders(vertex, coupling, self.couplingDefns)!=corder) : continue # get the prefactor for the lorentz structure L = vertex.lorentz[lorentz_idx] prefactors = calculatePrefactor(lf,cf[color_idx]) # calculate the value of the coupling value = couplingValue(coupling) # handling of the different types of couplings if lorentztag in ['FFS','FFV']: all_couplings[color_idx] = fermionCouplings(value,prefactors,L,all_couplings[color_idx],order) elif 'T' in lorentztag : append, all_couplings[color_idx] = tensorCouplings(vertex,value,prefactors,L,lorentztag,pos, all_couplings[color_idx],order) elif 'R' in lorentztag : all_couplings[color_idx] = RSCouplings(value,prefactors,L,all_couplings[color_idx],order) elif lorentztag == 'VVS' or lorentztag == "VVSS" or lorentztag == "VSS" : all_couplings[color_idx] = scalarVectorCouplings(value,prefactors,L,lorentztag, all_couplings[color_idx],order) elif lorentztag == "SSS" or lorentztag == "SSSS" : prepend, header, all_couplings[color_idx] = scalarCouplings(vertex,value,prefactors,L,lorentztag, all_couplings[color_idx],prepend,header) elif "VVV" in lorentztag : all_couplings[color_idx],append = vectorCouplings(vertex,value,prefactors,L,lorentztag,pos, all_couplings[color_idx],append,corder["QCD"],order) else: raise SkipThisVertex() # final processing of the couplings symbols = set() if(lorentztag in ['FFS','FFV']) : (normcontent,leftcontent,rightcontent,append) = processFermionCouplings(lorentztag,vertex, self.model,self.parmsubs, all_couplings,order) elif('T' in lorentztag) : (leftcontent,rightcontent,normcontent) = processTensorCouplings(lorentztag,vertex,self.model, self.parmsubs,all_couplings,order) elif(lorentztag=="SSS" or lorentztag=="SSSS") : normcontent = processScalarCouplings(self.model,self.parmsubs,all_couplings) elif(lorentztag=="VVS" or lorentztag =="VVSS" or lorentztag=="VSS") : normcontent,append,lorentztag,header,sym = processScalarVectorCouplings(lorentztag,vertex, self.model,self.parmsubs, all_couplings,header,order) symbols |=sym elif("VVV" in lorentztag) : normcontent,append,header =\ processVectorCouplings(lorentztag,vertex,self.model,self.parmsubs,all_couplings,append,header) else : SkipThisVertex() # set the coupling ptrs in the setCoupling call couplingptrs = self.setCouplingPtrs(lorentztag.replace("General",""), corder["QCD"],append != '',prepend != '') ### do we need left/right? if 'FF' in lorentztag and lorentztag != "FFT": #leftcalc = aStoStrongCoup(py2cpp(leftcontent)[0], paramstoreplace_, paramstoreplace_expressions_) #rightcalc = aStoStrongCoup(py2cpp(rightcontent)[0], paramstoreplace_, paramstoreplace_expressions_) leftcalc, sym = py2cpp(leftcontent) symbols |= sym rightcalc, sym = py2cpp(rightcontent) symbols |= sym left = 'left(' + leftcalc + ');' right = 'right(' + rightcalc + ');' else: left = '' right = '' leftcalc = '' rightcalc = '' #normcalc = aStoStrongCoup(py2cpp(normcontent)[0], paramstoreplace_, paramstoreplace_expressions_) normcalc, sym = py2cpp(normcontent) symbols |= sym # UFO is GeV by default if lorentztag in ['VVS','SSS']: normcalc = 'Complex((%s) * GeV / UnitRemoval::E)' % normcalc elif lorentztag in ['GeneralVVS']: normcalc = 'Complex(-(%s) * UnitRemoval::E / GeV )' % normcalc elif lorentztag in ['FFT','VVT', 'SST', 'FFVT', 'VVVT' , 'VVVS' ]: normcalc = 'Complex((%s) / GeV * UnitRemoval::E)' % normcalc norm = 'norm(' + normcalc + ');' # finally special handling for eps tensors if(len(vertex.color)==1 and vertex.color[0].find("Epsilon")>=0) : couplingptrs, append = epsilonSign(vertex,couplingptrs,append) # define unkown symbols from the model symboldefs = [ def_from_model(self.model,s) for s in symbols ] couplingOrder="" - for coupName,coupVal in corder.iteritems() : + for coupName,coupVal in corder.items() : couplingOrder+=" orderInCoupling(CouplingType::%s,%s);\n" %(coupName,coupVal) ### assemble dictionary and fill template subs = { 'lorentztag' : lorentztag, # ok 'classname' : cname, # ok 'symbolrefs' : '\n '.join(symboldefs), 'left' : left, # doesn't always exist in base 'right' : right, # doesn't always exist in base 'norm' : norm, # needs norm, too 'addToPlist' : '\n'.join([ 'addToList(%s);'%s for s in plistarray]), 'parameters' : '', 'couplingOrders' : couplingOrder, 'colourStructure' : cs, 'couplingptrs' : ''.join(couplingptrs), 'spindirectory' : spindirectory(lorentztag), 'ModelName' : self.modelname, 'prepend' : prepend, 'append' : append, 'header' : header } # ok # print info if required if self.verbose: - print '-'*60 + print('-'*60) pprint.pprint(( classname, plistarray, leftcalc, rightcalc, normcalc )) headers+=VERTEXHEADER.format(**subs) classes+=VERTEXCLASS.substitute(subs) return (False,classes,headers) def extractGeneral(self,vertex,order,lorentztag,classname,plistarray,pos,cf,cs) : eps=False classes="" headers="" # check the colour flows, three cases supported either 1 flow or 3 in gggg # or multiple wierd ones in FFFF cidx=-1 gluon4point = (len(pos[8])==4 and vertex.lorentz[0].spins.count(3)==4) FFFF = (len(pos[3])==2 and len(pos[-3])==2 and vertex.lorentz[0].spins.count(2)==4) couplingOrders=[] colours={} - for (color_idx,lorentz_idx),coupling in vertex.couplings.iteritems() : + for (color_idx,lorentz_idx),coupling in vertex.couplings.items() : orders = coupling_orders(vertex, coupling, self.couplingDefns) if(orders not in couplingOrders) : couplingOrders.append(orders) if(gluon4point) : color = vertex.color[color_idx] f = color.split("*") (o1,s1) = extractAntiSymmetricIndices(f[0],"f(") (o2,s2) = extractAntiSymmetricIndices(f[1],"f(") if(o2[0]1 and i!=2) : mult[i] = [] for i in range(0,imax) : (evalHeader,evalCC) = generateEvaluateFunction(self.model,vertex,i,values,defns[i],vertexEval[i],cfactor,order) if(i!=0 and spins[i-1] in mult) : if(len(mult[spins[i-1]])==0) : mult[spins[i-1]].append(evalHeader) evalHeader=evalHeader.replace("evaluate(","evaluate%s(" % i) evalCC =evalCC .replace("evaluate(","evaluate%s(" % i) mult[spins[i-1]].append(evalHeader) header+=" "+evalHeader+";\n" impls+=evalCC # combine the multiple defn if needed - for (key,val) in mult.iteritems() : + for (key,val) in mult.items() : (evalHeader,evalCC) = multipleEvaluate(vertex,key,val) if(evalHeader!="") : header += " "+evalHeader+";\n" if(evalCC!="") : impls += evalCC impls=impls.replace("evaluate", "FRModel%s::evaluate" % cname) couplingOrder="" - for coupName,coupVal in corder.iteritems() : + for coupName,coupVal in corder.items() : couplingOrder+=" orderInCoupling(CouplingType::%s,%s);\n" %(coupName,coupVal) ### assemble dictionary and fill template subs = { 'lorentztag' : lorentztag, 'classname' : cname, 'addToPlist' : '\n'.join([ 'addToList(%s);'%s for s in plistarray]), 'ModelName' : self.modelname, 'couplingOrders' : couplingOrder, 'colourStructure' : cstruct, 'evaldefs' : header, 'evalimpls' : impls} newHeader = GENERALVERTEXHEADER.format(**subs) if(eps) : newHeader +="#include \"ThePEG/Helicity/epsilon.h\"\n" headers+=newHeader classes+=GENERALVERTEXCLASS.substitute(subs) return (False,classes,headers) def get_vertices(self,libname): vlist = ['library %s\n' % libname] for v in self.all_vertices: if v.herwig_skip_vertex: continue for name in self.vertex_names[v.name] : vlist.append( vertexline.format(modelname=self.modelname, classname=name) ) if( not self.no_generic_loop_vertices and not self.hw_higgs ) : vlist.append('insert {modelname}:ExtraVertices 0 /Herwig/{modelname}/V_GenericHPP\n'.format(modelname=self.modelname) ) vlist.append('insert {modelname}:ExtraVertices 0 /Herwig/{modelname}/V_GenericHGG\n'.format(modelname=self.modelname) ) # add Hw higgs vertices if required if(self.hw_higgs) : for vertex in ["FFH","HGG","HHH","HPP","HZP","WWHH","WWH"]: vlist.append('insert %s:ExtraVertices 0 /Herwig/Vertices/%sVertex\n' % (self.modelname,vertex) ) return ''.join(vlist) diff --git a/PDF/HwRemDecayer.cc b/PDF/HwRemDecayer.cc --- a/PDF/HwRemDecayer.cc +++ b/PDF/HwRemDecayer.cc @@ -1,1987 +1,2020 @@ // -*- C++ -*- // // HwRemDecayer.cc is a part of Herwig - A multi-purpose Monte Carlo event generator // Copyright (C) 2002-2019 The Herwig Collaboration // // Herwig is licenced under version 3 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/Utilities/DescribeClass.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; 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 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::const_pointer> (theBeam->dataPtr()); 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()); 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() && parton->id()!=ParticleID::g; 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) { 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 || lastID == ParticleID::gamma) ) { newSea = forceSplit(rem, -lastID, oldQ, currentx, lastp, used,content); ColinePtr cl = new_ptr(ColourLine()); - if(newSea->id() > 0) cl-> addColoured(newSea); - else cl->addAntiColoured(newSea); + if(newSea->dataPtr()->coloured()) { + if(newSea->id() > 0) cl-> addColoured(newSea); + else cl->addAntiColoured(newSea); + } // if a secondard scatter finished so return if(!first || content.isValenceQuark(ParticleID::g) ){ partners.push_back(make_pair(parton, newSea)); // add the x and return if(rem==theRems.first) theX.first += currentx; else theX.second += currentx; if(first) content.extract(ParticleID::g); return; } } // otherwise evolve back to valence // final valence splitting PPtr newValence = forceSplit(rem, lastID!=ParticleID::gamma ? ParticleID::g : ParticleID::gamma, 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); return; } else if( lastID == ParticleID::gamma) { partners.push_back(make_pair(parton, newValence)); anti = newValence->hasAntiColour(); ColinePtr newLine(new_ptr(ColourLine())); newLine->addColoured(newValence, anti); 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; } //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); // add the x and return if(rem==theRems.first) theX.first += currentx; else theX.second += currentx; return; } void HwRemDecayer::doSplit(pair partons, pair pdfs, bool first) { if(theRems.first) { ParticleVector children=theRems.first->children(); for(unsigned int ix=0;ixdataPtr()==theRems.first->dataPtr()) theRems.first = dynamic_ptr_cast(children[ix]); } } if(theRems.second) { ParticleVector children=theRems.second->children(); for(unsigned int ix=0;ixdataPtr()==theRems.second->dataPtr()) theRems.second = dynamic_ptr_cast(children[ix]); } } // forced splitting for first parton if(isPartonic(partons.first )) { try { split(partons.first, theContent.first, theRems.first, theUsed.first, theMaps.first, pdfs.first, first); } catch(ShowerHandler::ExtraScatterVeto) { throw ShowerHandler::ExtraScatterVeto(); } } // forced splitting for second parton if(isPartonic(partons.second)) { 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; iychildren().size(); ++iy) pnew[0] += theRems.first->children()[iy]->momentum(); for(unsigned int iy=0; iychildren().size(); ++iy) pnew[1] += theRems.second->children()[iy]->momentum(); Lorentz5Momentum ptotal= theRems.first ->momentum()-partons.first ->momentum()+ theRems.second->momentum()-partons.second->momentum(); // add x limits 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(); theX.second -= partons.second->momentum().rho()/ parent(theRems.second)->momentum().rho(); 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(); //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==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); // There is already a colour line (not the final diquark) if(clnew){ 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()) { //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->coloured()) pold = prev->second; else if(pold->hasAntiColour() != anti) pold = prev->second; } assert(pold); pnew = it->first; 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 { static const double eps=1e-6; // 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; unsigned int ntry=0,maxtry=100; double xExtracted = rem==theRems.first ? theX.first : theX.second; double zmin= lastx/(1.-xExtracted) ,zmax,yy; if(1-lastx ids; + bool qed = child==22; if(child==21||child==22) { ids=content.flav; for(unsigned int ix=0;ix > > partonprob; double ptotal(0.); for(unsigned int iflav=0;iflav prob; for(unsigned int iz=0;izvalue(sqr(max(wz*q,_kinCutoff))) : _alphaEM->value(sqr(max(wz*q,_kinCutoff))); double az=wz*zz*coup; // g -> q qbar - if(ids[iflav]==ParticleID::g) { + if(ids[iflav]==ParticleID::g || ids[iflav]==ParticleID::gamma) { // 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 > >::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(;izsecond.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); Axis axis(p_ref.vect().unit()); if(axis.perp2()>0.) { LorentzRotation rot; double sinth(sqrt(sqr(axis.x())+sqr(axis.y()))); rot.setRotate(acos(axis.z()),Axis(-axis.y()/sinth,axis.x()/sinth,0.)); qt.transform(rot); } // 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 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 progenitors; for(unsigned int ix=0;ixchildren().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 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;ixchildren().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 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() && psystem.mass()>1*MeV && DISRemnantOpt_<2 && ptotal.e() > 0.*GeV ) break; } while(iloc psystem.mass() + diquark->mass()) --iloc; if(iloc==progenitors.size()) { // try touching the lepton in dis as a last restort for(unsigned int ix=0;ixmomentum(); ptotal = psystem + deltap; ptotal.rescaleMass(); psystem.rescaleMass(); ++iloc; } --iloc; if(ptotal.mass() > psystem.mass() + diquark->mass()) { if(DISRemnantOpt_==0||DISRemnantOpt_==2) Throw() << "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;iychildren().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;iychildren().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; //ofstream myfile2("softPt.txt", ios::app ); //myfile2 << pt2/GeV2 <<" "<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; } //parton mass Energy mp; if(quarkPair_){ mp = getParticleData(ParticleID::u)->constituentMass(); }else{ mp = mg_; } //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())); double x1; if(!multiPeriph_){ //now generate according to 1/x x_g1 = xmin * exp(UseRandom::rnd(log(x1max/xmin))); x_g2 = xmin * exp(UseRandom::rnd(log(x2max/xmin))); }else{ if(valOfN_==0) return; double param = (1/(2*valOfN_+1))*initTotRap_; do{ // need 1-x instead of x to get the proper final momenta x1 = UseRandom::rndGauss(gaussWidth_, 1 - (exp(param)-1)/exp(param)); }while(x1 < 0 || x1>=1.0); x_g1 = x1max*x1; x_g2 = x2max*x1; } 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(mp); ig2.setMass(mp); ig1.rescaleEnergy(); ig2.rescaleEnergy(); cmf = ig1 + ig2; //boost vector from cmf to lab Boost boostv(cmf.boostVector()); //outgoing gluons in cmf g1.setMass(mp); g2.setMass(mp); 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(mp) - (pt*pt); if( pz2/GeV2 < 0.0 ){ if(dbg) cerr << "EXCEPTION not enough energy...." << endl; throw ExtraSoftScatterVeto(); } if(!multiPeriph_){ if(UseRandom::rndbool()){ pz = sqrt(pz2); }else pz = -sqrt(pz2); }else{ pz = pz2 > ZERO ? sqrt(pz2) : ZERO; } if(dbg) cerr << "pz1 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 -= g1; r2 -= g2; 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_old(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 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 anti = make_pair(oldrems.first->hasAntiColour(), oldrems.second->hasAntiColour()); ColinePtr cl1 = new_ptr(ColourLine()); ColinePtr cl2 = new_ptr(ColourLine()); // case 2: oldrems.first->colourLine(anti.first) ->addColoured(gluons.second,anti.second); cl2->addColoured(softRems_.first, anti.second); cl2->addColoured(gluons.second, !anti.second); oldrems.first->colourLine(anti.first) ->addColoured(gluons.second,anti.second); oldrems.second->colourLine(anti.second) ->addColoured(gluons.first,anti.first); cl1->addColoured(softRems_.second, anti.first); cl1->addColoured(gluons.first, !anti.first); cl2->addColoured(softRems_.first, anti.second); cl2->addColoured(gluons.second, !anti.second); //reset counter tries = 1; } if(dbg) cerr << "generated " << i << "th soft scatters\n"; } // Solve the reshuffling equation to rescale the remnant momenta double bisectReshuffling(const vector& particles, Energy w, double target = -16., double maxLevel = 80.) { double level = 0; double left = 0; double right = 1; double check = -1.; double xi = -1; while ( level < maxLevel ) { xi = (left+right)*pow(0.5,level+1.); check = 0.; for (vector::const_iterator p = particles.begin(); p != particles.end(); ++p){ check += sqrt(sqr(xi)*((*p)->momentum().vect().mag2())+sqr((*p)->mass()))/w; } if ( check==1. || log10(abs(1.-check)) <= target ) break; left *= 2.; right *= 2.; if ( check >= 1. ) { right -= 1.; ++level; } if ( check < 1. ) { left += 1.; ++level; } } return xi; } LorentzRotation HwRemDecayer::rotate(const LorentzMomentum &p) const { LorentzRotation R; static const double ptcut = 1e-20; Energy2 pt2 = sqr(p.x())+sqr(p.y()); Energy2 pp2 = sqr(p.z())+pt2; double phi, theta; if(pt2 <= pp2*ptcut) { if(p.z() > ZERO) theta = 0.; else theta = Constants::pi; phi = 0.; } else { Energy pp = sqrt(pp2); Energy pt = sqrt(pt2); double ct = p.z()/pp; double cf = p.x()/pt; phi = -acos(cf); theta = acos(ct); } // Rotate first around the z axis to put p in the x-z plane // Then rotate around the Y axis to put p on the z axis R.rotateZ(phi).rotateY(theta); return R; } struct vectorSort{ bool operator() (Lorentz5Momentum i,Lorentz5Momentum j) {return(i.rapidity() < j.rapidity());} } ySort; void HwRemDecayer::doSoftInteractions_multiPeriph(unsigned int N) { if(N == 0) return; int Nmpi = N; for(int j=0;jmaximumCMEnergy()); //double reference = sqr(energy/TeV); // double ladderMult_; // Parametrization of the ladder multiplicity // ladderMult_ = ladderNorm_ * pow( ( reference ) , ladderPower_ ); double avgN = 2.*ladderMult_*log((softRems_.first->momentum() +softRems_.second->momentum()).m()/mg_) + ladderbFactor_; initTotRap_ = abs(softRems_.first->momentum().rapidity()) +abs(softRems_.second->momentum().rapidity()); // Generate the poisson distribution with mean avgN N=UseRandom::rndPoisson(avgN); valOfN_=N; if(N <= 1){ // j--; //TODO: Do we want to make all Nmpi soft MPIs? // Compare to MaxTryMPI for hard mpis. continue; } 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; // The remnants PPtr rem1 = softRems_.first; PPtr rem2 = softRems_.second; // Vector for the ladder particles vector ladderMomenta; // Remnant momenta Lorentz5Momentum r1(softRems_.first->momentum()), r2(softRems_.second->momentum()); Lorentz5Momentum cm =r1+r2; // Initialize partons in the ladder // The toy masses are needed for the correct calculation of the available energy Lorentz5Momentum sumMomenta; for(unsigned int i = 0; i < N; i++) { // choose constituents Energy newMass = ZERO; Energy toyMass; if(i<2){ // u and d have the same mass so its enough to use u toyMass = getParticleData(ParticleID::u)->constituentMass(); } else{ toyMass = getParticleData(ParticleID::g)->constituentMass(); } Lorentz5Momentum cp(ZERO,ZERO,ZERO,newMass,newMass); // dummy container for the momentum that is used for momentum conservation Lorentz5Momentum dummy(ZERO,ZERO,ZERO,toyMass,toyMass); ladderMomenta.push_back(cp); sumMomenta+=dummy; } // Get the beam energy tcPPair beam(generator()->currentEventHandler()->currentCollision()->incoming()); //Lorentz5Momentum P1(beam.first->momentum()), P2(beam.second->momentum()); // Calculate available energy for the partons double x1;//,x2; double param = (1./(valOfN_+1.))*initTotRap_; do{ // Need 1-x instead of x to get the proper final momenta // TODO: physical to use different x's (see comment below) x1 = UseRandom::rndGauss( gaussWidth_ , exp(-param) ); // x2 = UseRandom::rndGauss( gaussWidth_ , exp(-param) ); }while(x1 < 0 || x1>=1.0); // x2 < 0 || x2>=1.0); // Remnants 1 and 2 need to be rescaled later by this amount Lorentz5Momentum ig1 = x1*r1; Lorentz5Momentum ig2 = x1*r2; //TODO: x2*r2 // requires boost of Ladder in x1/x2-dependent // frame. // If the remaining remnant energy is not sufficient for the restmass of the remnants // then continue/try again if ( cm.m() - (ig1+ig2).m() < r1.m()+r2.m() ){ continue; } // The available energy that is used to generate the ladder // sumMomenta is the the sum of rest masses of the ladder partons // the available energy goes all into the kinematics Energy availableEnergy = (ig1+ig2).m() - sumMomenta.m(); // If not enough energy then continue // The available energy has to be larger then the rest mass of the remnants if ( availableEnergy < ZERO ) { // j--; //TODO: Do we want to make all Nmpi soft MPIs? continue; } unsigned int its(0); // Generate the momenta of the partons in the ladder if ( !(doPhaseSpaceGenerationGluons(ladderMomenta,availableEnergy,its)) ){ // j--; //TODO: Do we want to make all Nmpi soft MPIs? continue; } // Add gluon mass and rescale Lorentz5Momentum totalMomPartons; Lorentz5Momentum totalMassLessPartons; // Sort the ladder partons according to their rapidity and then choose which ones will be the quarks sort(ladderMomenta.begin(),ladderMomenta.end(),ySort); int countPartons=0; long quarkID=0; // Choose between up and down quarks int choice = UseRandom::rnd2(1,1); switch (choice) { case 0: quarkID = ParticleID::u; break; case 1: quarkID = ParticleID::d; break; } for (auto &p:ladderMomenta){ totalMomPartons+=p; // Set the mass of the gluons and the two quarks in the ladder if(countPartons==0 || countPartons==int(ladderMomenta.size()-1)){ p.setMass( getParticleData(quarkID)->constituentMass() ); }else{ p.setMass( getParticleData(ParticleID::g)->constituentMass() ); } p.rescaleEnergy(); countPartons++; } // Continue if energy conservation is violated if ( abs(availableEnergy - totalMomPartons.m()) > 1e-8*GeV){ // j--; //TODO: Do we want to make all Nmpi soft MPIs? continue; } // Boost momenta into CM frame const Boost boostv(-totalMomPartons.boostVector()); Lorentz5Momentum totalMomentumAfterBoost; for ( unsigned int i=0; i remnants; rem1->set5Momentum(r1); rem2->set5Momentum(r2); remnants.push_back(rem1); remnants.push_back(rem2); vector reshuffledRemnants; Lorentz5Momentum totalMomentumAll; // Bisect reshuffling for rescaling of remnants double xi_remnants = bisectReshuffling(remnants,remainingEnergy); // Rescale remnants for ( auto &rems: remnants ) { Lorentz5Momentum reshuffledMomentum; reshuffledMomentum = xi_remnants*rems->momentum(); reshuffledMomentum.setMass(getParticleData(softRems_.first->id())->constituentMass()); reshuffledMomentum.rescaleEnergy(); reshuffledMomentum.boost(-boostvR); rems->set5Momentum(reshuffledMomentum); totalMomentumAll+=reshuffledMomentum; } // Then the other particles for ( auto &p:ladderMomenta ) { p.boost(-boostvR); totalMomentumAll+=p; } // sanity check if ( abs(cm.m() - totalMomentumAll.m()) > 1e-8*GeV) { continue; } // sort again sort(ladderMomenta.begin(),ladderMomenta.end(),ySort); // Do the colour connections // Original rems are the ones which are connected to other parts of the event PPair oldRems_ = softRems_; pair anti = make_pair(oldRems_.first->hasAntiColour(), oldRems_.second->hasAntiColour()); // Replace first remnant softRems_.first = addParticle(softRems_.first, softRems_.first->id(), remnants[0]->momentum()); // Connect the old remnant to the new remnant oldRems_.first->colourLine(anti.first)->addColoured(softRems_.first, anti.first); // Replace second remnant softRems_.second = addParticle(softRems_.second, softRems_.second->id(), remnants[1]->momentum()); // This connects the old remnants to the new remnants oldRems_.second->colourLine(anti.second)->addColoured(softRems_.second, anti.second); // Add all partons to the first remnant for the event record vector partons; vector quarks; int count=0; // Choose the colour connections and position of quark antiquark // Choose between R1-q-g..g-qbar-R2 or R1-qbar-g...g-q-R2 // (place of quark antiquarks in the ladder) int quarkPosition = UseRandom::rnd2(1,1); for (auto &p:ladderMomenta){ if(p.mass()==getParticleData(ParticleID::u)->constituentMass()){ if(count==0){ if(quarkPosition==0){ quarks.push_back(addParticle(softRems_.first, quarkID, p)); count++; }else{ quarks.push_back(addParticle(softRems_.first, -quarkID, p)); count++; } }else{ if(quarkPosition==0){ quarks.push_back(addParticle(softRems_.first, -quarkID, p)); }else{ quarks.push_back(addParticle(softRems_.first, quarkID, p)); } } }else{ partons.push_back(addParticle(softRems_.first, ParticleID::g, p)); } softRems_.first = addParticle(softRems_.first, softRems_.first->id(), softRems_.first->momentum()); oldRems_.first->colourLine(anti.first)->addColoured(softRems_.first, anti.first); } // Need to differenciate between the two quark positions, this defines the // colour connections to the new remnants and old remnants if(quarkPosition==0){ // ladder self contained if(partons.size()==0 && quarks.size()>0){ ColinePtr clq = new_ptr(ColourLine()); clq->addColoured(quarks[0]); clq->addAntiColoured(quarks[1]); } ColinePtr clfirst = new_ptr(ColourLine()); ColinePtr cllast = new_ptr(ColourLine()); if(partons.size()>0){ clfirst->addColoured(quarks[0]); clfirst->addAntiColoured(partons[0]); cllast->addAntiColoured(quarks[1]); cllast->addColoured(partons[partons.size()-1]); //now the remaining gluons for (unsigned int i=0; iaddColoured(partons[i]); cl->addAntiColoured(partons[i+1]); } } } else { if(partons.size()==0 && quarks.size()>0){ ColinePtr clq = new_ptr(ColourLine()); clq->addAntiColoured(quarks[0]); clq->addColoured(quarks[1]); } ColinePtr clfirst = new_ptr(ColourLine()); ColinePtr cllast = new_ptr(ColourLine()); if(partons.size()>0){ clfirst->addAntiColoured(quarks[0]); clfirst->addColoured(partons[0]); cllast->addColoured(quarks[1]); cllast->addAntiColoured(partons[partons.size()-1]); //now the remaining gluons for (unsigned int i=0; iaddAntiColoured(partons[i]); cl->addColoured(partons[i+1]); } } }// end colour connection loop }// end Nmpi loop }//end function // Do the phase space generation here is 1 to 1 the same from UA5 model bool HwRemDecayer::doPhaseSpaceGenerationGluons(vector &softGluons, Energy CME, unsigned int &its) const{ // Define the parameters unsigned int _maxtries = 300; double alog = log(CME*CME/GeV2); unsigned int ncl = softGluons.size(); // calculate the slope parameters for the different clusters // outside loop to save time vector mom(ncl); // Sets the slopes depending on the constituent quarks of the cluster for(unsigned int ix=0;ix xi(ncl); vector tempEnergy(ncl); Energy sum1(ZERO); double yy(0.); // We want to make sure that the first Pt is from the // desired pt-distribution. If we select the first pt in the // trial loop we introduce a bias. Energy firstPt=softPt(); while(its < _maxtries) { ++its; Energy sumx = ZERO; Energy sumy = ZERO; unsigned int iterations(0); unsigned int _maxtriesNew = 100; while(iterations < _maxtriesNew) { iterations++; Energy sumxIt = ZERO; Energy sumyIt = ZERO; bool success=false; Energy pTmax=ZERO; for(unsigned int i = 0; ipT2...pTN //2) pT1>pT2>..>pTN //3) flat //4) y dependent //5) Frist then flat int triesPt=0; Energy pt; //Energy ptTest; switch(PtDistribution_) { case 0: //default softPt() pt=softPt(); break; case 1: //pTordered if(i==0){ pt=softPt(); pTmax=pt; }else{ do{ pt=softPt(); }while(pt>pTmax); } break; case 2: //strongly pT ordered if ( i==0 ) { pt=softPt(); pTmax=pt; } else { do { if ( triesPt==20 ) { pt=pTmax; break; } pt=softPt(); triesPt++; } while ( pt>pTmax ); pTmax=pt; } break; case 3: //flat pt = UseRandom::rnd(0.0,(double)(ptmin_/GeV))*GeV; break; case 4: //flat below first pT if ( i==0 ) { pt = firstPt; } else { pt = firstPt * UseRandom::rnd(); } break; case 5: //flat but rising below first pT if ( i==0 ) { pt=firstPt; } else { pt = firstPt * pow(UseRandom::rnd(),1/2); } } Energy2 ptp = pt*pt; if(ptp <= ZERO) pt = - sqrt(-ptp); else pt = sqrt(ptp); // randomize azimuth Energy px,py; //randomize the azimuth, but the last one should cancel all others if(i CME) continue; // randomize the mom vector to get the first and the compensating parton // at all possible positions: long (*p_irnd)(long) = UseRandom::irnd; random_shuffle(mom.begin(),mom.end(),p_irnd); for(unsigned int i = 0; i=1; i--) xi[i+1] = (xi[i]-ximin)/ximax; xi[1] = 1.; yy= log(CME*CME/(mom[0].z()*mom[1].z())); bool suceeded=false; Energy sum2,sum3,sum4; for(unsigned int j = 0; j<10; j++) { sum1 = sum2 = sum3 = sum4 = ZERO; for(unsigned int i = 0; i 100) eps *= 10.; } if(its==_maxtries){ return false; } // throw Exception() << "Can't generate soft underlying event in " // << "UA5Handler::generateCylindricalPS" // << Exception::eventerror; double zz = log(CME/sum1); for(unsigned int i = 0; iDiquark 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(theContent.first.hadron->id()==ParticleID::pomeron&& pomeronStructure_==0) fixColours(theMaps.first, !theanti.first, colourDisrupt); } if(theRems.second) { fixColours(theMaps.second, theanti.second, colourDisrupt); if(theContent.second.hadron->id()==ParticleID::pomeron&& pomeronStructure_==0) 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 || (hadron->data().id()==ParticleID::pomeron && pomeronStructure_==1)) { hc.sign = 1; for(int ix=1;ix<6;++ix) { hc.flav.push_back( ix); hc.flav.push_back(-ix); } } else if(hadron->data().id()==ParticleID::pomeron ) { hc.sign = 1; hc.flav.push_back(ParticleID::g); hc.flav.push_back(ParticleID::g); } else if(hadron->data().id()==ParticleID::reggeon ) { hc.sign = 1; for(int ix=1;ix<3;++ix) { hc.flav.push_back( ix); hc.flav.push_back(-ix); } } hc.pomeronStructure = pomeronStructure_; 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 & particles) const { if(part->children().empty()) particles.push_back(part); else { for(unsigned int ix=0;ixchildren().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 << _alphaS << _alphaEM << DISRemnantOpt_ << maxtrySoft_ << colourDisrupt_ << ladderPower_<< ladderNorm_ << ladderMult_ << ladderbFactor_ << pomeronStructure_ << ounit(mg_,GeV) << ounit(ptmin_,GeV) << ounit(beta_,sqr(InvGeV)) - << allowTop_ << multiPeriph_ << valOfN_ << initTotRap_ << PtDistribution_; + << allowTop_ << allowLeptons_ + << multiPeriph_ << valOfN_ << initTotRap_ << PtDistribution_; } void HwRemDecayer::persistentInput(PersistentIStream & is, int) { is >> iunit(_kinCutoff, GeV) >> _range >> _zbin >> _ybin >> _nbinmax >> _alphaS >> _alphaEM >> DISRemnantOpt_ >> maxtrySoft_ >> colourDisrupt_ >> ladderPower_ >> ladderNorm_ >> ladderMult_ >> ladderbFactor_ >> pomeronStructure_ >> iunit(mg_,GeV) >> iunit(ptmin_,GeV) >> iunit(beta_,sqr(InvGeV)) - >> allowTop_ >> multiPeriph_ >> valOfN_ >> initTotRap_ >> PtDistribution_; + >> allowTop_ >> allowLeptons_ + >> multiPeriph_ >> valOfN_ >> initTotRap_ >> PtDistribution_; } // The following static variable is needed for the type // description system in ThePEG. DescribeClass describeHerwigHwRemDecayer("Herwig::HwRemDecayer", "HwShower.so"); void HwRemDecayer::Init() { static ClassDocumentation documentation ("The HwRemDecayer class decays the remnant for Herwig"); static Parameter 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 interfaceMaxBin ("MaxBin", "Maximum number of z bins", &HwRemDecayer::_nbinmax, 100, 10, 1000, false, false, Interface::limited); static Reference interfaceAlphaS ("AlphaS", "Pointer to object to calculate the strong coupling", &HwRemDecayer::_alphaS, false, false, true, false, false); static Reference interfaceAlphaEM ("AlphaEM", "Pointer to object to calculate the electromagnetic coupling", &HwRemDecayer::_alphaEM, false, false, true, false, false); static Parameter 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 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 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 interfaceMaxTrySoft ("MaxTrySoft", "The maximum number of regeneration attempts for an additional soft scattering", &HwRemDecayer::maxtrySoft_, 10, 0, 100, false, false, Interface::limited); static Parameter 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); static Parameter interaceladderPower ("ladderPower", "The power factor in the ladder parameterization.", &HwRemDecayer::ladderPower_, 1.0, -5.0, 10.0, false, false, Interface::limited); static Parameter interfaceladderNorm ("ladderNorm", "The normalization factor in the ladder parameterization", &HwRemDecayer::ladderNorm_, 1.0, 0.0, 10.0, false, false, Interface::limited); static Parameter interfaceladderMult ("ladderMult", "The ladder multiplicity factor ", &HwRemDecayer::ladderMult_, 1.0, 0.0, 10.0, false, false, Interface::limited); static Parameter interfaceladderbFactor ("ladderbFactor", "The additive factor in the multiperipheral ladder multiplicity.", &HwRemDecayer::ladderbFactor_, 1.0, 0.0, 10.0, false, false, Interface::limited); static Parameter interfacegaussWidth ("gaussWidth", "The gaussian width of the fluctuation of longitudinal momentum fraction.", &HwRemDecayer::gaussWidth_, 0.1, 0.0, 1.0, false, false, Interface::limited); static Switch interfacePomeronStructure ("PomeronStructure", "Option for the treatment of the valance structure of the pomeron", &HwRemDecayer::pomeronStructure_, 0, false, false); static SwitchOption interfacePomeronStructureGluon (interfacePomeronStructure, "Gluon", "Assume the pomeron is a two gluon state", 0); static SwitchOption interfacePomeronStructureQQBar (interfacePomeronStructure, "QQBar", "Assumne the pomeron is q qbar as for the photon," " this option is not recommended and is provide for compatiblity with POMWIG", 1); static Switch interfaceAllowTop ("AllowTop", "Allow top quarks in the hadron", &HwRemDecayer::allowTop_, false, false, false); static SwitchOption interfaceAllowTopNo (interfaceAllowTop, "No", "Don't allow them", false); static SwitchOption interfaceAllowTopYes (interfaceAllowTop, "Yes", "Allow them", true); - + + static Switch interfaceAllowLeptons + ("AllowLeptons", + "Allow charged leptons in the hadron", + &HwRemDecayer::allowLeptons_, false, false, false); + static SwitchOption interfaceAllowLeptonsNo + (interfaceAllowLeptons, + "No", + "Don't allow them", + false); + static SwitchOption interfaceAllowLeptonsYes + (interfaceAllowLeptons, + "Yes", + "Allow them", + true); + static Switch interfaceMultiPeriph ("MultiPeriph", "Use multiperipheral kinematics", &HwRemDecayer::multiPeriph_, false, false, false); static SwitchOption interfaceMultiPeriphNo (interfaceMultiPeriph, "No", "Don't use multiperipheral", false); static SwitchOption interfaceMultiPeriphYes (interfaceMultiPeriph, "Yes", "Use multiperipheral kinematics", true); static Switch interfacePtDistribution ("PtDistribution", "Options for different pT generation methods", &HwRemDecayer::PtDistribution_, 0, false, false); static SwitchOption interfacePtDistributionDefault (interfacePtDistribution, "Default", "Default generation of pT", 0); static SwitchOption interfacePtDistributionOrdered (interfacePtDistribution, "Ordered", "Ordered generation of pT,where the first pT is the hardest", 1); static SwitchOption interfacePtDistributionStronglyOrdered (interfacePtDistribution, "StronglyOrdered", "Strongly ordered generation of pT", 2); static SwitchOption interfacePtDistributionFlat (interfacePtDistribution, "Flat", "Sample from a flat pT distribution", 3); static SwitchOption interfacePtDistributionFlatOrdered (interfacePtDistribution, "FlatOrdered", "First pT normal, then flat", 4); static SwitchOption interfacePtDistributionFlatOrdered2 (interfacePtDistribution, "FlatOrdered2", "First pT normal, then flat but steep", 5); } bool HwRemDecayer::canHandle(tcPDPtr particle, tcPDPtr parton) const { - if(! (StandardQCDPartonMatcher::Check(*parton) || parton->id()==ParticleID::gamma) ) { + if(! (StandardQCDPartonMatcher::Check(*parton) || parton->id()==ParticleID::gamma)) { if(abs(parton->id())==ParticleID::t) { if(!allowTop_) - throw Exception() << "Top is not allow as a parton in the remant handling, please " + throw Exception() << "Top is not allowed as a parton in the remnant handling, please " << "use a PDF which does not contain top for the remnant" << " handling (preferred) or allow top in the remnant using\n" << " set " << fullName() << ":AllowTop Yes\n" << Exception::runerror; } - else + else if(ChargedLeptonMatcher::Check(*parton)) { + if(!allowLeptons_) + throw Exception() << "Charged leptons not allowed as a parton in the remnant handling, please " + << "use a PDF which does not contain top for the remnant" + << " handling or allow leptons in the remnant using\n" + << " set " << fullName() << ":AllowLeptons Yes\n" + << Exception::runerror; + } + else { return false; + } } return HadronMatcher::Check(*particle) || particle->id()==ParticleID::gamma || particle->id()==ParticleID::pomeron || particle->id()==ParticleID::reggeon; } bool HwRemDecayer::isPartonic(tPPtr parton) const { if(parton->parents().empty()) return false; tPPtr parent = parton->parents()[0]; bool partonic = false; for(unsigned int ix=0;ixchildren().size();++ix) { if(dynamic_ptr_cast(parent->children()[ix])) { partonic = true; break; } } return partonic; } diff --git a/PDF/HwRemDecayer.h b/PDF/HwRemDecayer.h --- a/PDF/HwRemDecayer.h +++ b/PDF/HwRemDecayer.h @@ -1,747 +1,753 @@ // -*- C++ -*- // // HwRemDecayer.h is a part of Herwig - A multi-purpose Monte Carlo event generator // Copyright (C) 2002-2019 The Herwig Collaboration // // Herwig is licenced under version 3 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef HERWIG_HwRemDecayer_H #define HERWIG_HwRemDecayer_H // // This is the declaration of the HwRemDecayer class. // #include "ThePEG/PDT/RemnantDecayer.h" #include "ThePEG/Handlers/EventHandler.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/EventRecord/SubProcess.h" #include "ThePEG/PDF/BeamParticleData.h" #include "Herwig/Shower/ShowerAlpha.h" #include "Herwig/PDT/StandardMatchers.h" #include "ThePEG/PDT/StandardMatchers.h" #include "HwRemDecayer.fh" namespace Herwig { using namespace ThePEG; /** * The HwRemDecayer class is responsible for the decay of the remnants. Additional * secondary scatters have to be evolved backwards to a gluon, the * first/hard interaction has to be evolved back to a valence quark. * This is all generated inside this class, * which main methods are then called by the ShowerHandler. * * A simple forced splitting algorithm is used. * This takes the Remnant object produced from the PDF and backward * evolution (hadron - parton) and produce partons with the remaining * flavours and with the correct colour connections. * * The algorithim operates by starting with the parton which enters the hard process. * If this is from the sea there is a forced branching to produce the antiparticle * from a gluon branching. If the parton entering the hard process was a gluon, or * a gluon was produced from the first step of the algorithm, there is then a further * branching back to a valence parton. After these partons have been produced a quark or * diquark is produced to give the remaining valence content of the incoming hadron. * * The forced branching are generated using a scale between QSpac and EmissionRange times * the minimum scale. The energy fractions are then distributed using * \f[\frac{\alpha_S}{2\pi}\frac{P(z)}{z}f(x/z,\tilde{q})\f] * with the massless splitting functions. * * \author Manuel B\"ahr * * @see \ref HwRemDecayerInterfaces "The interfaces" * defined for HwRemDecayer. */ class HwRemDecayer: public RemnantDecayer { public: /** Typedef to store information about colour partners */ typedef vector > PartnerMap; public: /** * The default constructor. */ - HwRemDecayer() : allowTop_(false), multiPeriph_(true), quarkPair_(false), + HwRemDecayer() : allowTop_(false), allowLeptons_(false), + multiPeriph_(true), quarkPair_(false), ptmin_(-1.*GeV), beta_(ZERO), maxtrySoft_(10), colourDisrupt_(1.0), ladderbFactor_(0.0), ladderPower_(-0.08), ladderNorm_(1.0), ladderMult_(1.0), gaussWidth_(0.1), valOfN_(0), initTotRap_(0), _kinCutoff(0.75*GeV), _forcedSplitScale(2.5*GeV), _range(1.1), _zbin(0.05),_ybin(0.), _nbinmax(100), DISRemnantOpt_(0), PtDistribution_(0), pomeronStructure_(0), mg_(ZERO) {} /** @name Virtual functions required by the Decayer class. */ //@{ /** * Check if this decayer can perfom the decay specified by the * given decay mode. * @return true if this decayer can handle the given mode, otherwise false. */ virtual bool accept(const DecayMode &) const { return true; } /** * Return true if this decayer can handle the extraction of the \a * extracted parton from the given \a particle. */ virtual bool canHandle(tcPDPtr particle, tcPDPtr parton) const; /** * Return true if this decayed can extract more than one parton from * a particle. */ virtual bool multiCapable() const { return true; } /** * Perform a decay for a given DecayMode and a given Particle instance. * @param dm the DecayMode describing the decay. * @param p the Particle instance to be decayed. * @param step the step we are working on. * @return a ParticleVector containing the decay products. */ virtual ParticleVector decay(const DecayMode & dm, const Particle & p, Step & step) const; //@} public: /** * struct that is used to catch exceptions which are thrown * due to energy conservation issues of additional soft scatters */ struct ExtraSoftScatterVeto {}; /** @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(); /** * Do several checks and initialization, for remnantdecay inside ShowerHandler. */ void initialize(pair rems, tPPair beam, Step & step, Energy forcedSplitScale); /** * Initialize the soft scattering machinery. * @param ptmin = the pt cutoff used in the UE model * @param beta = slope of the soft pt-spectrum */ void initSoftInteractions(Energy ptmin, InvEnergy2 beta); /** * Perform the acual forced splitting. * @param partons is a pair of ThePEG::Particle pointers which store the final * partons on which the shower ends. * @param pdfs are pointers to the pdf objects for both beams * @param first is a flage wether or not this is the first or a secondary interation */ void doSplit(pair partons, pair pdfs, bool first); /** * Perform the final creation of the diquarks. Set the remnant masses and do * all colour connections. * @param colourDisrupt = variable to control how many "hard" scatters * are colour isolated * @param softInt = parameter for the number of soft scatters */ void finalize(double colourDisrupt=0.0, unsigned int softInt=0); /** * Find the children */ void findChildren(tPPtr,vector &) const; 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() { Interfaced::doinit(); _ybin=0.25/_zbin; mg_ = getParticleData(ParticleID::g)->constituentMass(); } //@} private: /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ - HwRemDecayer & operator=(const HwRemDecayer &); + HwRemDecayer & operator=(const HwRemDecayer &) = delete; public: /** * Simple struct to store info about baryon quark and di-quark * constituents. */ struct HadronContent { /** * manually extract the valence flavour \a id. */ inline void extract(int id) { for(unsigned int i=0; iid() == ParticleID::gamma || (hadron->id() == ParticleID::pomeron && pomeronStructure==1) || hadron->id() == ParticleID::reggeon) { flav[0] = id; flav[1] = -id; extracted = 0; flav.resize(2); } else if (hadron->id() == ParticleID::pomeron && pomeronStructure==0) { extracted = 0; } else { extracted = i; } break; } } } /** * Return a proper particle ID assuming that \a id has been removed * from the hadron. */ long RemID() const; /** * Method to determine whether \a parton is a quark from the sea. * @return TRUE if \a parton is neither a valence quark nor a gluon. */ bool isSeaQuark(tcPPtr parton) const { return ((parton->id() != ParticleID::g) && ( !isValenceQuark(parton) ) ); } /** * Method to determine whether \a parton is a valence quark. */ bool isValenceQuark(tcPPtr parton) const { return isValenceQuark(parton->id()); } /** * Method to determine whether \a parton is a quark from the sea. * @return TRUE if \a parton is neither a valence quark nor a gluon. */ bool isSeaQuarkData(tcPDPtr partonData) const { return ((partonData->id() != ParticleID::g) && ( !isValenceQuarkData(partonData) ) ); } /** * Method to determine whether \a parton is a valence quark. */ bool isValenceQuarkData(tcPDPtr partonData) const { int id(sign*partonData->id()); return find(flav.begin(),flav.end(),id) != flav.end(); } /** * Method to determine whether \a parton is a valence quark. */ bool isValenceQuark(int id) const { return find(flav.begin(),flav.end(),sign*id) != flav.end(); } /** The valence flavours of the corresponding baryon. */ vector flav; /** The array index of the extracted particle. */ int extracted; /** -1 if the particle is an anti-particle. +1 otherwise. */ int sign; /** The ParticleData objects of the hadron */ tcPDPtr hadron; /** Pomeron treatment */ unsigned int pomeronStructure; }; /** * Return the hadron content objects for the incoming particles. */ const pair& content() const { return theContent; } /** * Return a HadronContent struct from a PPtr to a hadron. */ HadronContent getHadronContent(tcPPtr hadron) const; /** * Set the hadron contents. */ void setHadronContent(tPPair beam) { theContent.first = getHadronContent(beam.first); theContent.second = getHadronContent(beam.second); } private: /** * Do the forced Splitting of the Remnant with respect to the * extracted parton \a parton. * @param parton = PPtr to the parton going into the subprocess. * @param content = HadronContent struct to keep track of flavours. * @param rem = Pointer to the ThePEG::RemnantParticle. * @param used = Momentum vector to keep track of remaining momenta. * @param partners = Vector of pairs filled with tPPtr to the particles * which should be colour connected. * @param pdf pointer to the PDF Object which is used for this particle * @param first = Flag for the first interaction. */ void split(tPPtr parton, HadronContent & content, tRemPPtr rem, Lorentz5Momentum & used, PartnerMap & partners, tcPDFPtr pdf, bool first); /** * Merge the colour lines of two particles * @param p1 = Pointer to particle 1 * @param p2 = Pointer to particle 2 * @param anti = flag to indicate, if (anti)colour was extracted as first parton. */ void mergeColour(tPPtr p1, tPPtr p2, bool anti) const; /** * Set the colour connections. * @param partners = Object that holds the information which particles to connect. * @param anti = flag to indicate, if (anti)colour was extracted as first parton. * @param disrupt parameter for disruption of the colour structure */ void fixColours(PartnerMap partners, bool anti, double disrupt) const; /** * Set the momenta of the Remnants properly and boost the decay particles. */ void setRemMasses() const; /** * This creates a parton from the remaining flavours of the hadron. The * last parton used was a valance parton, so only 2 (or 1, if meson) flavours * remain to be used. */ PPtr finalSplit(const tRemPPtr rem, long remID, Lorentz5Momentum usedMomentum) const { // Create the remnant and set its momentum, also reset all of the decay // products from the hadron PPtr remnant = new_ptr(Particle(getParticleData(remID))); Lorentz5Momentum prem(rem->momentum()-usedMomentum); prem.setMass(getParticleData(remID)->constituentMass()); prem.rescaleEnergy(); remnant->set5Momentum(prem); // Add the remnant to the step, but don't do colour connections thestep->addDecayProduct(rem,remnant,false); return remnant; } /** * This takes the particle and find a splitting for np -> p + child and * creates the correct kinematics and connects for such a split. This * Splitting has an upper bound on qtilde given by the energy argument * @param rem The Remnant * @param child The PDG code for the outgoing particle * @param oldQ The maximum scale for the evolution * @param oldx The fraction of the hadron's momentum carried by the last parton * @param pf The momentum of the last parton at input and after branching at output * @param p The total emitted momentum * @param content The content of the hadron */ PPtr forceSplit(const tRemPPtr rem, long child, Energy &oldQ, double &oldx, Lorentz5Momentum &pf, Lorentz5Momentum &p, HadronContent & content) const; /** * Check if a particle is a parton from a hadron or not * @param parton The parton to be tested */ bool isPartonic(tPPtr parton) const; /** @name Soft interaction methods. */ //@{ /** * Produce pt values according to dN/dp_T = N p_T exp(-beta_*p_T^2) */ Energy softPt() const; /** * Get the 2 pairs of 5Momenta for the scattering. Needs calling of * initSoftInteractions. */ void softKinematics(Lorentz5Momentum &r1, Lorentz5Momentum &r2, Lorentz5Momentum &g1, Lorentz5Momentum &g2) const; /** * Create N soft gluon interactions */ void doSoftInteractions(unsigned int N){ if(!multiPeriph_){ doSoftInteractions_old(N);} //outdated model for soft interactions else{ doSoftInteractions_multiPeriph(N); // Multiperipheral model } } /** * Create N soft gluon interactions (old version) */ void doSoftInteractions_old(unsigned int N); /** * Create N soft gluon interactions with multiperhpheral kinematics */ void doSoftInteractions_multiPeriph(unsigned int N); /** * Phase space generation for the ladder partons */ bool doPhaseSpaceGenerationGluons(vector &softGluons, Energy energy, unsigned int &its) const; /** * This returns the rotation matrix needed to rotate p into the z axis */ LorentzRotation rotate(const LorentzMomentum &p) const; /** * Methods to generate random distributions also all stolen form UA5Handler **/ template inline T gaussDistribution(T mean, T stdev) const{ double x = rnd(); x = sqrt(-2.*log(x)); double y; randAzm(x,x,y); return mean + stdev*x; } /** * This returns a random number with a flat distribution * [-A,A] plus gaussian tail with stdev B * TODO: Should move this to Utilities * @param A The width of the flat part * @param B The standard deviation of the gaussian tail * @return the randomly generated value */ inline double randUng(double A, double B) const{ double prun; if(A == 0.) prun = 0.; else prun = 1./(1.+B*1.2533/A); if(rnd() < prun) return 2.*(rnd()-0.5)*A; else { double temp = gaussDistribution(0.,B); if(temp < 0) return temp - abs(A); else return temp + abs(A); } } template inline void randAzm(T pt, T &px, T &py) const{ double c,s,cs; while(true) { c = 2.*rnd()-1.; s = 2.*rnd()-1.; cs = c*c+s*s; if(cs <= 1.&&cs!=0.) break; } T qt = pt/cs; px = (c*c-s*s)*qt; py = 2.*c*s*qt; } inline Energy randExt(Energy AM0,InvEnergy B) const{ double r = rnd(); // Starting value Energy am = AM0-log(r)/B; for(int i = 1; i<20; ++i) { double a = exp(-B*(am-AM0))/(1.+B*AM0); double f = (1.+B*am)*a-r; InvEnergy df = -B*B*am*a; Energy dam = -f/df; am += dam; if(am theanti; /** * variable to sum up the x values of the extracted particles */ pair theX; /**Pair of HadronContent structs to know about the quark content of the beams*/ pair theContent; /**Pair of Lorentz5Momentum to keep track of the forced splitting product momenta*/ pair theUsed; /** * Pair of PartnerMap's to store the particles, which will be colour * connected in the end. */ pair theMaps; /** * Variable to hold a pointer to the current step. The variable is used to * determine, wether decay(const DecayMode & dm, const Particle & p, Step & step) * has been called in this event or not. */ StepPtr thestep; /** * Pair of Remnant pointers. This is needed to boost * in the Remnant-Remnant CMF after all have been decayed. */ pair theRems; /** * The beam particle data for the current incoming hadron */ mutable tcPPtr theBeam; /** * the beam data */ mutable Ptr::const_pointer theBeamData; /** * The PDF for the current initial-state shower */ mutable tcPDFPtr _pdf; private: /** * Switch to control handling of top quarks in proton */ bool allowTop_; /** + * Switch to control handling of charged leptons in proton + */ + bool allowLeptons_; + + /** * Switch to control using multiperipheral kinemaics */ bool multiPeriph_; /** * True if kinematics is to be calculated for quarks */ bool quarkPair_; /** @name Soft interaction variables. */ //@{ /** * Pair of soft Remnant pointers, i.e. Diquarks. */ tPPair softRems_; /** * ptcut of the UE model */ Energy ptmin_; /** * slope of the soft pt-spectrum: dN/dp_T = N p_T exp(-beta*p_T^2) */ InvEnergy2 beta_; /** * Maximum number of attempts for the regeneration of an additional * soft scattering, before the number of scatters is reduced. */ unsigned int maxtrySoft_; /** * Variable to store the relative number of colour disrupted * connections to additional soft subprocesses. */ double colourDisrupt_; /** * Variable to store the additive factor of the multiperipheral ladder multiplicity. */ double ladderbFactor_; /** * Variable of the parameterization of the ladder multiplicity. */ double ladderPower_; /** * Variable of the parameterization of the ladder multiplicity. */ double ladderNorm_; double ladderMult_; /** * Variable to store the gaussian width of the * fluctuation of the longitudinal momentum * fraction. */ double gaussWidth_; /** * Variable to store the current total multiplicity of a ladder. */ double valOfN_; /** * Variable to store the initial total rapidity between of the remnants. */ double initTotRap_; //@} /** @name Forced splitting variables. */ //@{ /** * The kinematic cut-off */ Energy _kinCutoff; /** * The PDF freezing scale as set in ShowerHandler */ Energy _forcedSplitScale; /** * Range for emission */ double _range; /** * Size of the bins in z for the interpolation */ double _zbin; /** * Size of the bins in y for the interpolation */ double _ybin; /** * Maximum number of bins for the z interpolation */ int _nbinmax; /** * Pointer to the object calculating the QCD coupling */ ShowerAlphaPtr _alphaS; /** * Pointer to the object calculating the QED coupling */ ShowerAlphaPtr _alphaEM; /** * Option for the DIS remnant */ unsigned int DISRemnantOpt_; /** * Option for the pT generation */ unsigned int PtDistribution_; /** * Option for the treatment of the pomeron structure */ unsigned int pomeronStructure_; //@} /** * The gluon constituent mass. */ Energy mg_; }; } #endif /* HERWIG_HwRemDecayer_H */ diff --git a/PDF/MultiPartonExtractor.h b/PDF/MultiPartonExtractor.h --- a/PDF/MultiPartonExtractor.h +++ b/PDF/MultiPartonExtractor.h @@ -1,114 +1,114 @@ // -*- C++ -*- #ifndef Herwig_MultiPartonExtractor_H #define Herwig_MultiPartonExtractor_H // // This is the declaration of the MultiPartonExtractor class. // #include "ThePEG/PDF/PartonExtractor.h" #include namespace Herwig { using namespace ThePEG; /** * The MultiPartonExtractor class inherits from the PartonExtractor of ThePEG * but allows more control over the PDFs used in the case that there are multiple * stages of parton extraction * * @see \ref MultiPartonExtractorInterfaces "The interfaces" * defined for MultiPartonExtractor. */ class MultiPartonExtractor: public PartonExtractor { public: /** * The default constructor. */ MultiPartonExtractor() {}; /** * Return a vector of possible pairs of parton bins which can be * produced within a given maximum total particle-particle * invariant mass squared, \a maxEnergy sBin. */ virtual PartonPairVec getPartons(Energy maxEnergy, const cPDPair &, const Cuts &) 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: /** * Add parton bins to pbins for the given incoming particle and the * specified cuts. */ virtual void addPartons(tPBPtr incoming ,const PDFCuts & cuts, std::deque pdf ,PartonVector & pbins) const; 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 assignment operator is private and must never be called. * In fact, it should not even be implemented. */ - MultiPartonExtractor & operator=(const MultiPartonExtractor &); + MultiPartonExtractor & operator=(const MultiPartonExtractor &) = delete; /** * PDFBase object to override first PDF */ vector firstPDF_; /** * PDFBase object to override second PDF */ vector secondPDF_; }; } #endif /* Herwig_MultiPartonExtractor_H */ diff --git a/Shower/Dipole/Kernels/ColourMatrixElementCorrection.h b/Shower/Dipole/Kernels/ColourMatrixElementCorrection.h --- a/Shower/Dipole/Kernels/ColourMatrixElementCorrection.h +++ b/Shower/Dipole/Kernels/ColourMatrixElementCorrection.h @@ -1,171 +1,171 @@ // -*- C++ -*- // // ColourMatrixElementCorrection.h is a part of Herwig - A multi-purpose Monte Carlo event generator // Copyright (C) 2002-2019 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_ColourMatrixElementCorrection_H #define Herwig_ColourMatrixElementCorrection_H // // This is the declaration of the ColourMatrixElementCorrection class. // #include "Herwig/Shower/Dipole/Base/DipoleSplittingReweight.h" #include namespace Herwig { using namespace ThePEG; /** * \ingroup DipoleShower * \author Johan Thoren, Simon Platzer * * \brief ColourMatrixElementCorrection is implementing colour matrix element * corrections through the weighted Sudakov algorithm * * @see \ref ColourMatrixElementCorrectionInterfaces "The interfaces" * defined for ColourMatrixElementCorrection. */ class ColourMatrixElementCorrection: public DipoleSplittingReweight { public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ ColourMatrixElementCorrection(); /** * The destructor. */ virtual ~ColourMatrixElementCorrection(); //@} public: /** * Calculate and cache the colour matrix element correction factor * for the given splitting type. */ double cmec(const DipoleSplittingInfo&) const; /** * Return the reweighting factor for the given splitting type. */ virtual double evaluate(const DipoleSplittingInfo& s) const { return cmec(s); } /** * Return the absolute value of the colour matrix element correction * as an enhancement hint for the sampling of the un-reweighted * splitting kernel. */ virtual double hint(const DipoleSplittingInfo& s) const { if ( hintOnly(s) ) return cmec(s); return abs(cmec(s))*lambda; } /** * Return true, if the reweight can be entirely absorbed into the hint. A * possible detuning will be switched off. */ virtual bool hintOnly(const DipoleSplittingInfo& s) const { return cmec(s) > 0.; } /** * Set the factor in front of enhance used by the veto algorithm. */ virtual void reweightFactor(const double c) { assert(c > 0.0); lambda = c; } /** * Set the factor in front of enhance used by the veto algorithm. */ virtual void negativeScaling(const double c) { assert(c >= 0.0); negCMECScaling = c; } 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; //@} // If needed, insert declarations of virtual function defined in the // InterfacedBase class here (using ThePEG-interfaced-decl in Emacs). private: /** * Factor to shuffle the magnitude of the CMEC between the splitting kernel * and the weight in the reweighted veto algorithm. */ double lambda; /** * Scaling factor multiplying all of the negative colour matrix element * corrections. The physically sensible value is 1.0, but this factor can * be used to examine the effects of the negative contributions. */ double negCMECScaling; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ - ColourMatrixElementCorrection & operator=(const ColourMatrixElementCorrection &); + ColourMatrixElementCorrection & operator=(const ColourMatrixElementCorrection &) = delete; }; } #endif /* Herwig_ColourMatrixElementCorrection_H */ diff --git a/Shower/Dipole/Kinematics/IFMassiveKinematics.h b/Shower/Dipole/Kinematics/IFMassiveKinematics.h --- a/Shower/Dipole/Kinematics/IFMassiveKinematics.h +++ b/Shower/Dipole/Kinematics/IFMassiveKinematics.h @@ -1,279 +1,279 @@ // -*- C++ -*- // // IFLightKinematics.h is a part of Herwig - A multi-purpose Monte Carlo event generator // Copyright (C) 2002-2019 The Herwig Collaboration // // Herwig is licenced under version 3 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef HERWIG_IFLightKinematics_H #define HERWIG_IFLightKinematics_H // // This is the declaration of the IFLightKinematics class. // #include "DipoleSplittingKinematics.h" namespace Herwig { using namespace ThePEG; /** * \ingroup DipoleShower * \author Simon Platzer, Martin Stoll * * \brief IFMassiveKinematics implements massless splittings * off an initial-final dipole. * * @see \ref IFMassiveKinematicsInterfaces "The interfaces" * defined for IFMassiveKinematics. */ class IFMassiveKinematics: public DipoleSplittingKinematics { public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ IFMassiveKinematics(); /** * The destructor. */ virtual ~IFMassiveKinematics(); //@} public: /** * Return the boundaries in between the evolution * variable random number is to be sampled; the lower * cuoff is assumed to correspond to the infrared cutoff. */ virtual pair kappaSupport(const DipoleSplittingInfo& dIndex) const; /** * Return the boundaries in between the momentum * fraction random number is to be sampled. */ virtual pair xiSupport(const DipoleSplittingInfo& dIndex) const; /** * Return the boundaries on the momentum fraction */ virtual pair zBoundaries(Energy, const DipoleSplittingInfo&, const DipoleSplittingKernel&) const { return {0.0,1.0}; } /** * Return the dipole scale associated to the * given pair of emitter and spectator. This * should be the invariant mass or absolute value * final/final or initial/initial and the absolute * value of the momentum transfer for intial/final or * final/initial dipoles. */ virtual Energy dipoleScale(const Lorentz5Momentum& pEmitter, const Lorentz5Momentum& pSpectator) const; /** * Return the maximum pt for the given dipole scale. */ virtual Energy ptMax(Energy dScale, double emX, double specX, const DipoleSplittingInfo& dInfo, const DipoleSplittingKernel& split) const; /** * Return the maximum pt for the given dipole scale. */ virtual Energy ptMax(Energy dScale, double, double, const DipoleIndex& dIndex, const DipoleSplittingKernel& split, tPPtr emitter, tPPtr) const; /** * Return the maximum pt for the given dipole scale. */ virtual Energy ptMax(Energy, double, double, const DipoleIndex&, const DipoleSplittingKernel&) const { // Only the DipoleSplittingInfo version should be used for massive // dipoles, for now anyway. assert(false); return ZERO; } /** * Return the maximum virtuality for the given dipole scale. */ virtual Energy QMax(Energy dScale, double emX, double specX, const DipoleSplittingInfo& dInfo, const DipoleSplittingKernel& split) const; /** * Return the maximum virtuality for the given dipole scale. */ virtual Energy QMax(Energy, double, double, const DipoleIndex&, const DipoleSplittingKernel&) const { // Only the DipoleSplittingInfo version should be used for massive // dipoles, for now anyway. assert(false); return ZERO; } /** * Return the pt given a virtuality. */ virtual Energy PtFromQ(Energy scale, const DipoleSplittingInfo&) const; /** * Return the virtuality given a pt. */ virtual Energy QFromPt(Energy scale, const DipoleSplittingInfo&) const; /** * Return the random number associated to * the given pt. */ virtual double ptToRandom(Energy pt, Energy dScale, double emX, double specX, const DipoleIndex& dIndex, const DipoleSplittingKernel&) const; /** * Generate splitting variables given three random numbers * and the momentum fractions of the emitter and spectator. * Return true on success. */ virtual bool generateSplitting(double kappa, double xi, double phi, DipoleSplittingInfo& dIndex, const DipoleSplittingKernel&); /** * Generate the full kinematics given emitter and * spectator momentum and a previously completeted * DipoleSplittingInfo object. */ virtual void generateKinematics(const Lorentz5Momentum& pEmitter, const Lorentz5Momentum& pSpectator, const DipoleSplittingInfo& dInfo); 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; //@} // If needed, insert declarations of virtual function defined in the // InterfacedBase class here (using ThePEG-interfaced-decl in Emacs). private: /** * The static object used to initialize the description of this class. * Indicates that this is a concrete class with persistent data. */ static ClassDescription initIFMassiveKinematics; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ - IFMassiveKinematics & operator=(const IFMassiveKinematics &); + IFMassiveKinematics & operator=(const IFMassiveKinematics &) = delete; private: /** * Wether or not to choose the `collinear' scheme */ bool theCollinearScheme; }; } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of IFMassiveKinematics. */ template <> struct BaseClassTrait { /** Typedef of the first base class of IFMassiveKinematics. */ typedef Herwig::DipoleSplittingKinematics NthBase; }; /** This template specialization informs ThePEG about the name of * the IFMassiveKinematics class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "Herwig::IFMassiveKinematics"; } /** * The name of a file containing the dynamic library where the class * IFMassiveKinematics is implemented. It may also include several, space-separated, * libraries if the class IFMassiveKinematics 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 "HwDipoleShower.so"; } }; /** @endcond */ } #endif /* HERWIG_IFMassiveKinematics_H */ diff --git a/Shower/Dipole/SpinCorrelations/DipoleShowerParticle.h b/Shower/Dipole/SpinCorrelations/DipoleShowerParticle.h --- a/Shower/Dipole/SpinCorrelations/DipoleShowerParticle.h +++ b/Shower/Dipole/SpinCorrelations/DipoleShowerParticle.h @@ -1,182 +1,182 @@ // -*- C++ -*- // // DipoleShowerParticle.h is a part of Herwig - A multi-purpose Monte Carlo event generator // Copyright (C) 2002-2019 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_DipoleShowerParticle_H #define HERWIG_DipoleShowerParticle_H // // This is the declaration of the DipoleShowerParticle class. // #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/Helicity/WaveFunction/WaveFunctionBase.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "DipoleShowerVertex.h" namespace Herwig { using namespace ThePEG; /** \ingroup DipoleShower * * \author Stephen Webster * */ class DipoleShowerParticle : public Base { public: /** * Default constructor */ DipoleShowerParticle() {} /** * Default destructor **/ ~DipoleShowerParticle() {} public: /** * Reset the member variables of the object. */ void clear(); /** * Set up the decay vertex for the emitter. */ void prepare( PPtr& part, const Helicity::Direction emmDir, const Helicity::Direction specDir, const Lorentz5Momentum& pVector, const Lorentz5Momentum& nVector ); /** * Return the associated decay vertex, * a DipoleShowerVertex. **/ DSVertexPtr decayVertex() { return theDecayVertex; } /** * Create fermion decay basis states. * It returns the decay basis states in the * decay frame as required for the mapping. */ vector > createFermionDecayStates(); /** * Create vector decay basis states. */ void createVectorDecayStates(); /** * Create fermion production basis states * for the given particle produced in the splitting. */ void createNewFermionSpinInfo( PPtr& outgoing, Helicity::Direction dir); /** * Create vector production basis states * for the given particle produced in the splitting. */ void createNewVectorSpinInfo( PPtr& outgoing, Helicity::Direction dir); /** * Create the mappings between the production * and decay states for the fermion and * store them in the associated decay vertex. * (No longer applicable) reason for passing the * decay states as an argument: * Previously used a check on zero values for computing * the mapping, rather than a 1e-5, this would only * work when using the original decay state as calculated * in the decay frame (i.e. without transforming to the * lab frame and back). Now it simply avoids doing an * unnecessary rotation of the decay basis */ void setFermionMapping( const vector>& decayBasis ); /** * Create the mappings between the production * and decay states the boson and * store them in the associated decay vertex. */ void setVectorMapping(); public: /** * 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(); private: /** * The pptr to this particle. */ PPtr theParticle; /** * The dipole shower vertex associated * with this particle. */ DSVertexPtr theDecayVertex; private: /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ - DipoleShowerParticle & operator=(const DipoleShowerParticle &); + DipoleShowerParticle & operator=(const DipoleShowerParticle &) = delete; }; } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of DipoleShowerParticle. */ template <> struct BaseClassTrait { /** Typedef of the first base class of DipoleShowerParticle. */ typedef Base NthBase; }; /** This template specialization informs ThePEG about the name of * the DipoleShowerParticle class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "Herwig::DipoleShowerParticle"; } /** * The name of a file containing the dynamic library where the class * DipoleShowerParticle is implemented. It may also include several, space-separated, * libraries if the class DipoleShowerParticle 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 "HwDipoleShower.so"; } }; /** @endcond */ } #endif /* HERWIG_DipoleShowerParticle_H */ diff --git a/Shower/Dipole/SpinCorrelations/DipoleShowerVertex.h b/Shower/Dipole/SpinCorrelations/DipoleShowerVertex.h --- a/Shower/Dipole/SpinCorrelations/DipoleShowerVertex.h +++ b/Shower/Dipole/SpinCorrelations/DipoleShowerVertex.h @@ -1,285 +1,285 @@ // -*- C++ -*- // // DipoleShowerVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator // Copyright (C) 2002-2019 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_DipoleShowerVertex_H #define HERWIG_DipoleShowerVertex_H // // This is the declaration of the DipoleShowerVertex class. // #include "ThePEG/EventRecord/HelicityVertex.h" #include "Herwig/Decay/DecayMatrixElement.h" #include "DipoleShowerVertex.fh" namespace Herwig { using namespace ThePEG; /** \ingroup DipoleShower * * This class represents the vertex for a given splitting * in the dipole shower. * * \author Stephen Webster * */ class DipoleShowerVertex: public HelicityVertex { public: /** * Default constructor */ DipoleShowerVertex(); /** * Default destructor **/ ~DipoleShowerVertex() {} public: /** * Return the matrix element for this vertex. */ inline const DecayMEPtr ME() const { return theMatrixElement; } /** * Set the matrix element */ inline void ME(DecayMEPtr in) { theMatrixElement = in; } public: /** * Method to calculate the \f$\rho\f$ matrix for one of the decay products * in the frame of this splitting vertex. * * @param iprod The splitting product to compute the \f$\rho\f$ matrix for. */ RhoDMatrix getRhoMatrix(int iprod, bool ) const; /** * Method to calculate the \f$D\f$ matrix for the decaying * particle / the incoming to the vertex, in the frame of * the vertex. The argument is a dummy argument. */ RhoDMatrix getDMatrix(int) const; /** * Get the lorentz rotation from the working frame * to the frame of the splitting. */ LorentzRotation boostToSplitting(); /** * Set the p vector for this splitting */ void pVector( const Lorentz5Momentum& emitterMom ) { thePVector = emitterMom; } /** * Set the n vector for this splitting */ void nVector( const Lorentz5Momentum& nMom ) { theNVector = nMom; } /** * Set the emitter,Spectator Config (II,IF,FF,FI - F=true, I=false) */ void dipoleConfig(const pair& newConfig) { theDipoleConfig = newConfig; } /** * Return the p vector for this splitting */ Lorentz5Momentum pVector() const { return thePVector; } /** * Return the n/spectator vector for this splitting */ Lorentz5Momentum nVector() const { return theNVector; } /** * Return the emitter,Spectator Config (II,IF,FF,FI - F=true, I=false) */ const pair& dipoleConfig() const { return theDipoleConfig; } /** * Set the decay state to production state * mapping for this vertex. */ void mappingD2P( RhoDMatrix& mapping ) { theMappingDecay2Prod = mapping; } /** * Return the mapping from the decay * states to the production states. */ RhoDMatrix mappingD2P() { return theMappingDecay2Prod; } /** * Set the production state to decay state * mapping for this vertex. */ void mappingP2D( RhoDMatrix& mapping ) { theMappingProd2Decay = mapping; } /** * Return the mapping from the production * states to the decay states. */ RhoDMatrix mappingP2D() { return theMappingProd2Decay; } /** * Set the new to old spectator mapping * for this vertex. */ void mappingSpecNewToOld( RhoDMatrix& mapping ) { theMappingSpectatorNewToOld = mapping; } /** * Return the new to old spectator mapping * for this vertex. */ RhoDMatrix mappingSpecNewToOld() { return theMappingSpectatorNewToOld; } /** * Set the new to old spectator mapping * for this vertex. */ void mappingSpecOldToNew( RhoDMatrix& mapping ) { theMappingSpectatorOldToNew = mapping; } /** * Return the new to old spectator mapping * for this vertex. */ RhoDMatrix mappingSpecOldToNew() { return theMappingSpectatorOldToNew; } public: /** * 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(); private: /** * Storage of the decay matrix element. */ DecayMEPtr theMatrixElement; /** * The p vector of the 'splitting basis' * associated with this vertex. **/ Lorentz5Momentum thePVector; /** * The n vector of the 'splitting basis' * associated with this vertex. **/ Lorentz5Momentum theNVector; /** * Initial/final config {emitter, spectator} */ pair theDipoleConfig; /** * An indicator flag to record if the * boost to shower for this vertex has been done */ bool theBoostCalculated; /** * The lorentz transformation from the * working frame to this splitting. */ LorentzRotation theBoostToSplitting; /** * The mapping from the decay basis states * to the production basis states. */ RhoDMatrix theMappingDecay2Prod; /** * The mapping from the production basis states * to the decay basis states. */ RhoDMatrix theMappingProd2Decay; /** * The mapping from the new spectator basis * states to the old spectator basis states. */ RhoDMatrix theMappingSpectatorNewToOld; /** * The mapping from the old spectator basis * states to the new spectator basis states. */ RhoDMatrix theMappingSpectatorOldToNew; private: /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ - DipoleShowerVertex & operator=(const DipoleShowerVertex &); + DipoleShowerVertex & operator=(const DipoleShowerVertex &) = delete; }; } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of DipoleShowerVertex. */ template <> struct BaseClassTrait { /** Typedef of the first base class of DipoleShowerVertex. */ typedef HelicityVertex NthBase; }; /** This template specialization informs ThePEG about the name of * the DipoleShowerVertex class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "Herwig::DipoleShowerVertex"; } /** * The name of a file containing the dynamic library where the class * DipoleShowerVertex is implemented. It may also include several, space-separated, * libraries if the class DipoleShowerVertex 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 "HwDipoleShower.so"; } }; /** @endcond */ } #endif /* HERWIG_DipoleShowerVertex_H */ diff --git a/Shower/Dipole/SpinCorrelations/DipoleVertexRecord.h b/Shower/Dipole/SpinCorrelations/DipoleVertexRecord.h --- a/Shower/Dipole/SpinCorrelations/DipoleVertexRecord.h +++ b/Shower/Dipole/SpinCorrelations/DipoleVertexRecord.h @@ -1,207 +1,207 @@ // -*- C++ -*- #ifndef Herwig_DipoleVertexRecord_H #define Herwig_DipoleVertexRecord_H // // This is the declaration of the DipoleVertexRecord class. // #include "ThePEG/Config/ThePEG.h" #include "Herwig/Shower/Dipole/Base/DipoleSplittingInfo.h" #include "Herwig/Shower/Dipole/Base/Dipole.h" #include "ThePEG/EventRecord/RhoDMatrix.h" #include "DipoleShowerParticle.h" namespace Herwig { using namespace ThePEG; /** * Here is the documentation of the DipoleVertexRecord class. */ class DipoleVertexRecord: public Base { public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ DipoleVertexRecord() {} /** * The destructor. */ virtual ~DipoleVertexRecord() { clear(); } //@} public: /** * Prepare the emitter and spectator * for the spin correlations computations. **/ void prepareSplitting( const DipoleSplittingInfo& dInfo, const Dipole& dip); /** * Correctly initialise the decay matrix * to a delta matrix for an external particle. */ void initDecayMatrix(PPtr& particle, Helicity::Direction dir); /** * Compute the spin density matrix for the given emitter. * This tracks the path between the given emitter and * the previous emitter, calculating a rho/decay matrix * at each vertex as appropriate. */ RhoDMatrix emitterDensityMatrix(PPtr emitter); /** * Generate the spin-correlated azimuthal angle for a splitting. */ void generatePhi(DipoleSplittingInfo& dInfo, Dipole& dip); /** * Identify the type of particle and use the appropriate function * to set up the spin info. * Required for e.g. MPI */ void createSpinInfo(PPtr& part, const Helicity::Direction& dir); /** * Create and set up fermion spin info. * Required for e.g. MPI */ void createFermionSpinInfo(PPtr& part, const Helicity::Direction& dir); /** * Create and set up vector spin info. * Required for e.g. MPI */ void createVectorSpinInfo(PPtr& part, const Helicity::Direction& dir); /** * Update the vertex record following a splitting. */ void update(const DipoleSplittingInfo& dInfo); /** * For spectators. Set new particle spin info the that of the * old particle. Update the spin info to include any momentum changes. */ void updateSpinInfo( PPtr& oldPart, PPtr& newPart ); /** * Set the stopUpdate flag in the spin info of a particle * incoming to the current decay. */ void prepareParticleDecay( const PPtr& parent ); /** * Update the spin info of the incoming to the decay * following showering of the decay. */ void updateParticleDecay(); /** * SW 06/02/2019: Required for NearestNeighbourDipoleAnalysis tests. * Access the emitter info record. */ //map emitterInfoRecord() const { //return theEmitterInfoRecord; //} /** * SW 06/02/2019: Required for NearestNeighbourDipoleAnalysis tests. * Add a splitting to the emitter info record. */ // void addToRecord(const DipoleSplittingInfo& dInfo) { // assert(dInfo.emitter()); // theEmitterInfoRecord[dInfo.emitter()] = dInfo; // } /** * Clear the vertex record: Give up ownership * on any object involved in the evolution. */ virtual void clear(); /** * 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(); private: /** * The current emitter. */ DipoleShowerParticle theCurrentEmitter; /** * SW 06/02/2019: Required for NearestNeighbourDipoleAnalysis tests. * Record of the splittings as * required for the testing analysis. */ //map theEmitterInfoRecord; /** * The spin info of a particle incoming to the decay * under consideration. */ tcSpinPtr theDecayParentSpinInfo; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ - DipoleVertexRecord & operator=(const DipoleVertexRecord &); + DipoleVertexRecord & operator=(const DipoleVertexRecord &) = delete; }; } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of DipoleVertexRecord. */ template <> struct BaseClassTrait { /** Typedef of the first base class of DipoleVertexRecord. */ typedef Base NthBase; }; /** This template specialization informs ThePEG about the name of * the DipoleVertexRecord class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "Herwig::DipoleVertexRecord"; } /** * The name of a file containing the dynamic library where the class * DipoleVertexRecord is implemented. It may also include several, space-separated, * libraries if the class DipoleVertexRecord 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 "HwDipoleShower.so"; } }; /** @endcond */ } #endif /* Herwig_DipoleVertexRecord_H */ diff --git a/Shower/QTilde/SplittingFunctions/SplittingFunction.cc b/Shower/QTilde/SplittingFunctions/SplittingFunction.cc --- a/Shower/QTilde/SplittingFunctions/SplittingFunction.cc +++ b/Shower/QTilde/SplittingFunctions/SplittingFunction.cc @@ -1,915 +1,919 @@ // -*- C++ -*- // // SplittingFunction.cc is a part of Herwig - A multi-purpose Monte Carlo event generator // Copyright (C) 2002-2019 The Herwig Collaboration // // Herwig is licenced under version 3 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 SplittingFunction class. // #include "SplittingFunction.h" #include "ThePEG/Utilities/DescribeClass.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Interface/Switch.h" #include "ThePEG/Repository/UseRandom.h" #include "ThePEG/Utilities/EnumIO.h" #include "Herwig/Shower/QTilde/Base/ShowerParticle.h" #include "ThePEG/Utilities/DescribeClass.h" using namespace Herwig; DescribeAbstractClass describeSplittingFunction ("Herwig::SplittingFunction",""); void SplittingFunction::Init() { static ClassDocumentation documentation ("The SplittingFunction class is the based class for 1->2 splitting functions" " in Herwig"); static Switch interfaceColourStructure ("ColourStructure", "The colour structure for the splitting function", &SplittingFunction::_colourStructure, Undefined, false, false); static SwitchOption interfaceColourStructureTripletTripletOctet (interfaceColourStructure, "TripletTripletOctet", "3 -> 3 8", TripletTripletOctet); static SwitchOption interfaceColourStructureOctetOctetOctet (interfaceColourStructure, "OctetOctetOctet", "8 -> 8 8", OctetOctetOctet); static SwitchOption interfaceColourStructureOctetTripletTriplet (interfaceColourStructure, "OctetTripletTriplet", "8 -> 3 3bar", OctetTripletTriplet); static SwitchOption interfaceColourStructureTripletOctetTriplet (interfaceColourStructure, "TripletOctetTriplet", "3 -> 8 3", TripletOctetTriplet); static SwitchOption interfaceColourStructureSextetSextetOctet (interfaceColourStructure, "SextetSextetOctet", "6 -> 6 8", SextetSextetOctet); static SwitchOption interfaceColourStructureChargedChargedNeutral (interfaceColourStructure, "ChargedChargedNeutral", "q -> q 0", ChargedChargedNeutral); static SwitchOption interfaceColourStructureNeutralChargedCharged (interfaceColourStructure, "NeutralChargedCharged", "0 -> q qbar", NeutralChargedCharged); static SwitchOption interfaceColourStructureChargedNeutralCharged (interfaceColourStructure, "ChargedNeutralCharged", "q -> 0 q", ChargedNeutralCharged); static Switch interfaceInteractionType ("InteractionType", "Type of the interaction", &SplittingFunction::_interactionType, ShowerInteraction::UNDEFINED, false, false); static SwitchOption interfaceInteractionTypeQCD (interfaceInteractionType, "QCD","QCD",ShowerInteraction::QCD); static SwitchOption interfaceInteractionTypeQED (interfaceInteractionType, "QED","QED",ShowerInteraction::QED); static Switch interfaceAngularOrdered ("AngularOrdered", "Whether or not this interaction is angular ordered, " "normally only g->q qbar and gamma-> f fbar are the only ones which aren't.", &SplittingFunction::angularOrdered_, true, false, false); static SwitchOption interfaceAngularOrderedYes (interfaceAngularOrdered, "Yes", "Interaction is angular ordered", true); static SwitchOption interfaceAngularOrderedNo (interfaceAngularOrdered, "No", "Interaction isn't angular ordered", false); static Switch interfaceScaleChoice ("ScaleChoice", "The scale choice to be used", &SplittingFunction::scaleChoice_, 2, false, false); static SwitchOption interfaceScaleChoicepT (interfaceScaleChoice, "pT", "pT of the branching", 0); static SwitchOption interfaceScaleChoiceQ2 (interfaceScaleChoice, "Q2", "Q2 of the branching", 1); static SwitchOption interfaceScaleChoiceFromAngularOrdering (interfaceScaleChoice, "FromAngularOrdering", "If angular order use pT, otherwise Q2", 2); static Switch interfaceStrictAO ("StrictAO", "Whether or not to apply strict angular-ordering," " i.e. for QED even in QCD emission, and vice versa", &SplittingFunction::strictAO_, true, false, false); static SwitchOption interfaceStrictAOYes (interfaceStrictAO, "Yes", "Apply strict ordering", true); static SwitchOption interfaceStrictAONo (interfaceStrictAO, "No", "Don't apply strict ordering", false); } void SplittingFunction::persistentOutput(PersistentOStream & os) const { os << oenum(_interactionType) << oenum(_colourStructure) << _colourFactor << angularOrdered_ << scaleChoice_ << strictAO_; } void SplittingFunction::persistentInput(PersistentIStream & is, int) { is >> ienum(_interactionType) >> ienum(_colourStructure) >> _colourFactor >> angularOrdered_ >> scaleChoice_ >> strictAO_; } void SplittingFunction::colourConnection(tShowerParticlePtr parent, tShowerParticlePtr first, tShowerParticlePtr second, ShowerPartnerType partnerType, const bool back) const { if(_colourStructure==TripletTripletOctet) { if(!back) { ColinePair cparent = ColinePair(parent->colourLine(), parent->antiColourLine()); // ensure input consistency assert(( cparent.first && !cparent.second && partnerType==ShowerPartnerType::QCDColourLine) || ( !cparent.first && cparent.second && partnerType==ShowerPartnerType::QCDAntiColourLine)); // q -> q g if(cparent.first) { ColinePtr newline=new_ptr(ColourLine()); cparent.first->addColoured(second); newline->addColoured ( first); newline->addAntiColoured (second); } // qbar -> qbar g else { ColinePtr newline=new_ptr(ColourLine()); cparent.second->addAntiColoured(second); newline->addColoured(second); newline->addAntiColoured(first); } // Set progenitor first->progenitor(parent->progenitor()); second->progenitor(parent->progenitor()); } else { ColinePair cfirst = ColinePair(first->colourLine(), first->antiColourLine()); // ensure input consistency assert(( cfirst.first && !cfirst.second && partnerType==ShowerPartnerType::QCDColourLine) || ( !cfirst.first && cfirst.second && partnerType==ShowerPartnerType::QCDAntiColourLine)); // q -> q g if(cfirst.first) { ColinePtr newline=new_ptr(ColourLine()); cfirst.first->addAntiColoured(second); newline->addColoured(second); newline->addColoured(parent); } // qbar -> qbar g else { ColinePtr newline=new_ptr(ColourLine()); cfirst.second->addColoured(second); newline->addAntiColoured(second); newline->addAntiColoured(parent); } // Set progenitor parent->progenitor(first->progenitor()); second->progenitor(first->progenitor()); } } else if(_colourStructure==OctetOctetOctet) { if(!back) { ColinePair cparent = ColinePair(parent->colourLine(), parent->antiColourLine()); // ensure input consistency assert(cparent.first&&cparent.second); // ensure first gluon is hardest if( first->id()==second->id() && parent->showerKinematics()->z()<0.5 ) swap(first,second); // colour line radiates if(partnerType==ShowerPartnerType::QCDColourLine) { // The colour line is radiating ColinePtr newline=new_ptr(ColourLine()); cparent.first->addColoured(second); cparent.second->addAntiColoured(first); newline->addColoured(first); newline->addAntiColoured(second); } // anti colour line radiates else if(partnerType==ShowerPartnerType::QCDAntiColourLine) { ColinePtr newline=new_ptr(ColourLine()); cparent.first->addColoured(first); cparent.second->addAntiColoured(second); newline->addColoured(second); newline->addAntiColoured(first); } else assert(false); } else { ColinePair cfirst = ColinePair(first->colourLine(), first->antiColourLine()); // ensure input consistency assert(cfirst.first&&cfirst.second); // The colour line is radiating if(partnerType==ShowerPartnerType::QCDColourLine) { ColinePtr newline=new_ptr(ColourLine()); cfirst.first->addAntiColoured(second); cfirst.second->addAntiColoured(parent); newline->addColoured(parent); newline->addColoured(second); } // anti colour line radiates else if(partnerType==ShowerPartnerType::QCDAntiColourLine) { ColinePtr newline=new_ptr(ColourLine()); cfirst.first->addColoured(parent); cfirst.second->addColoured(second); newline->addAntiColoured(second); newline->addAntiColoured(parent); } else assert(false); } } else if(_colourStructure == OctetTripletTriplet) { if(!back) { ColinePair cparent = ColinePair(parent->colourLine(), parent->antiColourLine()); // ensure input consistency assert(cparent.first&&cparent.second); cparent.first ->addColoured ( first); cparent.second->addAntiColoured(second); // Set progenitor first->progenitor(parent->progenitor()); second->progenitor(parent->progenitor()); } else { ColinePair cfirst = ColinePair(first->colourLine(), first->antiColourLine()); // ensure input consistency assert(( cfirst.first && !cfirst.second) || (!cfirst.first && cfirst.second)); // g -> q qbar if(cfirst.first) { ColinePtr newline=new_ptr(ColourLine()); cfirst.first->addColoured(parent); newline->addAntiColoured(second); newline->addAntiColoured(parent); } // g -> qbar q else { ColinePtr newline=new_ptr(ColourLine()); cfirst.second->addAntiColoured(parent); newline->addColoured(second); newline->addColoured(parent); } // Set progenitor parent->progenitor(first->progenitor()); second->progenitor(first->progenitor()); } } else if(_colourStructure == TripletOctetTriplet) { if(!back) { ColinePair cparent = ColinePair(parent->colourLine(), parent->antiColourLine()); // ensure input consistency assert(( cparent.first && !cparent.second) || (!cparent.first && cparent.second)); // q -> g q if(cparent.first) { ColinePtr newline=new_ptr(ColourLine()); cparent.first->addColoured(first); newline->addColoured (second); newline->addAntiColoured( first); } // qbar -> g qbar else { ColinePtr newline=new_ptr(ColourLine()); cparent.second->addAntiColoured(first); newline->addColoured ( first); newline->addAntiColoured(second); } // Set progenitor first->progenitor(parent->progenitor()); second->progenitor(parent->progenitor()); } else { ColinePair cfirst = ColinePair(first->colourLine(), first->antiColourLine()); // ensure input consistency assert(cfirst.first&&cfirst.second); // q -> g q if(parent->id()>0) { cfirst.first ->addColoured(parent); cfirst.second->addColoured(second); } else { cfirst.first ->addAntiColoured(second); cfirst.second->addAntiColoured(parent); } // Set progenitor parent->progenitor(first->progenitor()); second->progenitor(first->progenitor()); } } else if(_colourStructure==SextetSextetOctet) { //make sure we're not doing backward evolution assert(!back); //make sure something sensible assert(parent->colourLine() || parent->antiColourLine()); //get the colour lines or anti-colour lines bool isAntiColour=true; ColinePair cparent; if(parent->colourLine()) { cparent = ColinePair(const_ptr_cast(parent->colourInfo()->colourLines()[0]), const_ptr_cast(parent->colourInfo()->colourLines()[1])); isAntiColour=false; } else { cparent = ColinePair(const_ptr_cast(parent->colourInfo()->antiColourLines()[0]), const_ptr_cast(parent->colourInfo()->antiColourLines()[1])); } //check for sensible input // assert(cparent.first && cparent.second); // sextet has 2 colour lines if(!isAntiColour) { //pick at random which of the colour topolgies to take double topology = UseRandom::rnd(); if(topology < 0.25) { ColinePtr newline=new_ptr(ColourLine()); cparent.first->addColoured(second); cparent.second->addColoured(first); newline->addColoured(first); newline->addAntiColoured(second); } else if(topology >=0.25 && topology < 0.5) { ColinePtr newline=new_ptr(ColourLine()); cparent.first->addColoured(first); cparent.second->addColoured(second); newline->addColoured(first); newline->addAntiColoured(second); } else if(topology >= 0.5 && topology < 0.75) { ColinePtr newline=new_ptr(ColourLine()); cparent.first->addColoured(second); cparent.second->addColoured(first); newline->addColoured(first); newline->addAntiColoured(second); } else { ColinePtr newline=new_ptr(ColourLine()); cparent.first->addColoured(first); cparent.second->addColoured(second); newline->addColoured(first); newline->addAntiColoured(second); } } // sextet has 2 anti-colour lines else { double topology = UseRandom::rnd(); if(topology < 0.25){ ColinePtr newline=new_ptr(ColourLine()); cparent.first->addAntiColoured(second); cparent.second->addAntiColoured(first); newline->addAntiColoured(first); newline->addColoured(second); } else if(topology >=0.25 && topology < 0.5) { ColinePtr newline=new_ptr(ColourLine()); cparent.first->addAntiColoured(first); cparent.second->addAntiColoured(second); newline->addAntiColoured(first); newline->addColoured(second); } else if(topology >= 0.5 && topology < 0.75) { ColinePtr newline=new_ptr(ColourLine()); cparent.first->addAntiColoured(second); cparent.second->addAntiColoured(first); newline->addAntiColoured(first); newline->addColoured(second); } else { ColinePtr newline=new_ptr(ColourLine()); cparent.first->addAntiColoured(first); cparent.second->addAntiColoured(second); newline->addAntiColoured(first); newline->addColoured(second); } } } else if(_colourStructure == ChargedChargedNeutral) { if(!parent->data().coloured()) return; if(!back) { ColinePair cparent = ColinePair(parent->colourLine(), parent->antiColourLine()); // q -> q g if(cparent.first) { cparent.first->addColoured(first); } // qbar -> qbar g if(cparent.second) { cparent.second->addAntiColoured(first); } } else { ColinePair cfirst = ColinePair(first->colourLine(), first->antiColourLine()); // q -> q g if(cfirst.first) { cfirst.first->addColoured(parent); } // qbar -> qbar g if(cfirst.second) { cfirst.second->addAntiColoured(parent); } } } else if(_colourStructure == ChargedNeutralCharged) { if(!parent->data().coloured()) return; if(!back) { ColinePair cparent = ColinePair(parent->colourLine(), parent->antiColourLine()); // q -> q g if(cparent.first) { cparent.first->addColoured(second); } // qbar -> qbar g if(cparent.second) { cparent.second->addAntiColoured(second); } } else { if (second->dataPtr()->iColour()==PDT::Colour3 ) { ColinePtr newline=new_ptr(ColourLine()); newline->addColoured(second); newline->addColoured(parent); } else if (second->dataPtr()->iColour()==PDT::Colour3bar ) { ColinePtr newline=new_ptr(ColourLine()); newline->addAntiColoured(second); newline->addAntiColoured(parent); } } } else if(_colourStructure == NeutralChargedCharged ) { if(!back) { if(first->dataPtr()->coloured()) { ColinePtr newline=new_ptr(ColourLine()); if(first->dataPtr()->iColour()==PDT::Colour3) { newline->addColoured (first ); newline->addAntiColoured(second); } else if (first->dataPtr()->iColour()==PDT::Colour3bar) { newline->addColoured (second); newline->addAntiColoured(first ); } - else + else if(parent->dataPtr()->coloured()|| + first ->dataPtr()->coloured()|| + second->dataPtr()->coloured()) assert(false); } } else { ColinePair cfirst = ColinePair(first->colourLine(), first->antiColourLine()); // gamma -> q qbar if(cfirst.first) { cfirst.first->addAntiColoured(second); } // gamma -> qbar q else if(cfirst.second) { cfirst.second->addColoured(second); } - else + else if(parent->dataPtr()->coloured()|| + first ->dataPtr()->coloured()|| + second->dataPtr()->coloured()) assert(false); } } else { assert(false); } } void SplittingFunction::doinit() { Interfaced::doinit(); assert(_interactionType!=ShowerInteraction::UNDEFINED); assert((_colourStructure>0&&_interactionType==ShowerInteraction::QCD) || (_colourStructure<0&&_interactionType==ShowerInteraction::QED) ); if(_colourFactor>0.) return; // compute the colour factors if need if(_colourStructure==TripletTripletOctet) { _colourFactor = 4./3.; } else if(_colourStructure==OctetOctetOctet) { _colourFactor = 3.; } else if(_colourStructure==OctetTripletTriplet) { _colourFactor = 0.5; } else if(_colourStructure==TripletOctetTriplet) { _colourFactor = 4./3.; } else if(_colourStructure==SextetSextetOctet) { _colourFactor = 10./3.; } else if(_colourStructure<0) { _colourFactor = 1.; } else { assert(false); } } bool SplittingFunction::checkColours(const IdList & ids) const { if(_colourStructure==TripletTripletOctet) { if(ids[0]!=ids[1]) return false; if((ids[0]->iColour()==PDT::Colour3||ids[0]->iColour()==PDT::Colour3bar) && ids[2]->iColour()==PDT::Colour8) return true; return false; } else if(_colourStructure==OctetOctetOctet) { for(unsigned int ix=0;ix<3;++ix) { if(ids[ix]->iColour()!=PDT::Colour8) return false; } return true; } else if(_colourStructure==OctetTripletTriplet) { if(ids[0]->iColour()!=PDT::Colour8) return false; if(ids[1]->iColour()==PDT::Colour3&&ids[2]->iColour()==PDT::Colour3bar) return true; if(ids[1]->iColour()==PDT::Colour3bar&&ids[2]->iColour()==PDT::Colour3) return true; return false; } else if(_colourStructure==TripletOctetTriplet) { if(ids[0]!=ids[2]) return false; if((ids[0]->iColour()==PDT::Colour3||ids[0]->iColour()==PDT::Colour3bar) && ids[1]->iColour()==PDT::Colour8) return true; return false; } else if(_colourStructure==SextetSextetOctet) { if(ids[0]!=ids[1]) return false; if((ids[0]->iColour()==PDT::Colour6 || ids[0]->iColour()==PDT::Colour6bar) && ids[2]->iColour()==PDT::Colour8) return true; return false; } else if(_colourStructure==ChargedChargedNeutral) { if(ids[0]!=ids[1]) return false; if(ids[2]->iCharge()!=0) return false; if(ids[0]->iCharge()==ids[1]->iCharge()) return true; return false; } else if(_colourStructure==ChargedNeutralCharged) { if(ids[0]!=ids[2]) return false; if(ids[1]->iCharge()!=0) return false; if(ids[0]->iCharge()==ids[2]->iCharge()) return true; return false; } else if(_colourStructure==NeutralChargedCharged) { if(ids[1]->id()!=-ids[2]->id()) return false; if(ids[0]->iCharge()!=0) return false; if(ids[1]->iCharge()==-ids[2]->iCharge()) return true; return false; } else { assert(false); } return false; } namespace { bool hasColour(tPPtr p) { PDT::Colour colour = p->dataPtr()->iColour(); return colour==PDT::Colour3 || colour==PDT::Colour8 || colour == PDT::Colour6; } bool hasAntiColour(tPPtr p) { PDT::Colour colour = p->dataPtr()->iColour(); return colour==PDT::Colour3bar || colour==PDT::Colour8 || colour == PDT::Colour6bar; } } void SplittingFunction::evaluateFinalStateScales(ShowerPartnerType partnerType, Energy scale, double z, tShowerParticlePtr parent, tShowerParticlePtr emitter, tShowerParticlePtr emitted) { // identify emitter and emitted double zEmitter = z, zEmitted = 1.-z; bool bosonSplitting(false); // special for g -> gg, particle highest z is emitter if(emitter->id() == emitted->id() && emitter->id() == parent->id() && zEmitted > zEmitter) { swap(zEmitted,zEmitter); swap( emitted, emitter); } // otherwise if particle ID same else if(emitted->id()==parent->id()) { swap(zEmitted,zEmitter); swap( emitted, emitter); } // no real emitter/emitted else if(emitter->id()!=parent->id()) { bosonSplitting = true; } // may need to add angularOrder flag here // now the various scales // QED if(partnerType==ShowerPartnerType::QED) { assert(colourStructure()==ChargedChargedNeutral || colourStructure()==ChargedNeutralCharged || colourStructure()==NeutralChargedCharged ); // normal case if(!bosonSplitting) { assert(colourStructure()==ChargedChargedNeutral || colourStructure()==ChargedNeutralCharged ); // set the scales // emitter emitter->scales().QED = zEmitter*scale; emitter->scales().QED_noAO = scale; if(strictAO_) emitter->scales().QCD_c = min(zEmitter*scale,parent->scales().QCD_c ); else emitter->scales().QCD_c = min( scale,parent->scales().QCD_c ); emitter->scales().QCD_c_noAO = min(scale,parent->scales().QCD_c_noAO ); if(strictAO_) emitter->scales().QCD_ac = min(zEmitter*scale,parent->scales().QCD_ac ); else emitter->scales().QCD_ac = min( scale,parent->scales().QCD_ac ); emitter->scales().QCD_ac_noAO = min(scale,parent->scales().QCD_ac_noAO); // emitted emitted->scales().QED = zEmitted*scale; emitted->scales().QED_noAO = scale; emitted->scales().QCD_c = ZERO; emitted->scales().QCD_c_noAO = ZERO; emitted->scales().QCD_ac = ZERO; emitted->scales().QCD_ac_noAO = ZERO; } // gamma -> f fbar else { assert(colourStructure()==NeutralChargedCharged ); // emitter emitter->scales().QED = zEmitter*scale; emitter->scales().QED_noAO = scale; if(hasColour(emitter)) { emitter->scales().QCD_c = zEmitter*scale; emitter->scales().QCD_c_noAO = scale; } if(hasAntiColour(emitter)) { emitter->scales().QCD_ac = zEmitter*scale; emitter->scales().QCD_ac_noAO = scale; } // emitted emitted->scales().QED = zEmitted*scale; emitted->scales().QED_noAO = scale; if(hasColour(emitted)) { emitted->scales().QCD_c = zEmitted*scale; emitted->scales().QCD_c_noAO = scale; } if(hasAntiColour(emitted)) { emitted->scales().QCD_ac = zEmitted*scale; emitted->scales().QCD_ac_noAO = scale; } } } // QCD else { // normal case eg q -> q g and g -> g g if(!bosonSplitting) { if(strictAO_) emitter->scales().QED = min(zEmitter*scale,parent->scales().QED ); else emitter->scales().QED = min( scale,parent->scales().QED ); emitter->scales().QED_noAO = min(scale,parent->scales().QED_noAO); if(partnerType==ShowerPartnerType::QCDColourLine) { emitter->scales().QCD_c = zEmitter*scale; emitter->scales().QCD_c_noAO = scale; emitter->scales().QCD_ac = min(zEmitter*scale,parent->scales().QCD_ac ); emitter->scales().QCD_ac_noAO = min( scale,parent->scales().QCD_ac_noAO); } else { emitter->scales().QCD_c = min(zEmitter*scale,parent->scales().QCD_c ); emitter->scales().QCD_c_noAO = min( scale,parent->scales().QCD_c_noAO ); emitter->scales().QCD_ac = zEmitter*scale; emitter->scales().QCD_ac_noAO = scale; } // emitted emitted->scales().QED = ZERO; emitted->scales().QED_noAO = ZERO; emitted->scales().QCD_c = zEmitted*scale; emitted->scales().QCD_c_noAO = scale; emitted->scales().QCD_ac = zEmitted*scale; emitted->scales().QCD_ac_noAO = scale; } // g -> q qbar else { // emitter if(emitter->dataPtr()->charged()) { emitter->scales().QED = zEmitter*scale; emitter->scales().QED_noAO = scale; } emitter->scales().QCD_c = zEmitter*scale; emitter->scales().QCD_c_noAO = scale; emitter->scales().QCD_ac = zEmitter*scale; emitter->scales().QCD_ac_noAO = scale; // emitted if(emitted->dataPtr()->charged()) { emitted->scales().QED = zEmitted*scale; emitted->scales().QED_noAO = scale; } emitted->scales().QCD_c = zEmitted*scale; emitted->scales().QCD_c_noAO = scale; emitted->scales().QCD_ac = zEmitted*scale; emitted->scales().QCD_ac_noAO = scale; } } } void SplittingFunction::evaluateInitialStateScales(ShowerPartnerType partnerType, Energy scale, double z, tShowerParticlePtr parent, tShowerParticlePtr spacelike, tShowerParticlePtr timelike) { // scale for time-like child Energy AOScale = (1.-z)*scale; // QED if(partnerType==ShowerPartnerType::QED) { if(parent->id()==spacelike->id()) { // parent parent ->scales().QED = scale; parent ->scales().QED_noAO = scale; parent ->scales().QCD_c = min(scale,spacelike->scales().QCD_c ); parent ->scales().QCD_c_noAO = min(scale,spacelike->scales().QCD_c_noAO ); parent ->scales().QCD_ac = min(scale,spacelike->scales().QCD_ac ); parent ->scales().QCD_ac_noAO = min(scale,spacelike->scales().QCD_ac_noAO); // timelike timelike->scales().QED = AOScale; timelike->scales().QED_noAO = scale; timelike->scales().QCD_c = ZERO; timelike->scales().QCD_c_noAO = ZERO; timelike->scales().QCD_ac = ZERO; timelike->scales().QCD_ac_noAO = ZERO; } else if(parent->id()==timelike->id()) { parent ->scales().QED = scale; parent ->scales().QED_noAO = scale; if(hasColour(parent)) { parent ->scales().QCD_c = scale; parent ->scales().QCD_c_noAO = scale; } if(hasAntiColour(parent)) { parent ->scales().QCD_ac = scale; parent ->scales().QCD_ac_noAO = scale; } // timelike timelike->scales().QED = AOScale; timelike->scales().QED_noAO = scale; if(hasColour(timelike)) { timelike->scales().QCD_c = AOScale; timelike->scales().QCD_c_noAO = scale; } if(hasAntiColour(timelike)) { timelike->scales().QCD_ac = AOScale; timelike->scales().QCD_ac_noAO = scale; } } else { parent ->scales().QED = scale; parent ->scales().QED_noAO = scale; parent ->scales().QCD_c = ZERO ; parent ->scales().QCD_c_noAO = ZERO ; parent ->scales().QCD_ac = ZERO ; parent ->scales().QCD_ac_noAO = ZERO ; // timelike timelike->scales().QED = AOScale; timelike->scales().QED_noAO = scale; if(hasColour(timelike)) { timelike->scales().QCD_c = min(AOScale,spacelike->scales().QCD_ac ); timelike->scales().QCD_c_noAO = min( scale,spacelike->scales().QCD_ac_noAO); } if(hasAntiColour(timelike)) { timelike->scales().QCD_ac = min(AOScale,spacelike->scales().QCD_c ); timelike->scales().QCD_ac_noAO = min( scale,spacelike->scales().QCD_c_noAO ); } } } // QCD else { // timelike if(timelike->dataPtr()->charged()) { timelike->scales().QED = AOScale; timelike->scales().QED_noAO = scale; } if(hasColour(timelike)) { timelike->scales().QCD_c = AOScale; timelike->scales().QCD_c_noAO = scale; } if(hasAntiColour(timelike)) { timelike->scales().QCD_ac = AOScale; timelike->scales().QCD_ac_noAO = scale; } if(parent->id()==spacelike->id()) { parent ->scales().QED = min(scale,spacelike->scales().QED ); parent ->scales().QED_noAO = min(scale,spacelike->scales().QED_noAO ); parent ->scales().QCD_c = min(scale,spacelike->scales().QCD_c ); parent ->scales().QCD_c_noAO = min(scale,spacelike->scales().QCD_c_noAO ); parent ->scales().QCD_ac = min(scale,spacelike->scales().QCD_ac ); parent ->scales().QCD_ac_noAO = min(scale,spacelike->scales().QCD_ac_noAO); } else { if(parent->dataPtr()->charged()) { parent ->scales().QED = scale; parent ->scales().QED_noAO = scale; } if(hasColour(parent)) { parent ->scales().QCD_c = scale; parent ->scales().QCD_c_noAO = scale; } if(hasAntiColour(parent)) { parent ->scales().QCD_ac = scale; parent ->scales().QCD_ac_noAO = scale; } } } } void SplittingFunction::evaluateDecayScales(ShowerPartnerType partnerType, Energy scale, double z, tShowerParticlePtr parent, tShowerParticlePtr spacelike, tShowerParticlePtr timelike) { assert(parent->id()==spacelike->id()); // angular-ordered scale for 2nd child Energy AOScale = (1.-z)*scale; // QED if(partnerType==ShowerPartnerType::QED) { // timelike timelike->scales().QED = AOScale; timelike->scales().QED_noAO = scale; timelike->scales().QCD_c = ZERO; timelike->scales().QCD_c_noAO = ZERO; timelike->scales().QCD_ac = ZERO; timelike->scales().QCD_ac_noAO = ZERO; // spacelike spacelike->scales().QED = scale; spacelike->scales().QED_noAO = scale; } // QCD else { // timelike timelike->scales().QED = ZERO; timelike->scales().QED_noAO = ZERO; timelike->scales().QCD_c = AOScale; timelike->scales().QCD_c_noAO = scale; timelike->scales().QCD_ac = AOScale; timelike->scales().QCD_ac_noAO = scale; // spacelike spacelike->scales().QED = max(scale,parent->scales().QED ); spacelike->scales().QED_noAO = max(scale,parent->scales().QED_noAO ); } spacelike->scales().QCD_c = max(scale,parent->scales().QCD_c ); spacelike->scales().QCD_c_noAO = max(scale,parent->scales().QCD_c_noAO ); spacelike->scales().QCD_ac = max(scale,parent->scales().QCD_ac ); spacelike->scales().QCD_ac_noAO = max(scale,parent->scales().QCD_ac_noAO); } diff --git a/Tests/Rivet/LHC/LHC-13-Jets-10.in b/Tests/Rivet/LHC/LHC-13-Jets-10.in --- a/Tests/Rivet/LHC/LHC-13-Jets-10.in +++ b/Tests/Rivet/LHC/LHC-13-Jets-10.in @@ -1,6 +1,8 @@ # -*- ThePEG-repository -*- # CMS Jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2016_I1459051 insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2016_CONF_2016_092 # ATLAS jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2018_I1634970 +# ATLAS Lund plane +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2020_I1790256 diff --git a/Tests/Rivet/LHC/LHC-13-Jets-8.in b/Tests/Rivet/LHC/LHC-13-Jets-8.in --- a/Tests/Rivet/LHC/LHC-13-Jets-8.in +++ b/Tests/Rivet/LHC/LHC-13-Jets-8.in @@ -1,10 +1,11 @@ # -*- ThePEG-repository -*- # CMS Jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2016_I1459051 insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2016_CONF_2016_092 insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2018_I1682495 # ATLAS jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2018_I1634970 # ATLAS soft-drop insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2017_I1637587 - +# ATLAS Lund plane +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2020_I1790256 diff --git a/Tests/Rivet/LHC/LHC-13-Jets-9.in b/Tests/Rivet/LHC/LHC-13-Jets-9.in --- a/Tests/Rivet/LHC/LHC-13-Jets-9.in +++ b/Tests/Rivet/LHC/LHC-13-Jets-9.in @@ -1,7 +1,9 @@ # -*- ThePEG-repository -*- # CMS Jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2016_I1459051 insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2016_CONF_2016_092 insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2018_I1682495 # ATLAS jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2018_I1634970 +# ATLAS Lund plane +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2020_I1790256 diff --git a/Tests/Rivet/LHC/LHC-7-Jets-10.in b/Tests/Rivet/LHC/LHC-7-Jets-10.in --- a/Tests/Rivet/LHC/LHC-7-Jets-10.in +++ b/Tests/Rivet/LHC/LHC-7-Jets-10.in @@ -1,41 +1,41 @@ ################################################## # select the analyses ################################################## # ATLAS di-jet decorrelation insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_S8971293 # ATLAS jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2010_S8817804 insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2012_I1082936 # ATLAS dijet with veto insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_S9126244 # CMS jet cross section insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2011_S9086218 # CMS 3/2 jet cross section ratio insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2011_S9088458 # ATLAS track jet insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_I919017 # CMS central and forward jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2012_I1087342 # ATLAS subjets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2012_I1094564 # CMS jet structure -insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2013_I1224539_DIJET +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2013_I1224539:JMODE=DIJET # CMS 4-jet insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2013_I1273574 # ATLAS leading jet UE insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2014_I1298811 # ATLAS jet veto insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2014_I1307243 # ATLAS inclusive jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2014_I1325553 # CMS jet ratios insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2014_I1298810 # flavour composition of jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2012_I1188891 # CMS Jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2013_I1208923 # ATLAS Jet frag insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_I929691 # CMS shapes etc insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2012_I1111014 diff --git a/Tests/Rivet/LHC/LHC-7-Jets-5.in b/Tests/Rivet/LHC/LHC-7-Jets-5.in --- a/Tests/Rivet/LHC/LHC-7-Jets-5.in +++ b/Tests/Rivet/LHC/LHC-7-Jets-5.in @@ -1,47 +1,47 @@ ################################################## # select the analyses ################################################## # ATLAS jet shapes insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_S8924791 # ATLAS di-jet decorrelation insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_S8971293 # ATLAS jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2010_S8817804 insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2012_I1082936 # CMS event shapes insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2011_S8957746 # ATLAS dijet with veto insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_S9126244 # CMS dijet decorrelation insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2011_S8950903 # CMS jet cross section insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2011_S9086218 # CMS 3/2 jet cross section ratio insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2011_S9088458 # ATLAS track jet insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_I919017 # ATLAS subjets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2012_I1094564 # CMS jet structure -insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2013_I1224539_DIJET +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2013_I1224539:JMODE=DIJET # CMS 4-jet insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2013_I1273574 # ATLAS leading jet UE insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2014_I1298811 # ATLAS jet veto insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2014_I1307243 # ATLAS inclusive jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2014_I1325553 # CMS jet ratios insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2014_I1298810 # flavour composition of jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2012_I1188891 # CMS Jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2013_I1208923 # CMS event shapes insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2014_I1305624 # ATLAS Jet frag insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_I929691 # CMS shapes etc insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2012_I1111014 diff --git a/Tests/Rivet/LHC/LHC-7-Jets-6.in b/Tests/Rivet/LHC/LHC-7-Jets-6.in --- a/Tests/Rivet/LHC/LHC-7-Jets-6.in +++ b/Tests/Rivet/LHC/LHC-7-Jets-6.in @@ -1,51 +1,51 @@ ################################################## # select the analyses ################################################## # ATLAS jet shapes insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_S8924791 # ATLAS di-jet decorrelation insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_S8971293 # ATLAS jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2010_S8817804 insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2012_I1082936 # ATLAS dijet with veto insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_S9126244 # CMS dijet decorrelation insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2011_S8950903 # CMS jet cross section insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2011_S9086218 # CMS 3/2 jet cross section ratio insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2011_S9088458 # ATLAS track jet insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_I919017 # CMS central and forward jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2012_I1087342 # ATLAS high pT jet shapes insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2012_I1119557 # ATLAS subjets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2012_I1094564 # CMS jet structure -insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2013_I1224539_DIJET +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2013_I1224539:JMODE=DIJET # CMS 4-jet insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2013_I1273574 # ATLAS leading jet UE insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2014_I1298811 # ATLAS jet veto insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2014_I1307243 # ATLAS inclusive jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2014_I1325553 # CMS jet ratios insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2014_I1298810 # flavour composition of jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2012_I1188891 # ATLAS Jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2015_I1387176 # CMS Jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2013_I1208923 # CMS event shapes insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2014_I1305624 # ATLAS Jet frag insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_I929691 # CMS shapes etc insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2012_I1111014 diff --git a/Tests/Rivet/LHC/LHC-7-Jets-7.in b/Tests/Rivet/LHC/LHC-7-Jets-7.in --- a/Tests/Rivet/LHC/LHC-7-Jets-7.in +++ b/Tests/Rivet/LHC/LHC-7-Jets-7.in @@ -1,45 +1,45 @@ ################################################## # select the analyses ################################################## # ATLAS jet shapes insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_S8924791 # ATLAS di-jet decorrelation insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_S8971293 # ATLAS jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2010_S8817804 insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2012_I1082936 # ATLAS dijet with veto insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_S9126244 # CMS jet cross section insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2011_S9086218 # CMS 3/2 jet cross section ratio insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2011_S9088458 # ATLAS track jet insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_I919017 # CMS central and forward jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2012_I1087342 # ATLAS subjets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2012_I1094564 # CMS jet structure -insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2013_I1224539_DIJET +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2013_I1224539:JMODE=DIJET # CMS 4-jet insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2013_I1273574 # ATLAS leading jet UE insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2014_I1298811 # ATLAS jet veto insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2014_I1307243 # ATLAS inclusive jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2014_I1325553 # CMS jet ratios insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2014_I1298810 # flavour composition of jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2012_I1188891 # CMS Jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2013_I1208923 # CMS event shapes insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2014_I1305624 # ATLAS Jet frag insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_I929691 # CMS shapes etc insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2012_I1111014 diff --git a/Tests/Rivet/LHC/LHC-7-Jets-8.in b/Tests/Rivet/LHC/LHC-7-Jets-8.in --- a/Tests/Rivet/LHC/LHC-7-Jets-8.in +++ b/Tests/Rivet/LHC/LHC-7-Jets-8.in @@ -1,40 +1,40 @@ ################################################## # select the analyses ################################################## # ATLAS di-jet decorrelation insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_S8971293 # ATLAS jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2010_S8817804 insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2012_I1082936 # ATLAS dijet with veto insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_S9126244 # CMS jet cross section insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2011_S9086218 # CMS 3/2 jet cross section ratio insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2011_S9088458 # ATLAS track jet insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_I919017 # CMS central and forward jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2012_I1087342 # ATLAS subjets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2012_I1094564 # CMS jet structure -insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2013_I1224539_DIJET +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2013_I1224539:JMODE=DIJET # CMS 4-jet insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2013_I1273574 # ATLAS leading jet UE insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2014_I1298811 # ATLAS jet veto insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2014_I1307243 # ATLAS inclusive jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2014_I1325553 # CMS jet ratios insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2014_I1298810 # flavour composition of jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2012_I1188891 # CMS Jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2013_I1208923 # ATLAS Jet frag insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_I929691 # CMS shapes etc insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2012_I1111014 diff --git a/Tests/Rivet/LHC/LHC-7-Jets-9.in b/Tests/Rivet/LHC/LHC-7-Jets-9.in --- a/Tests/Rivet/LHC/LHC-7-Jets-9.in +++ b/Tests/Rivet/LHC/LHC-7-Jets-9.in @@ -1,44 +1,44 @@ ################################################## # select the analyses ################################################## # ATLAS di-jet decorrelation insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_S8971293 # ATLAS jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2010_S8817804 insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2012_I1082936 # ATLAS dijet with veto insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_S9126244 # CMS jet cross section insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2011_S9086218 # CMS 3/2 jet cross section ratio insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2011_S9088458 # ATLAS track jet insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_I919017 # CMS central and forward jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2012_I1087342 # ATLAS subjets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2012_I1094564 # CMS jet structure -insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2013_I1224539_DIJET +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2013_I1224539:JMODE=DIJET # CMS 4-jet insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2013_I1273574 # ATLAS leading jet UE insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2014_I1298811 # ATLAS jet veto insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2014_I1307243 # ATLAS inclusive jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2014_I1325553 # CMS jet ratios insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2014_I1298810 # flavour composition of jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2012_I1188891 # CMS Jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2013_I1208923 # ATLAS Jet frag insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_I929691 # CMS shapes etc insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2012_I1111014 diff --git a/Tests/Rivet/LHC/LHC-7-W-Jet-e.in b/Tests/Rivet/LHC/LHC-7-W-Jet-e.in --- a/Tests/Rivet/LHC/LHC-7-W-Jet-e.in +++ b/Tests/Rivet/LHC/LHC-7-W-Jet-e.in @@ -1,5 +1,5 @@ ################################################## # select the analyses ################################################## # CMS jet mass -insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2013_I1224539_WJET +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2013_I1224539:JMODE=W diff --git a/Tests/Rivet/LHC/LHC-7-Z-Jet-e.in b/Tests/Rivet/LHC/LHC-7-Z-Jet-e.in --- a/Tests/Rivet/LHC/LHC-7-Z-Jet-e.in +++ b/Tests/Rivet/LHC/LHC-7-Z-Jet-e.in @@ -1,7 +1,7 @@ ################################################## # select the analyses ################################################## # CMS jet mass -insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2013_I1224539_ZJET +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2013_I1224539:JMODE=Z # CMS Z ang correlations and event shapes insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2013_I1209721 \ No newline at end of file diff --git a/Tests/python/LowEnergy.py b/Tests/python/LowEnergy.py --- a/Tests/python/LowEnergy.py +++ b/Tests/python/LowEnergy.py @@ -1,476 +1,477 @@ #! /usr/bin/env python +from __future__ import print_function import yoda,os,math,subprocess,optparse from string import Template # get the path for the rivet data p = subprocess.Popen(["rivet-config", "--datadir"],stdout=subprocess.PIPE) -path=p.communicate()[0].strip() +path=p.communicate()[0].strip().decode("UTF-8") #Define the arguments op = optparse.OptionParser(usage=__doc__) op.add_option("--process" , dest="processes" , default=[], action="append") op.add_option("--path" , dest="path" , default=path) op.add_option("--non-perturbative", dest="nonPerturbative" , default=False, action="store_true") op.add_option("--perturbative" , dest="perturbative" , default=False, action="store_true") op.add_option("--dest" , dest="dest" , default="Rivet") op.add_option("--list" , dest="list" , default=False, action="store_true") op.add_option("--flavour" , dest="flavour" , default="All" ) op.add_option("--plots" , dest="plot" , default=False, action="store_true") opts, args = op.parse_args() path=opts.path thresholds = [0.7,2.*.5,2.*1.87,2.*5.28] # the list of analyses and processes analyses = { 'KK' : {}, 'PiPi' : {}, 'PPbar' : {}, "3Pi" : {}, "EtaprimePiPi" : {}, "4Pi" : {}, "EtaPhi" : {}, "EtaOmega" : {}, "2K1Pi" : {}, "2K2Pi" : {}, "4K" : {}, "6m" : {}, "EtaPiPi" : {}, "OmegaPi" : {}, "PiGamma" : {}, "EtaGamma" : {}, "PhiPi" : {}, "OmegaPiPi" : {}, "DD" : {}, "BB" : {}, "5Pi" : {}, "LL" : {}, "Baryon" : {} } # pi+pi- analyses["PiPi"]["KLOE_2009_I797438" ] = ["d02-x01-y01"] analyses["PiPi"]["KLOE_2005_I655225" ] = ["d02-x01-y01"] analyses["PiPi"]["KLOE2_2017_I1634981" ] = ["d01-x01-y01"] analyses["PiPi"]["BABAR_2009_I829441" ] = ["d01-x01-y01"] analyses["PiPi"]["DM1_1978_I134061" ] = ["d01-x01-y01"] analyses["PiPi"]["DM2_1989_I267118" ] = ["d01-x01-y01"] analyses["PiPi"]["CMD2_2007_I728302" ] = ["d02-x01-y01"] analyses["PiPi"]["CMD2_2006_I728191" ] = ["d03-x01-y01"] analyses["PiPi"]["BESIII_2016_I1385603"] = ["d01-x01-y01"] analyses["PiPi"]["SND_2005_I686349" ] = ["d01-x01-y01"] analyses["PiPi"]["CMD_1985_I221309" ] = ["d01-x01-y01","d02-x01-y01"] analyses["PiPi"]["CMD2_2002_I568807" ] = ["d01-x01-y02"] analyses["PiPi"]["CMD2_1999_I498859" ] = ["d01-x01-y01"] analyses['PiPi']["CLEOC_2005_I693873" ] = ["d01-x01-y01"] analyses['PiPi']["ND_1991_I321108" ] = ["d11-x01-y01"] analyses['PiPi']["OLYA_1984_I208231" ] = ["d01-x01-y01"] analyses['PiPi']["SND_2020_I1789269" ] = ["d01-x01-y04"] # K+K- and K_S^0 K_L^0 analyses['KK']["BESIII_2018_I1704558"] = ["d01-x01-y01"] analyses['KK']["BABAR_2013_I1238807" ] = ["d01-x01-y01"] analyses['KK']["DM1_1981_I156053" ] = ["d01-x01-y01"] analyses['KK']["DM1_1981_I156054" ] = ["d01-x01-y01"] analyses['KK']["CLEOC_2005_I693873" ] = ["d01-x01-y02"] analyses['KK']["BABAR_2015_I1383130" ] = ["d01-x01-y04"] analyses['KK']["DM2_1988_I262690" ] = ["d01-x01-y01"] analyses['KK']["SND_2007_I755881" ] = ["d01-x01-y01"] analyses['KK']["SND_2001_I533574" ] = ["d01-x01-y01","d01-x01-y02","d01-x01-y03", "d02-x01-y01","d02-x01-y02","d02-x01-y03"] analyses['KK']["SND_2006_I720035" ] = ["d01-x01-y01"] analyses['KK']["BABAR_2014_I1287920" ] = ["d09-x01-y01"] analyses['KK']["CMD2_2003_I601222" ] = ["d01-x01-y01"] analyses['KK']["CMD3_2016_I1444990" ] = ["d01-x01-y06"] analyses['KK']["CMD2_1995_I406880" ] = ["d01-x01-y01","d01-x01-y02"] analyses['KK']["CMD2_1999_I502164" ] = ["d01-x01-y01","d02-x01-y01", "d03-x01-y01","d04-x01-y01"] analyses['KK']["CMD2_2008_I782516" ] = ["d01-x01-y01","d02-x01-y01"] analyses['KK']["ND_1991_I321108" ] = ["d12-x01-y01","d13-x01-y01"] analyses['KK']["OLYA_1981_I173076" ] = ["d01-x01-y01"] analyses['KK']["SND_2016_I1484677" ] = ["d01-x01-y01","d02-x01-y01"] analyses['KK']["BABAR_2020_I1769654" ] = ["d01-x01-y01"] # proton-antiproton analyses['PPbar']["BESIII_2019_I1736235"] = ["d01-x01-y01"] analyses['PPbar']["BESIII_2019_I1718337"] = ["d01-x01-y01"] analyses['PPbar']["BESIII_2015_I1358937"] = ["d01-x01-y05"] analyses['PPbar']["BABAR_2013_I1217421" ] = ["d01-x01-y01"] analyses['PPbar']["BABAR_2013_I1247058" ] = ["d01-x01-y01"] analyses['PPbar']["SND_2014_I1321689" ] = ["d01-x01-y01","d02-x01-y01"] analyses['PPbar']["CMD3_2016_I1385598" ] = ["d01-x01-y06"] analyses['PPbar']["CLEOC_2005_I693873" ] = ["d01-x01-y03"] analyses['PPbar']["BABAR_2006_I700020" ] = ["d01-x01-y01","d02-x01-y01"] analyses['PPbar']["DM2_1983_I190558" ] = ["d01-x01-y01"] analyses["PPbar"]["DM2_1990_I297706" ] = ["d01-x01-y01"] analyses["PPbar"]["DM1_1979_I141565" ] = ["d01-x01-y01"] analyses["PPbar"]["FENICE_1998_I471263" ] = ["d01-x01-y01"] analyses["PPbar"]["FENICE_1994_I377833" ] = ["d01-x01-y01"] analyses['PPbar']["BESII_2005_I685906" ] = ["d01-x01-y01"] analyses['PPbar']["BESIII_2014_I1286898"] = ["d01-x01-y06"] # pi0 gamma analyses["PiGamma"]["SND_2018_I1694988"] = ["d01-x01-y01"] analyses["PiGamma"]["SND_2016_I1418483"] = ["d01-x01-y05"] analyses["PiGamma"]["SND_2003_I612867" ] = ["d01-x01-y01"] analyses["PiGamma"]["CMD2_2005_I658856"] = ["d02-x01-y01"] analyses["PiGamma"]["SND_2000_I524221" ] = ["d01-x01-y02"] # eta gamma analyses["EtaGamma"]["CMD2_2005_I658856" ] = ["d01-x01-y01"] analyses["EtaGamma"]["SND_2006_I717778" ] = ["d01-x01-y01","d02-x01-y01"] analyses["EtaGamma"]["SND_2014_I1275333" ] = ["d01-x01-y01"] analyses["EtaGamma"]["SND_2000_I524221" ] = ["d01-x01-y01"] analyses["EtaGamma"]["CMD2_1999_I503154" ] = ["d01-x01-y01"] analyses["EtaGamma"]["CMD2_2001_I554522" ] = ["d01-x01-y01"] analyses['EtaGamma']["CMD2_1995_I406880" ] = ["d01-x01-y04"] analyses['EtaGamma']["BABAR_2006_I716277"] = ["d01-x01-y01"] # 3 pion analyses["3Pi"]["BABAR_2004_I656680" ] = ["d01-x01-y01"] analyses["3Pi"]["BESIII_2019_I1773081" ] = ["d01-x01-y01"] analyses["3Pi"]["SND_2002_I582183" ] = ["d01-x01-y01"] analyses["3Pi"]["SND_2003_I619011" ] = ["d01-x01-y01"] analyses["3Pi"]["SND_1999_I508003" ] = ["d01-x01-y01"] analyses["3Pi"]["SND_2001_I533574" ] = ["d01-x01-y04","d02-x01-y04"] analyses["3Pi"]["CMD2_2000_I523691" ] = ["d01-x01-y01"] analyses["3Pi"]["CMD2_1998_I480170" ] = ["d01-x01-y01"] analyses['3Pi']["CMD2_1995_I406880" ] = ["d01-x01-y03"] analyses['3Pi']["DM2_1992_I339265" ] = ["d01-x01-y01"] analyses['3Pi']["DM1_1980_I140174" ] = ["d01-x01-y01"] analyses['3Pi']["ND_1991_I321108" ] = ["d05-x01-y01","d10-x01-y04"] analyses['3Pi']["GAMMAGAMMA_1981_I158474"] = ["d01-x01-y01"] analyses["3Pi"]["CLEO_2006_I691720" ] = ["d01-x01-y01"] analyses["3Pi"]["SND_2015_I1389908" ] = ["d01-x01-y01"] # eta pipi analyses["EtaPiPi"]["BABAR_2018_I1700745"] = ["d01-x01-y01","d02-x01-y01"] analyses["EtaPiPi"]["BABAR_2018_I1647139"] = ["d01-x01-y01"] analyses["EtaPiPi"]["SND_2015_I1332929" ] = ["d01-x01-y01"] analyses["EtaPiPi"]["SND_2018_I1638368" ] = ["d01-x01-y01"] analyses["EtaPiPi"]["BABAR_2007_I758568" ] = ["d01-x01-y01","d02-x01-y01"] analyses["EtaPiPi"]["CMD2_2000_I532970" ] = ["d02-x01-y01"] analyses["EtaPiPi"]["DM2_1988_I264144" ] = ["d01-x01-y01"] analyses['EtaPiPi']["ND_1991_I321108" ] = ["d06-x01-y01","d14-x01-y01"] analyses['EtaPiPi']["CMD3_2019_I1744510" ] = ["d02-x01-y01"] # eta' pipi analyses["EtaprimePiPi"]["BABAR_2007_I758568"] = ["d05-x01-y01","d06-x01-y01"] # Eta Phi analyses["EtaPhi"]["BABAR_2008_I765258" ] = ["d04-x01-y01","d05-x01-y01"] analyses["EtaPhi"]["BABAR_2007_I758568" ] = ["d08-x01-y01","d09-x01-y01"] analyses["EtaPhi"]["SND_2018_I1693737" ] = ["d01-x01-y01"] analyses["EtaPhi"]["BABAR_2017_I1511276" ] = ["d03-x01-y01"] analyses["EtaPhi"]["SND_2019_I1726419" ] = ["d01-x01-y01","d01-x01-y03"] analyses["EtaPhi"]["CMD3_2019_I1740541" ] = ["d01-x01-y06","d02-x01-y06","d03-x01-y06"] analyses["EtaPhi"]["CMD3_2017_I1606078" ] = ["d01-x01-y01"] analyses["EtaPhi"]["BABAR_2006_I709730" ] = ["d02-x01-y01"] analyses["EtaPhi"]["BESII_2008_I801210" ] = ["d01-x01-y03"] analyses["EtaPhi"]["BABAR_2006_I731865" ] = ["d01-x01-y02"] analyses["EtaPhi"]["BELLE_2009_I823878" ] = ["d01-x01-y01"] # Eta Omega analyses["EtaOmega"]["SND_2016_I1473343" ] = ["d01-x01-y01"] analyses["EtaOmega"]["BABAR_2006_I709730"] = ["d02-x01-y01"] analyses["EtaOmega"]["SND_2019_I1726419" ] = ["d01-x01-y01","d01-x01-y02"] analyses["EtaOmega"]["CMD3_2017_I1606078"] = ["d01-x01-y01","d01-x01-y02"] analyses["EtaOmega"]["BESII_2008_I801210" ] = ["d01-x01-y03"] # 4 pions analyses["4Pi"]["BABAR_2017_I1621593" ] = ["d01-x01-y01","d02-x01-y01"] analyses["4Pi"]["BABAR_2012_I1086164" ] = ["d01-x01-y01"] analyses["4Pi"]["CMD2_2000_I531667" ] = ["d01-x01-y01"] analyses["4Pi"]["CMD2_2004_I648023" ] = ["d01-x01-y01"] analyses["4Pi"]["BABAR_2005_I676691" ] = ["d01-x01-y01"] analyses["4Pi"]["CMD2_2000_I511375" ] = ["d01-x01-y01"] analyses["4Pi"]["CMD2_1999_I483994" ] = ["d01-x01-y01","d02-x01-y01","d03-x01-y01"] analyses["4Pi"]["BESII_2008_I801210" ] = ["d01-x01-y01"] analyses["4Pi"]["KLOE_2008_I791841" ] = ["d01-x01-y01"] analyses['4Pi']["ND_1991_I321108" ] = ["d07-x01-y01","d08-x01-y01","d10-x01-y01","d10-x01-y02", "d01-x01-y01","d02-x01-y01","d03-x01-y01","d04-x01-y01","d10-x01-y03"] analyses['4Pi']["BESII_2007_I750713" ] = ["d01-x01-y03"] analyses['4Pi']["SND_2001_I579319" ] = ["d01-x01-y01","d02-x01-y01"] analyses['4Pi']["DM1_1982_I168552" ] = ["d01-x01-y01"] analyses['4Pi']["DM1_1979_I132828" ] = ["d01-x01-y01"] analyses['4Pi']["GAMMAGAMMA_1980_I153382"] = ["d01-x01-y01"] analyses['4Pi']["GAMMAGAMMA_1981_I158474"] = ["d01-x01-y02"] # (these are Omega(-> pi0 gamma) pi0) analyses["OmegaPi"]["SND_2016_I1489182" ] = ["d01-x01-y01"] analyses["OmegaPi"]["SND_2000_I527752" ] = ["d01-x01-y01"] analyses["OmegaPi"]["SND_2000_I503946" ] = ["d01-x01-y01"] analyses["OmegaPi"]["CMD2_2003_I616446" ] = ["d01-x01-y01"] # non Omega analyses["OmegaPi"]["SND_2002_I587084" ] = ["d01-x01-y01"] analyses["OmegaPi"]["CMD2_2004_I630009" ] = ["d01-x01-y01"] analyses["OmegaPi"]["KLOE_2008_I791841" ] = ["d02-x01-y01"] # from 4 Pion analyses["OmegaPi"]["CMD2_1999_I483994" ] = ["d03-x01-y01"] analyses['OmegaPi']["ND_1991_I321108" ] = ["d01-x01-y01","d02-x01-y01","d03-x01-y01", "d04-x01-y01","d10-x01-y03"] # 5 pion and related analyses["OmegaPiPi"]["DM1_1981_I166964" ] = ["d01-x01-y01"] analyses["OmegaPiPi"]["DM2_1992_I339265" ] = ["d02-x01-y01"] analyses["OmegaPiPi"]["CMD2_2000_I532970" ] = ["d01-x01-y01"] analyses["OmegaPiPi"]["BABAR_2018_I1700745"] = ["d01-x01-y01","d03-x01-y01"] analyses["OmegaPiPi"]["BABAR_2007_I758568" ] = ["d01-x01-y01","d03-x01-y01","d04-x01-y01"] analyses['OmegaPiPi']["ND_1991_I321108" ] = ["d14-x01-y01"] analyses["5Pi"]["CMD2_2000_I532970" ] = ["d03-x01-y01"] analyses["5Pi"]["BABAR_2007_I758568" ] = ["d01-x01-y01"] analyses['5Pi']["ND_1991_I321108" ] = ["d14-x01-y01"] analyses['5Pi']["GAMMAGAMMA_1981_I158474" ] = ["d01-x01-y03"] analyses["5Pi"]["BABAR_2018_I1700745" ] = ["d01-x01-y01"] # 2K 1 pi analyses["2K1Pi"]["BABAR_2008_I765258" ] = ["d01-x01-y01","d02-x01-y01"] analyses["2K1Pi"]["DM1_1982_I176801" ] = ["d01-x01-y01"] analyses["2K1Pi"]["DM2_1991_I318558" ] = ["d01-x01-y01","d02-x01-y01"] analyses["2K1Pi"]["BESII_2008_I801208" ] = ["d01-x01-y01"] analyses["2K1Pi"]["SND_2018_I1637194" ] = ["d01-x01-y01"] analyses["2K1Pi"]["BESIII_2018_I1691798"] = ["d01-x01-y01"] analyses["2K1Pi"]["BABAR_2017_I1511276" ] = ["d01-x01-y01"] analyses["PhiPi"]["BABAR_2017_I1511276" ] = ["d01-x01-y01","d02-x01-y01"] analyses["PhiPi"]["BABAR_2008_I765258" ] = ["d02-x01-y01","d03-x01-y01"] # 2K 2 pi analyses["2K2Pi"]["DM1_1982_I169382" ] = ["d01-x01-y01"] analyses["2K2Pi"]["BABAR_2005_I676691" ] = ["d02-x01-y01"] analyses["2K2Pi"]["BABAR_2014_I1287920" ] = ["d09-x01-y01","d10-x01-y01","d11-x01-y01"] analyses["2K2Pi"]["BABAR_2012_I892684" ] = ["d01-x01-y01","d02-x01-y01","d03-x01-y01", "d04-x01-y01","d05-x01-y01", "d06-x01-y01","d07-x01-y01"] analyses["2K2Pi"]["BABAR_2007_I747875" ] = ["d01-x01-y01","d02-x01-y01","d03-x01-y01", "d04-x01-y01","d05-x01-y01","d07-x01-y01"] analyses["2K2Pi"]["BESII_2008_I801210" ] = ["d01-x01-y02"] analyses["2K2Pi"]["BESII_2008_I801208" ] = ["d01-x01-y02"] analyses["2K2Pi"]["BELLE_2009_I809630" ] = ["d01-x01-y01"] analyses["2K2Pi"]["CMD3_2016_I1395968" ] = ["d01-x01-y01"] analyses['2K2Pi']["BESII_2007_I750713" ] = ["d01-x01-y04"] analyses["2K2Pi"]["BABAR_2017_I1511276" ] = ["d03-x01-y01","d04-x01-y01"] analyses["2K2Pi"]["BABAR_2017_I1591716" ] = ["d01-x01-y01","d02-x01-y01"] analyses['2K2Pi']["BESIII_2018_I1699641"] = ["d01-x01-y01","d02-x01-y01"] analyses['2K2Pi']["CMD3_2019_I1770428" ] = ["d01-x01-y06"] analyses['2K2Pi']["BESIII_2020_I1775344"] = ["d01-x01-y01","d02-x01-y01","d03-x01-y01", "d04-x01-y01","d05-x01-y01","d06-x01-y01"] # 4K analyses["4K"]["BESIII_2019_I1743841"] = ["d01-x01-y01","d02-x01-y01"] analyses["4K"]["BABAR_2005_I676691" ] = ["d03-x01-y01"] analyses["4K"]["BABAR_2014_I1287920" ] = ["d12-x01-y01"] analyses["4K"]["BABAR_2012_I892684" ] = ["d08-x01-y01"] analyses["4K"]["BABAR_2007_I747875" ] = ["d07-x01-y01"] analyses['4K']["BESII_2007_I750713" ] = ["d01-x01-y06","d01-x01-y07"] # 6 mesons analyses["6m"]["CMD3_2013_I1217420" ] = ["d01-x01-y01"] analyses["6m"]["SND_2019_I1726419" ] = ["d01-x01-y01","d01-x01-y04"] analyses["6m"]["CMD3_2017_I1606078" ] = ["d01-x01-y03","d01-x01-y04"] analyses["6m"]["CMD3_2019_I1720610" ] = ["d01-x01-y01","d01-x01-y02","d01-x01-y03"] analyses["6m"]["BABAR_2018_I1700745"] = ["d04-x01-y01","d05-x01-y01"] analyses["6m"]["SND_2016_I1471515" ] = ["d01-x01-y06"] analyses["6m"]["DM1_1981_I166353" ] = ["d01-x01-y01"] analyses["6m"]["BABAR_2006_I709730" ] = ["d01-x01-y01","d02-x01-y01","d03-x01-y01"] analyses["6m"]["BABAR_2007_I758568" ] = ["d05-x01-y01","d07-x01-y01", "d08-x01-y01","d09-x01-y01","d10-x01-y01","d11-x01-y01"] analyses["6m"]["BESII_2007_I763880" ] = ["d01-x01-y01","d01-x01-y02","d01-x01-y03","d01-x01-y04", "d01-x01-y05","d01-x01-y06","d01-x01-y07"] analyses["6m"]["BESII_2007_I762901" ] = ["d01-x01-y01","d01-x01-y02","d01-x01-y03","d01-x01-y04", "d01-x01-y06","d01-x01-y07","d01-x01-y08","d01-x01-y09","d01-x01-y10"] analyses["6m"]["CLEO_2006_I691720" ] = ["d01-x01-y02","d01-x01-y03","d01-x01-y04","d01-x01-y05", "d01-x01-y07","d01-x01-y08","d01-x01-y09","d01-x01-y10","d01-x01-y11", "d01-x01-y12","d01-x01-y13","d01-x01-y14","d01-x01-y15","d01-x01-y17"] analyses["6m"]["BESII_2008_I801210" ] = ["d01-x01-y03","d01-x01-y04","d01-x01-y05"] analyses["6m"]["BESII_2008_I801208" ] = ["d01-x01-y03","d01-x01-y04","d01-x01-y05","d01-x01-y06"] analyses["6m"]["MARKI_1982_I169326" ] = ["d06-x01-y01"] analyses["6m"]["MARKI_1975_I100592" ] = ["d01-x01-y01","d02-x01-y01"] analyses['6m']["BESII_2007_I750713" ] = ["d01-x01-y08","d01-x01-y09","d01-x01-y11", "d01-x01-y12","d01-x01-y13","d01-x01-y14", "d01-x01-y15","d01-x01-y16","d01-x01-y17","d01-x01-y18"] analyses['6m']["SND_2016_I1473343" ] = ["d01-x01-y01"] analyses['6m']["BESIII_2020_I1788734"] = ["d01-x01-y01"] # other baryon processes analyses['Baryon']["BESIII_2017_I1509241" ] = ["d01-x01-y01"] # DD analyses["DD"]["BELLE_2007_I723333" ] = ["d01-x01-y01","d02-x01-y01"] analyses["DD"]["BELLE_2007_I756012" ] = ["d01-x01-y01"] analyses["DD"]["BELLE_2007_I756643" ] = ["d01-x01-y01"] analyses["DD"]["BELLE_2008_I757220" ] = ["d01-x01-y01","d02-x01-y01"] analyses["DD"]["BELLE_2008_I759073" ] = ["d01-x01-y01"] analyses["DD"]["BABAR_2008_I776519" ] = ["d01-x01-y01","d01-x01-y02"] analyses["DD"]["BELLE_2008_I791660" ] = ["d01-x01-y01"] analyses["DD"]["BELLE_2013_I1225975" ] = ["d01-x01-y01"] analyses["DD"]["BELLE_2014_I1282602" ] = ["d01-x01-y01"] analyses["DD"]["BELLE_2015_I1324785" ] = ["d01-x01-y01"] analyses["DD"]["BESIII_2016_I1457597" ] = ["d01-x01-y07"] analyses["DD"]["BESIII_2015_I1355215" ] = ["d01-x01-y10"] analyses["DD"]["BESIII_2015_I1377204" ] = ["d01-x01-y10"] analyses["DD"]["BESIII_2016_I1495838" ] = ["d01-x01-y01","d02-x01-y01"] analyses["DD"]["CRYSTAL_BALL_1986_I238081"] = ["d02-x01-y01"] analyses["DD"]["CLEOC_2008_I777917" ] = ["d01-x01-y01","d01-x01-y02","d01-x01-y03", "d02-x01-y01","d02-x01-y02","d02-x01-y03", "d03-x01-y01","d03-x01-y02","d03-x01-y03", "d04-x01-y01","d04-x01-y02", "d05-x01-y01","d05-x01-y02"] analyses["DD"]["BELLE_2017_I1613517" ] = ["d01-x01-y01","d01-x01-y02"] analyses["DD"]["BESIII_2014_I1323621" ] = ["d01-x01-y01"] analyses["DD"]["BESIII_2015_I1406939" ] = ["d02-x01-y06","d03-x01-y06"] analyses["DD"]["BESIII_2017_I1628093" ] = ["d01-x01-y01"] analyses["DD"]["BESIII_2019_I1723934" ] = ["d01-x01-y01"] analyses["DD"]["BESIII_2019_I1756876" ] = ["d01-x01-y09","d01-x01-y10"] analyses["DD"]["BABAR_2007_I729388" ] = ["d01-x01-y01"] analyses["DD"]["BESIII_2015_I1329785" ] = ["d01-x01-y08","d02-x01-y08","d03-x01-y08"] analyses["DD"]["BESIII_2017_I1494065" ] = ["d01-x01-y01","d02-x01-y01"] analyses["DD"]["BESIII_2017_I1596897" ] = ["d01-x01-y01"] analyses["DD"]["BESIII_2018_I1653121" ] = ["d01-x01-y01","d01-x01-y02"] analyses["DD"]["BESIII_2020_I1762922" ] = ["d01-x01-y01"] analyses["DD"]["BESIII_2018_I1633425" ] = ["d01-x01-y01"] analyses["DD"]["BESIII_2018_I1685535" ] = ["d01-x01-y01","d02-x01-y01"] analyses["DD"]["BELLE_2011_I878228" ] = ["d01-x01-y01","d01-x01-y02","d01-x01-y03"] analyses["DD"]["BABAR_2010_I864027" ] = ["d01-x01-y01","d01-x01-y02","d01-x01-y03"] analyses["DD"]["BABAR_2009_I815035" ] = ["d01-x01-y01","d01-x01-y02","d01-x01-y03","d02-x01-y01"] analyses["DD"]["BES_1999_I508349" ] = ["d01-x01-y01","d01-x01-y02","d01-x01-y03","d01-x01-y04"] # BB analyses["BB"]["BELLE_2016_I1389855" ] = ["d01-x01-y02","d01-x01-y03"] analyses["BB"]["BELLE_2008_I764099" ] = ["d01-x01-y01","d02-x01-y01", "d03-x01-y01","d04-x01-y01"] analyses["BB"]["CLEO_1999_I474676" ] = ["d01-x01-y01","d01-x01-y02"] analyses["BB"]["CUSB_1991_I325661" ] = ["d01-x01-y01"] analyses["BB"]["CLEO_1991_I29927" ] = ["d01-x01-y01"] # hyperons analyses["LL"]["BESIII_2018_I1627871"] = ["d01-x01-y01"] analyses["LL"]["DM2_1990_I297706" ] = ["d02-x01-y01"] analyses["LL"]["BESIII_2019_I1758883"] = ["d01-x01-y05"] analyses["LL"]["BESIII_2019_I1726357"] = ["d01-x01-y01"] analyses["LL"]["BABAR_2007_I760730" ] = ["d01-x01-y01","d02-x01-y01","d03-x01-y01"] # list the analysis if required and quit() allProcesses=False if "All" in opts.processes : allProcesses=True processes = sorted(list(analyses.keys())) else : processes = sorted(list(set(opts.processes))) if(opts.list) : for process in processes : - print " ".join(analyses[process]) + print (" ".join(analyses[process])) quit() if(opts.plot) : output="" for process in processes: for analysis in analyses[process] : if(analysis=="CMD3_2019_I1770428") : for iy in range(1,3) : output+= " -m/%s/%s" % (analysis,"d02-x01-y0%s"%iy) elif(analysis=="BES_1999_I508349") : for ix in range(2,4) : for iy in range(1,3) : output+= " -m/%s/%s" % (analysis,"d0%s-x01-y0%s"%(ix,iy)) elif(analysis=="BESIII_2019_I1726357") : for ix in range(2,4) : output+= " -m/%s/%s" % (analysis,"d0%s-x01-y01"% ix) elif(analysis=="BESIII_2020_I1775344") : for ix in range(1,6) : output+= " -m/%s/%s" % (analysis,"d07-x01-y0%s"% ix) output+= " -m/%s/%s" % (analysis,"d08-x01-y0%s"% ix) for plot in analyses[process][analysis]: output+= " -m/%s/%s" % (analysis,plot) - print output + print (output) quit() # mapping of process to me to use me = { "PiPi" : "MEee2Pions", "KK" : "MEee2Kaons", "3Pi" : "MEee3Pions", "4Pi" : "MEee4Pions", "EtaPiPi" : "MEee2EtaPiPi", "EtaprimePiPi" : "MEee2EtaPrimePiPi", "EtaPhi" : "MEee2EtaPhi", "EtaOmega" : "MEee2EtaOmega", "OmegaPi" : "MEee2OmegaPi", "OmegaPiPi" : "MEee2OmegaPiPi", "PhiPi" : "MEee2PhiPi", "PiGamma" : "MEee2PiGamma", "EtaGamma" : "MEee2EtaGamma", "PPbar" : "MEee2PPbar", "LL" : "MEee2LL" , "2K1Pi" : "MEee2KKPi" } # get the particle masses from Herwig particles = { "pi+" : 0., "pi0" : 0. ,"eta" : 0. ,"eta'" : 0. ,"phi" : 0. ,"omega" : 0. ,"p+" : 0. ,"K+" : 0.} for val in particles : tempTxt = "get /Herwig/Particles/%s:NominalMass\nget /Herwig/Particles/%s:WidthLoCut\n" % (val,val) with open("temp.in",'w') as f: f.write(tempTxt) p = subprocess.Popen(["../src/Herwig", "read","temp.in"],stdout=subprocess.PIPE) vals = p.communicate()[0].split() mass = float(vals[0])-float(vals[1]) particles[val]=mass os.remove("temp.in") # minimum CMS energies for specific processes minMass = { "PiPi" : 2.*particles["pi+"], "KK" : 2.*particles["K+"], "3Pi" : 2.*particles["pi+"]+particles["pi0"], "4Pi" : 2.*particles["pi+"]+2.*particles["pi0"], "EtaPiPi" : particles["eta"]+2.*particles["pi+"], "EtaprimePiPi" : particles["eta'"]+2.*particles["pi+"], "EtaPhi" : particles["phi"]+particles["eta"], "EtaOmega" : particles["omega"]+particles["eta"], "OmegaPi" : particles["omega"]+particles["pi0"], "OmegaPiPi" : particles["omega"]+2.*particles["pi0"], "PhiPi" : particles["phi"]+particles["pi0"], "PiGamma" : particles["pi0"], "EtaGamma" : particles["eta"], "PPbar" : 2.*particles["p+"], "LL" : 0., "2K1Pi" : 2.*particles["K+"]+particles["pi0"] } # energies we need energies={} def nearestEnergy(en) : Emin=0 delta=1e30 anals=[] for val in energies : if(abs(val-en)200) : energy *= 0.001 emin,delta,anals = nearestEnergy(energy) if(energy in energies) : if(analysis not in energies[energy][1]) : energies[energy][1].append(analysis) if(matrix!="" and matrix not in energies[energy][0] and minMass[process]<=energy) : energies[energy][0].append(matrix) elif(delta<1e-7) : if(analysis not in anals[1]) : anals[1].append(analysis) if(matrix!="" and matrix not in anals[0] and minMass[process]<=energy) : anals[0].append(matrix) else : if(matrix=="") : energies[energy]=[[],[analysis]] elif(minMass[process]<=energy) : energies[energy]=[[matrix],[analysis]] with open("python/LowEnergy-EE-Perturbative.in", 'r') as f: templateText = f.read() perturbative=Template( templateText ) with open("python/LowEnergy-EE-NonPerturbative.in", 'r') as f: templateText = f.read() nonPerturbative=Template( templateText ) targets="" for energy in sorted(energies) : anal="" for analysis in energies[energy][1]: anal+= "insert /Herwig/Analysis/Rivet:Analyses 0 %s\n" %analysis proc="" matrices = energies[energy][0] if(allProcesses) : matrices = me.values() for matrix in matrices: proc+="insert SubProcess:MatrixElements 0 %s\n" % matrix proc+="set %s:Flavour %s\n" % (matrix,opts.flavour) maxflavour =5 if(energy thresholds[0]) : inputPerturbative = perturbative.substitute({"ECMS" : "%8.6f" % energy, "ANALYSES" : anal, "lepton" : "", "maxflavour" : maxflavour}) with open(opts.dest+"/Rivet-LowEnergy-EE-Perturbative-%8.6f.in" % energy ,'w') as f: f.write(inputPerturbative) targets += "Rivet-LowEnergy-EE-Perturbative-%8.6f.yoda " % energy # input file for currents if(opts.nonPerturbative and proc!="") : inputNonPerturbative = nonPerturbative.substitute({"ECMS" : "%8.6f" % energy, "ANALYSES" : anal, "processes" : proc}) with open(opts.dest+"/Rivet-LowEnergy-EE-NonPerturbative-%8.6f.in" % energy ,'w') as f: f.write(inputNonPerturbative) targets += "Rivet-LowEnergy-EE-NonPerturbative-%8.6f.yoda " % energy -print targets +print (targets) diff --git a/Tests/python/R.py b/Tests/python/R.py --- a/Tests/python/R.py +++ b/Tests/python/R.py @@ -1,195 +1,196 @@ #! /usr/bin/env python +from __future__ import print_function import yoda,os,math,subprocess,optparse from string import Template # get the path for the rivet data p = subprocess.Popen(["rivet-config", "--datadir"],stdout=subprocess.PIPE) path=p.communicate()[0].strip() thresholds = [2.*1.87,2.*5.28] #Define the arguments op = optparse.OptionParser(usage=__doc__) op.add_option("--process" , dest="processes" , default=[], action="append") op.add_option("--path" , dest="path" , default=path) op.add_option("--non-perturbative", dest="nonPerturbative" , default=False, action="store_true") op.add_option("--perturbative" , dest="perturbative" , default=False, action="store_true") op.add_option("--dest" , dest="dest" , default="Rivet") op.add_option("--list" , dest="list" , default=False, action="store_true") op.add_option("--max-energy" , dest="maxEnergy" , default=11.5, type="float", action="store") op.add_option("--min-energy" , dest="minEnergy" , default=0.7 , type="float", action="store") op.add_option("--plots" , dest="plot" , default=False, action="store_true") opts, args = op.parse_args() path=opts.path # list of analyses analyses={} analyses["CLEO_2007_I753556"] = ["d01-x01-y01"] analyses["DASP_1978_I129715"] = ["d01-x01-y01"] analyses["CLEO_1984_I193577"] = ["d01-x01-y01"] analyses["AMY_1990_I294525" ] = ["d01-x01-y01"] analyses["BABAR_2009_I797507"] = ["d01-x01-y01"] analyses["BELLE_2015_I1336624"] = ["d02-x01-y01","d01-x01-y01","d01-x01-y02","d01-x01-y03"] analyses["TASSO_1982_I176887"] = ["d01-x01-y01","d02-x01-y01","d03-x01-y01"] analyses["CRYSTAL_BALL_1986_I238081"] = ["d01-x01-y01"] analyses["CRYSTAL_BALL_1990_I294419"] = ["d01-x01-y01","d02-x01-y01"] analyses["CRYSTAL_BALL_1988_I261078"] = ["d01-x01-y01"] analyses["TOPAZ_1990_I283003"] = ["d01-x01-y01"] analyses["TOPAZ_1993_I353845"] = ["d02-x01-y01"] analyses["TOPAZ_1995_I381777"] = ["d01-x01-y01"] analyses["VENUS_1987_I251274"] = ["d01-x01-y01"] analyses["VENUS_1990_I283774"] = ["d01-x01-y01"] analyses["VENUS_1990_I296392"] = ["d03-x01-y01"] analyses["VENUS_1999_I500179"] = ["d01-x01-y01"] analyses["MD1_1986_I364141"] = ["d01-x01-y01"] analyses["MUPI_1972_I84978"] = ["d01-x01-y01"] analyses["MUPI_1973_I95215"] = ["d01-x01-y01"] analyses["NMD_1974_I745" ] = ["d01-x01-y01","d01-x01-y02"] analyses["GAMMAGAMMA_1979_I141722"] = ["d01-x01-y01","d02-x01-y01","d02-x01-y02"] analyses["MARKI_1975_I100733"] = ["d01-x01-y01","d02-x01-y01"] analyses["MARKI_1977_I119979"] = ["d01-x01-y01","d02-x01-y01"] analyses["MARKI_1976_I108144"] = ["d01-x01-y01"] analyses["DASP_1982_I178613"] = ["d02-x01-y01"] analyses["DESY147_1980_I153896"] = ["d01-x01-y01"] analyses["DESY147_1978_I131524"] = ["d01-x01-y01","d02-x01-y01"] analyses["CLEO_1983_I188805"] = ["d01-x01-y01"] analyses["CLEO_1998_I445351"] = ["d01-x01-y01"] analyses["CLEO_1983_I188803"] = ["d02-x01-y01"] analyses["CLEOC_2008_I777917"] = ["d06-x01-y01","d06-x01-y02"] analyses["CLEO_2006_I700665"] = ["d01-x01-y01"] analyses["CUSB_1982_I180613"] = ["d03-x01-y01"] analyses["MAC_1985_I206052"] = ["d01-x01-y01"] analyses["MARKII_1991_I295286"] = ["d01-x01-y01"] analyses["MARKJ_1979_I141976"] = ["d01-x01-y01"] analyses["MARKJ_1980_I158857"] = ["d01-x01-y01"] analyses["MARKJ_1982_I166369"] = ["d01-x01-y01"] analyses["MARKJ_1983_I182337"] = ["d04-x01-y01"] analyses["MARKJ_1984_I196567"] = ["d01-x01-y01"] analyses["MARKJ_1986_I230297"] = ["d01-x01-y01"] analyses["LENA_1982_I179431"] = ["d01-x01-y01","d02-x01-y01","d03-x01-y01"] analyses["MARKII_1979_I143939"] = ["d02-x01-y01","d03-x01-y01"] analyses["ARGUS_1992_I319102"] = ["d01-x01-y01"] analyses["CELLO_1981_I166365"] = ["d01-x01-y01"] analyses["CELLO_1984_I202783"] = ["d02-x01-y01"] analyses["CELLO_1987_I236981"] = ["d01-x01-y01"] analyses["TASSO_1979_I140303"] = ["d01-x01-y01"] analyses["TASSO_1980_I143690"] = ["d01-x01-y01"] analyses["TASSO_1984_I199468"] = ["d01-x01-y01","d02-x01-y01"] analyses["JADE_1987_I234905"] = ["d01-x01-y01"] analyses["PLUTO_1982_I166799"] = ["d01-x01-y01","d02-x01-y01"] analyses["PLUTO_1979_I142517"] = ["d01-x01-y01"] analyses["PLUTO_1979_I140818"] = ["d02-x01-y01"] analyses["PLUTO_1979_I140294"] = ["d01-x01-y01","d02-x01-y01"] analyses["PLUTO_1980_I152291"] = ["d01-x01-y01","d02-x01-y01"] analyses["BBAR_1980_I152630"] = ["d01-x01-y01"] analyses["BESII_2000_I505323"] = ["d01-x01-y01"] analyses["BESII_2002_I552757"] = ["d01-x01-y01"] analyses["BES_1995_I39870"] = ["d01-x01-y01"] analyses["BESII_2009_I814778"] = ["d01-x01-y01"] analyses["BESII_2006_I717665"] = ["d02-x01-y01"] analyses["GAMMAGAMMA_1979_I133588"] = ["d01-x01-y01","d01-x01-y02"] analyses["GAMMAGAMMA_1975_I100016"] = ["d01-x01-y01","d01-x01-y02"] analyses["GAMMAGAMMA_1973_I84794"] = ["d03-x01-y01","d04-x01-y01"] analyses["GAMMAGAMMA_1981_I158474"] = ["d02-x01-y01","d02-x01-y02","d01-x01-y05","d01-x01-y06"] analyses["TASSO_1984_I195333"] = ["d01-x01-y01","d04-x01-y01"] analyses["PLUTO_1977_I110272"]=["d02-x01-y01"] analyses["FENICE_1996_I426675"]=["d01-x01-y01"] analyses["PLUTO_1981_I165122"]=["d01-x01-y01","d02-x01-y01","d03-x01-y01"] analyses["KEDR_2019_I1673357"]=["d01-x01-y01","d01-x01-y02"] analyses["BELLE_2011_I878228"] = ["d02-x01-y01"] analyses["PDG_R"] = ["d01-x01-y01"] # list analyses if needed if(opts.list) : - print " ".join(analyses.keys()) + print (" ".join(analyses.keys())) quit() if(opts.plot) : output="" for analysis in analyses.keys(): for plot in analyses[analysis]: output+= " -m/%s/%s" % (analysis,plot) - for i in xrange(1,7) : + for i in range(1,7) : output += " -m/BESII_2004_I622224/d0%s-x01-y01" % i - print output + print (output) quit() energies={} def nearestEnergy(en) : Emin=0 delta=1e30 anals=[] for val in energies : if(abs(val-en)200) : energy *= 0.001 emin,delta,anals = nearestEnergy(energy) if(energy in energies) : if(analysis not in energies[energy]) : energies[energy].append(analysis) elif(delta<1e-7) : if(analysis not in anals) : anals.append(analysis) else : energies[energy]=[analysis] # add the bes spectra for val in [2.2,2.6,3.0,3.2,4.6,4.8] : if val in energies : energies[val].append("BESII_2004_I622224") else: energies[val] = ["BESII_2004_I622224"] # set up the templates with open("python/LowEnergy-EE-Perturbative.in", 'r') as f: templateText = f.read() perturbative=Template( templateText ) with open("python/LowEnergy-EE-NonPerturbative.in", 'r') as f: templateText = f.read() nonPerturbative=Template( templateText ) # lepton matrix element lepton_me="insert SubProcess:MatrixElements 0 MEee2gZ2ll\nset MEee2gZ2ll:Allowed Muon\n" # low energy matrix element mes = ["MEee2Pions", "MEee2Kaons", "MEee3Pions", "MEee4Pions", "MEee2EtaPiPi", "MEee2EtaPrimePiPi", "MEee2EtaPhi", "MEee2EtaOmega", "MEee2OmegaPi", "MEee2OmegaPiPi", "MEee2PhiPi", "MEee2PiGamma", "MEee2EtaGamma", "MEee2PPbar", "MEee2LL" , "MEee2KKPi" ] proc=lepton_me for matrix in mes : proc+="insert SubProcess:MatrixElements 0 %s\n" % matrix targets="" for energy in sorted(energies) : anal="" for analysis in energies[energy]: anal+= "insert /Herwig/Analysis/Rivet:Analyses 0 %s\n" %analysis # input file for perturbative QCD maxflavour =5 if(energy= opts.minEnergy) : inputPerturbative = perturbative.substitute({"ECMS" : "%8.6f" % energy, "ANALYSES" : anal, "lepton" : lepton_me, 'maxflavour' : maxflavour}) with open(opts.dest+"/Rivet-LowEnergy-EE-Perturbative-%8.6f.in" % energy ,'w') as f: f.write(inputPerturbative) targets += "Rivet-LowEnergy-EE-Perturbative-%8.6f.yoda " % energy # input file for currents if(opts.nonPerturbative and energy <= opts.maxEnergy) : inputNonPerturbative = nonPerturbative.substitute({"ECMS" : "%8.6f" % energy, "ANALYSES" : anal, "processes" : proc}) with open(opts.dest+"/Rivet-LowEnergy-EE-NonPerturbative-%8.6f.in" % energy ,'w') as f: f.write(inputNonPerturbative) targets += "Rivet-LowEnergy-EE-NonPerturbative-%8.6f.yoda " % energy -print targets +print (targets) diff --git a/Tests/python/make_input_files.py b/Tests/python/make_input_files.py --- a/Tests/python/make_input_files.py +++ b/Tests/python/make_input_files.py @@ -1,1977 +1,1977 @@ #! /usr/bin/env python +from __future__ import print_function import logging,sys,os -from string import strip, Template - +from string import Template import sys if sys.version_info[:3] < (2,4,0): - print "rivet scripts require Python version >= 2.4.0... exiting" + print ("rivet scripts require Python version >= 2.4.0... exiting") sys.exit(1) if __name__ == "__main__": import logging from optparse import OptionParser, OptionGroup parser = OptionParser(usage="%prog name [...]") simulation="" numberOfAddedProcesses=0 def addProcess(thefactory,theProcess,Oas,Oew,scale,mergedlegs,NLOprocesses): global numberOfAddedProcesses global simulation numberOfAddedProcesses+=1 res ="set "+thefactory+":OrderInAlphaS "+Oas+"\n" res+="set "+thefactory+":OrderInAlphaEW "+Oew+"\n" res+="do "+thefactory+":Process "+theProcess+" " if ( mergedlegs != 0 ): if simulation!="Merging": - print "simulation is not Merging, trying to add merged legs." + print ("simulation is not Merging, trying to add merged legs.") sys.exit(1) res+="[" for j in range(mergedlegs): res+=" j " res+="]" res+="\n" if (NLOprocesses!=0): if simulation!="Merging": - print "simulation is not Merging, trying to add NLOProcesses." + print ("simulation is not Merging, trying to add NLOProcesses.") sys.exit(1) res+="set MergingFactory:NLOProcesses %s \n" % NLOprocesses if ( scale != "" ): res+="set "+thefactory+":ScaleChoice /Herwig/MatrixElements/Matchbox/Scales/"+scale+"\n" return res def addLeptonPairCut(minmass,maxmass): return "set /Herwig/Cuts/LeptonPairMassCut:MinMass "+minmass+"*GeV\nset /Herwig/Cuts/LeptonPairMassCut:MaxMass "+maxmass+"*GeV\n" didaddfirstjet=False def addFirstJet(ptcut): global didaddfirstjet if(didaddfirstjet): logging.error("Can only add jetcut once.") sys.exit(1) res="set /Herwig/Cuts/Cuts:JetFinder /Herwig/Cuts/JetFinder\n" res+="insert /Herwig/Cuts/Cuts:MultiCuts 0 /Herwig/Cuts/JetCuts\n" res+="insert /Herwig/Cuts/JetCuts:JetRegions 0 /Herwig/Cuts/FirstJet\n" if(ptcut!=""): res+="set /Herwig/Cuts/FirstJet:PtMin "+ptcut+"*GeV\n" didaddfirstjet=True return res didaddsecondjet=False def addSecondJet(ptcut): global didaddsecondjet if(didaddsecondjet): logging.error("Can only add second jetcut once.") sys.exit(1) res="insert /Herwig/Cuts/JetCuts:JetRegions 0 /Herwig/Cuts/SecondJet\n" res+="set /Herwig/Cuts/SecondJet:PtMin "+ptcut+"*GeV\n" didaddsecondjet=True return res didaddjetpair=False def addJetPairCut(minmass): global didaddjetpair if(didaddjetpair): logging.error("Can only add second jetcut once.") sys.exit(1) res="""\ create ThePEG::JetPairRegion /Herwig/Cuts/JetPairMass JetCuts.so set /Herwig/Cuts/JetPairMass:FirstRegion /Herwig/Cuts/FirstJet set /Herwig/Cuts/JetPairMass:SecondRegion /Herwig/Cuts/SecondJet insert /Herwig/Cuts/JetCuts:JetPairRegions 0 /Herwig/Cuts/JetPairMass set /Herwig/Cuts/JetPairMass:MassMin {mm}*GeV """.format(mm=minmass) didaddjetpair=True return res addedBRReweighter=False def addBRReweighter(): global addedBRReweighter if(addedBRReweighter): logging.error("Can only add BRReweighter once.") sys.exit(1) res="create Herwig::BranchingRatioReweighter /Herwig/Generators/BRReweighter\n" res+="insert /Herwig/Generators/EventGenerator:EventHandler:PostHadronizationHandlers 0 /Herwig/Generators/BRReweighter\n" addedBRReweighter=True return res def setHardProcessWidthToZero(list1): res="" for i in list1: res+="set /Herwig/Particles/"+i+":HardProcessWidth 0.\n" return res selecteddecaymode=False def selectDecayMode(particle,decaymodes): global selecteddecaymode res="do /Herwig/Particles/"+particle+":SelectDecayModes" for decay in decaymodes: res+=" /Herwig/Particles/"+particle+"/"+decay res+="\n" selecteddecaymode=True return res def jet_kt_cut(energy): return "set /Herwig/Cuts/JetKtCut:MinKT {E}*GeV\n".format(E=energy) def mhatmin_cut(energy): return "set /Herwig/Cuts/Cuts:MHatMin {E}*GeV\n".format(E=energy) def mhat_minm_maxm(e1,e2,e3): return """\ set /Herwig/Cuts/Cuts:MHatMin {e1}*GeV set /Herwig/Cuts/MassCut:MinM {e2}*GeV set /Herwig/Cuts/MassCut:MaxM {e3}*GeV """.format(**locals()) def collider_lumi(energy): return "set /Herwig/Generators/EventGenerator:EventHandler:LuminosityFunction:Energy {E}*GeV\n".format(E=energy) def insert_ME(me,process=None,ifname='Process',subprocess="SubProcess"): result = "insert /Herwig/MatrixElements/{subprocess}:MatrixElements 0 /Herwig/MatrixElements/{me}\n".format(**locals()) if process is not None: result += "set /Herwig/MatrixElements/{me}:{ifname} {process}".format(**locals()) return result def particlegroup(factory,name,*particles): directory="MatrixElements/Matchbox" if(factory!="Factory") : directory="Merging" result = ["do /Herwig/{dir}/{fact}:StartParticleGroup {n}".format(n=name,fact=factory,dir=directory)] for p in particles: result.append( "insert /Herwig/{dir}/{fact}:ParticleGroup 0 /Herwig/Particles/{p}".format(p=p,fact=factory,dir=directory) ) result.append("do /Herwig/{dir}/{fact}:EndParticleGroup".format(fact=factory,dir=directory)) return '\n'.join(result) ME_Upsilon = """\ create Herwig::MEee2VectorMeson /Herwig/MatrixElements/MEUpsilon HwMELepton.so set /Herwig/MatrixElements/MEUpsilon:VectorMeson /Herwig/Particles/Upsilon(4S) set /Herwig/MatrixElements/MEUpsilon:Coupling 96.72794 """ + insert_ME("MEUpsilon") (opts, args) = parser.parse_args() ## Check args if len(args) != 1: logging.error("Must specify at least input file") sys.exit(1) name = args[0] -print name +print (name) # select the template to load # collider KNOWN_COLLIDERS = [ "EE-Gamma", "BFactory", "EE", "DIS", "TVT", "LHC-GammaGamma", "LHC", "ISR", "SppS", "Star", "EHS", "GammaGamma", ] collider = "" for cand_collider in KNOWN_COLLIDERS: if cand_collider in name: collider = cand_collider break del cand_collider assert collider have_hadronic_collider = collider in ["TVT","LHC","ISR","SppS","Star","EHS"] thefactory="Factory" parameters = { 'shower' : '', 'bscheme' : '', } # istart determines how many name parts need to be skipped istart = 1 # Dipole shower with Matchbox Powheg if "Dipole-Matchbox-Powheg" in name : istart = 4 simulation="Matchbox" parameters["shower"] = "read Matchbox/Powheg-DipoleShower.in\n" # Dipole shower with internal Powheg - Todo: Finish modifying template files. ''' elif "Dipole-Powheg" in name : istart = 3 simulation="Powheg" parameters["shower"] = "set /Herwig/EventHandlers/EventHandler:CascadeHandler /Herwig/DipoleShower/DipoleShowerHandler\nread snippets/Dipole_AutoTunes_gss.in\n" ''' # Dipole shower with MCatNLO elif "Dipole-MCatNLO" in name : istart = 3 simulation="Matchbox" parameters["shower"] = "read Matchbox/MCatNLO-DipoleShower.in\n" # Dipole shower with Matchbox LO elif "Dipole-Matchbox-LO" in name : istart = 4 simulation="Matchbox" parameters["shower"] = "read Matchbox/LO-DipoleShower.in\n" # Dipole shower with internal LO elif "Dipole" in name : istart = 2 simulation="" parameters["shower"] = "set /Herwig/EventHandlers/EventHandler:CascadeHandler /Herwig/DipoleShower/DipoleShowerHandler\nread snippets/Dipole_AutoTunes_gss.in\n" # AO shower with Matchbox Powheg elif "Matchbox-Powheg" in name : istart = 3 simulation="Matchbox" parameters["shower"] = "read Matchbox/Powheg-DefaultShower.in\n" # AO shower with MCatNLO elif "Matchbox" in name : istart = 2 simulation="Matchbox" parameters["shower"] = "read Matchbox/MCatNLO-DefaultShower.in\n" # AO shower with inernal Powheg elif "Powheg" in name : istart = 2 simulation="Powheg" # Dipole shower with merging elif "Merging" in name : istart = 2 simulation="Merging" thefactory="MergingFactory" # Flavour settings for Matchbox if simulation=="Matchbox" : parameters["bscheme"] = "read Matchbox/FiveFlavourScheme.in\n" if "Dipole" in parameters["shower"] : parameters["bscheme"] += "read Matchbox/FiveFlavourNoBMassScheme.in\n" if collider not in ['DIS','EE'] : parameters["nlo"] = "read Matchbox/MadGraph-OpenLoops.in\n" # Flavour settings for dipole shower with internal ME if simulation=="" and "Dipole" in parameters["shower"] : parameters["bscheme"] = "read snippets/DipoleShowerFiveFlavours.in" # find the template if simulation=="" : if collider=="LHC-GammaGamma" : istart += 1 templateName="Hadron-Gamma.in" elif have_hadronic_collider : templateName="Hadron.in" elif collider=="EE-Gamma" : istart+=1 if("Direct" in name) : templateName="EE-Gamma-Direct.in" elif("Single-Resolved" in name) : templateName="EE-Gamma-Single-Resolved.in" elif("Double-Resolved" in name) : templateName="EE-Gamma-Double-Resolved.in" else : - print "Unknown type of EE-Gamma event ",name + print ("Unknown type of EE-Gamma event ",name) quit() elif collider=="GammaGamma" : templateName="GammaGamma.in" elif collider != "BFactory" : templateName= "%s.in" % collider else : templateName= "EE.in" else : if have_hadronic_collider : templateName= "Hadron-%s.in" % simulation elif collider != "BFactory" : templateName= "%s-%s.in" % (collider,simulation) else : templateName= "EE-%s.in" % simulation # settings for four flavour scheme fourFlavour=""" read Matchbox/FourFlavourScheme.in {bjetgroup} set /Herwig/Cuts/MatchboxJetMatcher:Group bjet """.format(bjetgroup=particlegroup(thefactory,'bjet','b','bbar','c', 'cbar', 's','sbar','d','dbar','u','ubar','g')) # work out the name of the parameter file parameterName="-".join(name.split("-")[istart:]) del istart class StringBuilder(object): """ Avoid expensive string additions until the end by building up a list first. This helper class avoids rewriting all the += lower down to list operations. """ def __init__(self, init = None): self.lines = [] if init is None else [init] def __iadd__(self, line): self.lines.append(line) return self def __str__(self): return '\n'.join(self.lines) # work out the process and parameters process=StringBuilder() # DIS if(collider=="DIS") : if(simulation=="") : if "NoME" in parameterName : process = StringBuilder("set /Herwig/Shower/ShowerHandler:HardEmission None") parameterName=parameterName.replace("NoME-","") else : process = StringBuilder("") elif(simulation=="Powheg") : process = StringBuilder("") elif(simulation=="Matchbox" ) : if "e-" in parameterName : process = StringBuilder(addProcess(thefactory,"e- p -> e- j","0","2","",0,0)) else : process = StringBuilder(addProcess(thefactory,"e+ p -> e+ j","0","2","",0,0)) elif(simulation=="Merging" ) : if "e-" in parameterName : process = StringBuilder(addProcess(thefactory,"e- p -> e- j","0","2","",2,2)) else : process = StringBuilder(addProcess(thefactory,"e+ p -> e+ j","0","2","",2,2)) # EE elif(collider=="EE") : if(simulation=="") : if "gg" in parameterName : process = StringBuilder("create Herwig::MEee2Higgs2SM /Herwig/MatrixElements/MEee2Higgs2SM\n") process+=insert_ME("MEee2Higgs2SM","Gluon","Allowed") else : process = StringBuilder(insert_ME("MEee2gZ2qq")) try : ecms = float(parameterName) if(ecms<=3.75) : process+= "set /Herwig/MatrixElements/MEee2gZ2qq:MaximumFlavour 3\n" elif(ecms<=10.6) : process+= "set /Herwig/MatrixElements/MEee2gZ2qq:MaximumFlavour 4\n" except : pass elif(simulation=="Powheg") : process = StringBuilder() try : ecms = float(parameterName) if(ecms<=3.75) : process+= "set /Herwig/MatrixElements/PowhegMEee2gZ2qq:MaximumFlavour 3\n" elif(ecms<=10.6) : process+= "set /Herwig/MatrixElements/PowhegMEee2gZ2qq:MaximumFlavour 4\n" except : pass elif(simulation=="Matchbox" ) : try : ecms = float(parameterName) if(ecms<=3.75) : process = StringBuilder(addProcess(thefactory,"e- e+ -> u ubar","0","2","",0,0)) process+=addProcess(thefactory,"e- e+ -> d dbar","0","2","",0,0) process+=addProcess(thefactory,"e- e+ -> s sbar","0","2","",0,0) elif(ecms<=10.6) : process = StringBuilder(addProcess(thefactory,"e- e+ -> u ubar","0","2","",0,0)) process+=addProcess(thefactory,"e- e+ -> d dbar","0","2","",0,0) process+=addProcess(thefactory,"e- e+ -> c cbar","0","2","",0,0) process+=addProcess(thefactory,"e- e+ -> s sbar","0","2","",0,0) else : process = StringBuilder(addProcess(thefactory,"e- e+ -> j j","0","2","",0,0)) except: process = StringBuilder(addProcess(thefactory,"e- e+ -> j j","0","2","",0,0)) elif(simulation=="Merging" ) : try : ecms = float(parameterName) if(ecms<=10.1) : process = StringBuilder(addProcess(thefactory,"e- e+ -> j j","0","2","",2,2)) process+="read Matchbox/FourFlavourScheme.in" else : process = StringBuilder(addProcess(thefactory,"e- e+ -> j j","0","2","",2,2)) except: process = StringBuilder(addProcess(thefactory,"e- e+ -> j j","0","2","",2,2)) # EE-Gamma elif(collider=="EE-Gamma") : if(simulation=="") : if("mumu" in parameterName) : process = StringBuilder(insert_ME("MEgg2ff","Muon")) process +="set /Herwig/Cuts/Cuts:MHatMin 3.\n" elif( "tautau" in parameterName) : process = StringBuilder(insert_ME("MEgg2ff","Tau")) process +="set /Herwig/Cuts/Cuts:MHatMin 3.\n" elif( "Jets" in parameterName) : if("Direct" in parameterName ) : process = StringBuilder(insert_ME("MEgg2ff","Quarks")) elif("Single-Resolved" in parameterName ) : process = StringBuilder(insert_ME("MEGammaP2Jets",None,"Process","SubProcess")) process+= insert_ME("MEGammaP2Jets",None,"Process","SubProcess2") else : process = StringBuilder(insert_ME("MEQCD2to2")) process+="insert /Herwig/Cuts/Cuts:OneCuts[0] /Herwig/Cuts/JetKtCut" process+="set /Herwig/Cuts/JetKtCut:MinKT 3." else : - print "process not supported for Gamma Gamma processes at EE" + print ("process not supported for Gamma Gamma processes at EE") quit() else : - print "Only internal matrix elements currently supported for Gamma Gamma processes at EE" + print ("Only internal matrix elements currently supported for Gamma Gamma processes at EE") quit() elif(collider=="GammaGamma") : if(simulation=="") : if("mumu" in parameterName) : process = StringBuilder(insert_ME("MEgg2ff")) process +="set /Herwig/MatrixElements/MEgg2ff:Process Muon\n" process +="set /Herwig/Cuts/Cuts:MHatMin 3.\n" else : - print "process not supported for Gamma Gamma processes at EE" + print ("process not supported for Gamma Gamma processes at EE") quit() else : - print "Only internal matrix elements currently supported for Gamma Gamma processes at EE" + print ("Only internal matrix elements currently supported for Gamma Gamma processes at EE") quit() # TVT elif(collider=="TVT") : process = StringBuilder("set /Herwig/Generators/EventGenerator:EventHandler:BeamB /Herwig/Particles/pbar-\n") if "Run-II" in parameterName : process+=collider_lumi(1960.0) elif "Run-I" in parameterName : process+=collider_lumi(1800.0) elif "900" in parameterName : process+=collider_lumi(900.0) elif "630" in parameterName : process+=collider_lumi(630.0) elif "300" in parameterName : process+=collider_lumi(300.0) if(simulation=="") : if "PromptPhoton" in parameterName : process+=insert_ME("MEGammaJet") process+="set /Herwig/Cuts/PhotonKtCut:MinKT 15.\n" elif "DiPhoton-GammaGamma" in parameterName : process+=insert_ME("MEGammaGamma") process+="set /Herwig/Cuts/PhotonKtCut:MinKT 5.\n" parameterName=parameterName.replace("-GammaGamma","") elif "DiPhoton-GammaJet" in parameterName : process+=insert_ME("MEGammaJet") process+="set /Herwig/Cuts/PhotonKtCut:MinKT 5.\n" parameterName=parameterName.replace("-GammaJet","") elif "UE" in parameterName : if "Dipole" in parameters["shower"]: process+="read snippets/MB-DipoleShower.in\n" else: process+="read snippets/MB.in\n" process+="read snippets/Diffraction.in\n" process += "set /Herwig/Decays/DecayHandler:LifeTimeOption 0\n" process += "set /Herwig/Decays/DecayHandler:MaxLifeTime 10*mm\n" elif "Jets" in parameterName : process+=insert_ME("MEQCD2to2") process+="set /Herwig/UnderlyingEvent/MPIHandler:IdenticalToUE 0\n" if "Run-II-Jets-10" in parameterName : process+=jet_kt_cut( 30.)+mhatmin_cut(500.) elif "Run-II-Jets-11" in parameterName: process+=jet_kt_cut( 30.)+mhatmin_cut(900.) elif "Run-I-Jets-1" in parameterName : process+=jet_kt_cut( 20.) elif "Run-I-Jets-2" in parameterName : process+=jet_kt_cut( 40.) elif "Run-I-Jets-3" in parameterName : process+=jet_kt_cut( 65.) elif "Run-I-Jets-4" in parameterName : process+=jet_kt_cut( 90.) elif "Run-I-Jets-5" in parameterName : process+=jet_kt_cut(160.) elif "Run-I-Jets-6" in parameterName : process+=jet_kt_cut( 30.)+mhatmin_cut(100.) elif "Run-I-Jets-7" in parameterName : process+=jet_kt_cut( 30.)+mhatmin_cut(400.) elif "Run-I-Jets-8" in parameterName : process+=jet_kt_cut( 30.)+mhatmin_cut(700.) elif "Run-II-Jets-0" in parameterName : process+=jet_kt_cut( 15.) elif "Run-II-Jets-1" in parameterName : process+=jet_kt_cut( 25.) elif "Run-II-Jets-2" in parameterName : process+=jet_kt_cut( 40.) elif "Run-II-Jets-3" in parameterName : process+=jet_kt_cut( 60.) elif "Run-II-Jets-4" in parameterName : process+=jet_kt_cut( 85.) elif "Run-II-Jets-5" in parameterName : process+=jet_kt_cut(110.) elif "Run-II-Jets-6" in parameterName : process+=jet_kt_cut(160.) elif "Run-II-Jets-7" in parameterName : process+=jet_kt_cut(250.) elif "Run-II-Jets-8" in parameterName : process+=jet_kt_cut( 30.)+mhatmin_cut(100.) elif "Run-II-Jets-9" in parameterName : process+=jet_kt_cut( 30.)+mhatmin_cut(300.) elif "900-Jets-1" in parameterName : process+=jet_kt_cut( 10.) elif "300-Jets-1" in parameterName : process+=jet_kt_cut( 6.) elif "630-Jets-1" in parameterName : process+=jet_kt_cut( 20.) elif "630-Jets-2" in parameterName : process+=jet_kt_cut( 40.) elif "630-Jets-3" in parameterName : process+=jet_kt_cut( 75.) elif "900-Jets-1" in parameterName : process+=jet_kt_cut( 10.) elif "Run-I-WZ" in parameterName : process+=insert_ME("MEqq2W2ff","Electron") process+=insert_ME("MEqq2gZ2ff","Electron") elif "Run-II-W" in parameterName or "Run-I-W" in parameterName : process+=insert_ME("MEqq2W2ff","Electron") elif "Run-II-Z-e" in parameterName or "Run-I-Z" in parameterName : process +=insert_ME("MEqq2gZ2ff","Electron") elif "Run-II-Z-LowMass-mu" in parameterName : process +=insert_ME("MEqq2gZ2ff","Muon") process+=addLeptonPairCut("25","70") elif "Run-II-Z-HighMass-mu" in parameterName : process +=insert_ME("MEqq2gZ2ff","Muon") process+=addLeptonPairCut("150","600") elif "Run-II-Z-mu" in parameterName : process +=insert_ME("MEqq2gZ2ff","Muon") elif(simulation=="Powheg") : if "Run-I-WZ" in parameterName : process+=insert_ME("PowhegMEqq2W2ff","Electron") process+=insert_ME("PowhegMEqq2gZ2ff","Electron") elif "Run-II-W" in parameterName or "Run-I-W" in parameterName : process+=insert_ME("PowhegMEqq2W2ff","Electron") elif "Run-II-Z-e" in parameterName or "Run-I-Z" in parameterName : process+=insert_ME("PowhegMEqq2gZ2ff","Electron") elif "Run-II-Z-LowMass-mu" in parameterName : process+=insert_ME("PowhegMEqq2gZ2ff","Muon") process+=addLeptonPairCut("25","70") elif "Run-II-Z-HighMass-mu" in parameterName : process+=insert_ME("PowhegMEqq2gZ2ff","Muon") process+=addLeptonPairCut("150","600") elif "Run-II-Z-mu" in parameterName : process+=insert_ME("PowhegMEqq2gZ2ff","Muon") elif "DiPhoton-GammaGamma" in parameterName : process+=insert_ME("MEGammaGammaPowheg","GammaGamma") process+=insert_ME("MEGammaGamma","gg") process+="set /Herwig/Cuts/PhotonKtCut:MinKT 5.\n" process+=jet_kt_cut(5.) parameterName=parameterName.replace("-GammaGamma","") elif "DiPhoton-GammaJet" in parameterName : process+=insert_ME("MEGammaGammaPowheg","VJet") process+="set /Herwig/Cuts/PhotonKtCut:MinKT 5.\n" process+=jet_kt_cut(5.) parameterName=parameterName.replace("-GammaJet","") elif(simulation=="Matchbox" or simulation=="Merging" ) : if "Jets" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p -> j j","2","0","MaxJetPtScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p -> j j","2","0","MaxJetPtScale",1,0) process+="set /Herwig/UnderlyingEvent/MPIHandler:IdenticalToUE 0\n" if "Run-II-Jets-10" in parameterName : process+=addFirstJet("30") process+=addSecondJet("25") process+=addJetPairCut("500") elif "Run-II-Jets-11" in parameterName : process+=addFirstJet("30") process+=addSecondJet("25") process+=addJetPairCut("900") elif "Run-II-Jets-12" in parameterName : process+=addFirstJet("30") process+=addSecondJet("25") process+=addJetPairCut("300") elif "Run-I-Jets-1" in parameterName : process+=addFirstJet("20") elif "Run-I-Jets-2" in parameterName : process+=addFirstJet("40") elif "Run-I-Jets-3" in parameterName : process+=addFirstJet("65") elif "Run-I-Jets-4" in parameterName : process+=addFirstJet("90") elif "Run-I-Jets-5" in parameterName : process+=addFirstJet("160") elif "Run-I-Jets-6" in parameterName : process+=addFirstJet("30")+addSecondJet("25")+addJetPairCut("100") elif "Run-I-Jets-7" in parameterName : process+=addFirstJet("30")+addSecondJet("25")+addJetPairCut("400") elif "Run-I-Jets-8" in parameterName : process+=addFirstJet("30")+addSecondJet("25")+addJetPairCut("700") elif "Run-II-Jets-0" in parameterName : process+=addFirstJet("15") elif "Run-II-Jets-1" in parameterName : process+=addFirstJet("25") elif "Run-II-Jets-2" in parameterName : process+=addFirstJet("40") elif "Run-II-Jets-3" in parameterName : process+=addFirstJet("60") elif "Run-II-Jets-4" in parameterName : process+=addFirstJet("85") elif "Run-II-Jets-5" in parameterName : process+=addFirstJet("110") elif "Run-II-Jets-6" in parameterName : process+=addFirstJet("160") elif "Run-II-Jets-7" in parameterName : process+=addFirstJet("250") elif "Run-II-Jets-8" in parameterName : process+=addFirstJet("30")+addSecondJet("25")+addJetPairCut("100") elif "Run-II-Jets-9" in parameterName : process+=addFirstJet("30")+addSecondJet("25")+addJetPairCut("300") elif "900-Jets-1" in parameterName : process+=addFirstJet("10") elif "300-Jets-1" in parameterName : process+=addFirstJet("6") elif "630-Jets-1" in parameterName : process+=addFirstJet("20") elif "630-Jets-2" in parameterName : process+=addFirstJet("40") elif "630-Jets-3" in parameterName : process+=addFirstJet("75") elif "900-Jets-1" in parameterName : process+=addFirstJet("10") else : logging.error("Exit 00007") sys.exit(1) elif "Run-I-WZ" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p pbar e+ e-","0","2","LeptonPairMassScale",0,0) process+=addProcess(thefactory,"p pbar e+ nu","0","2","LeptonPairMassScale",0,0) process+=addProcess(thefactory,"p pbar e- nu","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=particlegroup(thefactory,'epm','e+','e-') process+=particlegroup(thefactory,'epmnu','e+','e-','nu_e','nu_ebar') process+=addProcess(thefactory,"p pbar epm epmnu","0","2","LeptonPairMassScale",2,2) process+=addLeptonPairCut("60","120") elif "Run-II-W" in parameterName or "Run-I-W" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p pbar e+ nu","0","2","LeptonPairMassScale",0,0) process+=addProcess(thefactory,"p pbar e- nu","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=particlegroup(thefactory,'epm','e+','e-') process+=addProcess(thefactory,"p pbar epm nu","0","2","LeptonPairMassScale",2,2) process+=addLeptonPairCut("60","120") elif "Run-II-Z-e" in parameterName or "Run-I-Z" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p pbar e+ e-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p pbar e+ e-","0","2","LeptonPairMassScale",2,2) process+=addLeptonPairCut("60","120") elif "Run-II-Z-LowMass-mu" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p pbar mu+ mu-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p pbar mu+ mu-","0","2","LeptonPairMassScale",2,2) process+=addLeptonPairCut("25","70") elif "Run-II-Z-HighMass-mu" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p pbar mu+ mu-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p pbar mu+ mu-","0","2","LeptonPairMassScale",2,2) process+=addLeptonPairCut("150","600") elif "Run-II-Z-mu" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p pbar mu+ mu-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p pbar mu+ mu-","0","2","LeptonPairMassScale",2,2) process+=addLeptonPairCut("60","120") # Star elif(collider=="Star" ) : process = StringBuilder("set /Herwig/Decays/DecayHandler:LifeTimeOption 0\n") process+= "set /Herwig/Decays/DecayHandler:MaxLifeTime 10*mm\n" process+= "set /Herwig/Generators/EventGenerator:EventHandler:BeamB /Herwig/Particles/p+\n" process+= collider_lumi(200.0) process+= "set /Herwig/Cuts/Cuts:X2Min 0.01\n" if(simulation=="") : if "UE" in parameterName : if "Dipole" in parameters["shower"]: process+="read snippets/MB-DipoleShower.in\n" else: process+="read snippets/MB.in\n" process+="read snippets/Diffraction.in\n" else : process+=insert_ME("MEQCD2to2") process+="set /Herwig/UnderlyingEvent/MPIHandler:IdenticalToUE 0\n" if "Jets-1" in parameterName : process+=jet_kt_cut(2.) elif "Jets-2" in parameterName : process+=jet_kt_cut(5.) elif "Jets-3" in parameterName : process+=jet_kt_cut(20.) elif "Jets-4" in parameterName : process+=jet_kt_cut(25.) else : logging.error("Star not supported for %s " % simulation) sys.exit(1) # ISR and SppS elif(collider=="ISR" or collider =="SppS" or collider == "EHS" ) : process = StringBuilder("set /Herwig/Decays/DecayHandler:LifeTimeOption 0\n") process+="set /Herwig/Decays/DecayHandler:MaxLifeTime 10*mm\n" if(collider=="SppS") : process = StringBuilder("set /Herwig/Generators/EventGenerator:EventHandler:BeamB /Herwig/Particles/pbar-\n") if "30" in parameterName : process+=collider_lumi( 30.4) elif "44" in parameterName : process+=collider_lumi( 44.4) elif "53" in parameterName : process+=collider_lumi( 53.0) elif "62" in parameterName : process+=collider_lumi( 62.2) elif "63" in parameterName : process+=collider_lumi( 63.0) elif "200" in parameterName : process+=collider_lumi(200.0) elif "500" in parameterName : process+=collider_lumi(500.0) elif "546" in parameterName : process+=collider_lumi(546.0) elif "900" in parameterName : process+=collider_lumi(900.0) if(simulation=="") : if "Dipole" in parameters["shower"]: process+="read snippets/MB-DipoleShower.in\n" else: process+="read snippets/MB.in\n" process+="read snippets/Diffraction.in\n" else : logging.error(" SppS and ISR not supported for %s " % simulation) sys.exit(1) # LHC elif(collider=="LHC") : if parameterName.startswith("7-") : process = StringBuilder(collider_lumi(7000.0)) elif parameterName.startswith("8-") : process = StringBuilder(collider_lumi(8000.0)) elif parameterName.startswith("13-") : process = StringBuilder(collider_lumi(13000.0)) elif parameterName.startswith("900") : process = StringBuilder(collider_lumi(900.0)) elif parameterName.startswith("2360") : process = StringBuilder(collider_lumi(2360.0)) elif parameterName.startswith("2760") : process = StringBuilder(collider_lumi(2760.0)) else : process = StringBuilder(collider_lumi(7000.0)) if(simulation=="") : if "VBF" in parameterName : process+=insert_ME("MEPP2HiggsVBF") if "GammaGamma" in parameterName : process+=selectDecayMode("h0",["h0->gamma,gamma;"]) addedBRReweighter = True elif "WW" in parameterName : process+=selectDecayMode("h0",["h0->W+,W-;"]) addedBRReweighter = True elif "ZZ" in parameterName : process+=selectDecayMode("h0",["h0->Z0,Z0;"]) addedBRReweighter = True elif "8-" not in parameterName : process+=selectDecayMode("h0",["h0->tau-,tau+;"]) addedBRReweighter = True process+="set /Herwig/Particles/tau-:Stable Stable\n" elif "ggHJet" in parameterName : process+=selectDecayMode("h0",["h0->tau-,tau+;"]) addedBRReweighter = True process+="set /Herwig/Particles/tau-:Stable Stable\n" process+=insert_ME("MEHiggsJet") process+=jet_kt_cut(20.) elif "ggH" in parameterName : process+=insert_ME("MEHiggs") process+=insert_ME("MEHiggsJet","qqbar") process+=jet_kt_cut(0.0) if "GammaGamma" in parameterName : process+=selectDecayMode("h0",["h0->gamma,gamma;"]) addedBRReweighter = True elif "WW" in parameterName : process+=selectDecayMode("h0",["h0->W+,W-;"]) addedBRReweighter = True elif "ZZ" in parameterName : process+=selectDecayMode("h0",["h0->Z0,Z0;"]) addedBRReweighter = True elif "8-" not in parameterName : process+=selectDecayMode("h0",["h0->tau-,tau+;"]) addedBRReweighter = True process+="set /Herwig/Particles/tau-:Stable Stable\n" elif "PromptPhoton" in parameterName : process+=insert_ME("MEGammaJet") if "PromptPhoton-1" in parameterName : process+="set /Herwig/Cuts/PhotonKtCut:MinKT 5.\n" elif "PromptPhoton-2" in parameterName : process+="set /Herwig/Cuts/PhotonKtCut:MinKT 25.\n" elif "PromptPhoton-3" in parameterName : process+="set /Herwig/Cuts/PhotonKtCut:MinKT 80.\n" elif "PromptPhoton-4" in parameterName : process+="set /Herwig/Cuts/PhotonKtCut:MinKT 150.\n" elif "DiPhoton-GammaGamma" in parameterName : process+=insert_ME("MEGammaGamma") process+="set /Herwig/Cuts/PhotonKtCut:MinKT 5.\n" parameterName=parameterName.replace("-GammaGamma","") elif "DiPhoton-GammaJet" in parameterName : process+=insert_ME("MEGammaJet") process+="set /Herwig/Cuts/PhotonKtCut:MinKT 5.\n" parameterName=parameterName.replace("-GammaJet","") elif "8-WH" in parameterName : process+=insert_ME("MEPP2WH") process+=jet_kt_cut(0.0) if "GammaGamma" in parameterName : process+=selectDecayMode("h0",["h0->gamma,gamma;"]) addedBRReweighter = True elif "WW" in parameterName : process+=selectDecayMode("h0",["h0->W+,W-;"]) addedBRReweighter = True elif "ZZ" in parameterName : process+=selectDecayMode("h0",["h0->Z0,Z0;"]) addedBRReweighter = True elif "8-ZH" in parameterName : process+=insert_ME("MEPP2ZH") process+=jet_kt_cut(0.0) if "GammaGamma" in parameterName : process+=selectDecayMode("h0",["h0->gamma,gamma;"]) addedBRReweighter = True elif "WW" in parameterName : process+=selectDecayMode("h0",["h0->W+,W-;"]) addedBRReweighter = True elif "ZZ" in parameterName : process+=selectDecayMode("h0",["h0->Z0,Z0;"]) addedBRReweighter = True elif "WH" in parameterName : process+=selectDecayMode("h0",["h0->b,bbar;"]) process+=selectDecayMode("W+",["W+->nu_e,e+;", "W+->nu_mu,mu+;"]) addedBRReweighter = True process+=insert_ME("MEPP2WH") process+=jet_kt_cut(0.0) elif "ZH" in parameterName : process+=selectDecayMode("h0",["h0->b,bbar;"]) process+=selectDecayMode("Z0",["Z0->e-,e+;", "Z0->mu-,mu+;"]) addedBRReweighter = True process+=insert_ME("MEPP2ZH") process+=jet_kt_cut(0.0) elif "UE" in parameterName : if "Dipole" in parameters["shower"]: process+="read snippets/MB-DipoleShower.in\n" else: process+="set /Herwig/Shower/ShowerHandler:IntrinsicPtGaussian 2.2*GeV\n" process+="read snippets/MB.in\n" process+="read snippets/Diffraction.in\n" if "Long" in parameterName : process += "set /Herwig/Decays/DecayHandler:MaxLifeTime 100*mm\n" elif "8-DiJets" in parameterName or "7-DiJets" in parameterName or "13-DiJets" in parameterName : process+=insert_ME("MEQCD2to2") process+="set MEQCD2to2:MaximumFlavour 5\n" process+="set /Herwig/UnderlyingEvent/MPIHandler:IdenticalToUE 0\n" if "13-DiJets" not in parameterName : if "-A" in parameterName : process+=jet_kt_cut(45.) process+="set /Herwig/Cuts/JetKtCut:MinEta -3.\n" process+="set /Herwig/Cuts/JetKtCut:MaxEta 3.\n" elif "-B" in parameterName : process+=jet_kt_cut(20.) process+="set /Herwig/Cuts/JetKtCut:MinEta -2.7\n" process+="set /Herwig/Cuts/JetKtCut:MaxEta 2.7\n" elif "-C" in parameterName : process+=jet_kt_cut(20.) process+="set /Herwig/Cuts/JetKtCut:MinEta -4.8\n" process+="set /Herwig/Cuts/JetKtCut:MaxEta 4.8\n" else : if "-A" in parameterName : process+=jet_kt_cut(60.) process+="set /Herwig/Cuts/JetKtCut:MinEta -3.\n" process+="set /Herwig/Cuts/JetKtCut:MaxEta 3.\n" elif "-B" in parameterName : process+=jet_kt_cut(180.) process+="set /Herwig/Cuts/JetKtCut:MinEta -3.\n" process+="set /Herwig/Cuts/JetKtCut:MaxEta 3.\n" if "DiJets-1" in parameterName : process+=mhatmin_cut(90.) elif "DiJets-2" in parameterName : process+=mhatmin_cut(200.) elif "DiJets-3" in parameterName : process+=mhatmin_cut(450.) elif "DiJets-4" in parameterName : process+=mhatmin_cut(750.) elif "DiJets-5" in parameterName : process+=mhatmin_cut(950.) elif "DiJets-6" in parameterName : process+=mhatmin_cut(1550.) elif "DiJets-7" in parameterName : process+=mhatmin_cut(2150.) elif "DiJets-8" in parameterName : process+=mhatmin_cut(2750.) elif "DiJets-9" in parameterName : process+=mhatmin_cut(3750.) elif "DiJets-10" in parameterName : process+=mhatmin_cut(4750.) elif "DiJets-11" in parameterName : process+=mhatmin_cut(5750.) elif( "7-Jets" in parameterName or "8-Jets" in parameterName or "13-Jets" in parameterName or "2760-Jets" in parameterName ) : process+=insert_ME("MEQCD2to2") process+="set MEQCD2to2:MaximumFlavour 5\n" process+="set /Herwig/UnderlyingEvent/MPIHandler:IdenticalToUE 0\n" if "Jets-10" in parameterName : process+=jet_kt_cut(1800.) elif "Jets-0" in parameterName : process+=jet_kt_cut(5.) elif "Jets-1" in parameterName : process+=jet_kt_cut(10.) elif "Jets-2" in parameterName : process+=jet_kt_cut(20.) elif "Jets-3" in parameterName : process+=jet_kt_cut(40.) elif "Jets-4" in parameterName : process+=jet_kt_cut(70.) elif "Jets-5" in parameterName : process+=jet_kt_cut(150.) elif "Jets-6" in parameterName : process+=jet_kt_cut(200.) elif "Jets-7" in parameterName : process+=jet_kt_cut(300.) elif "Jets-8" in parameterName : process+=jet_kt_cut(500.) elif "Jets-9" in parameterName : process+=jet_kt_cut(800.) elif( "7-Charm" in parameterName or "7-Bottom" in parameterName or "8-Bottom" in parameterName) : if("8-Bottom" in parameterName) : addBRReweighter() process+=selectDecayMode("Jpsi",["Jpsi->mu-,mu+;"]) if "Bottom" in parameterName : process+="cp MEHeavyQuark MEBottom\n" process+="set MEBottom:QuarkType Bottom\n" process+=insert_ME("MEBottom") else : process+="cp MEHeavyQuark MECharm\n" process+="set MECharm:QuarkType Charm\n" process+=insert_ME("MECharm") process+="set /Herwig/UnderlyingEvent/MPIHandler:IdenticalToUE 0\n" if "-0" in parameterName : if "Bottom" in parameterName : process+="set MEBottom:Process Pair\n" process+=jet_kt_cut(0.) elif "-1" in parameterName : process+=jet_kt_cut(5.) elif "-2" in parameterName : process+=jet_kt_cut(15.) elif "-3" in parameterName : process+=jet_kt_cut(20.) elif "-4" in parameterName : process+=jet_kt_cut(50.) elif "-5" in parameterName : process+=jet_kt_cut(80.) elif "-6" in parameterName : process+=jet_kt_cut(110.) elif "-7" in parameterName : process+=jet_kt_cut(30.)+mhatmin_cut(90.) elif "-8" in parameterName : process+=jet_kt_cut(30.)+mhatmin_cut(340.) elif "-9" in parameterName : process+=jet_kt_cut(30.)+mhatmin_cut(500.) elif "Top-L" in parameterName : process+="set MEHeavyQuark:QuarkType Top\n" process+=insert_ME("MEHeavyQuark") process+=selectDecayMode("t",["t->nu_e,e+,b;", "t->nu_mu,mu+,b;"]) process+=addBRReweighter() elif "Top-SL" in parameterName : process+="set MEHeavyQuark:QuarkType Top\n" process+=insert_ME("MEHeavyQuark") process+="set /Herwig/Particles/t:Synchronized Not_synchronized\n" process+="set /Herwig/Particles/tbar:Synchronized Not_synchronized\n" process+=selectDecayMode("t",["t->nu_e,e+,b;","t->nu_mu,mu+,b;"]) process+=selectDecayMode("tbar",["tbar->b,bbar,cbar;", "tbar->bbar,cbar,d;", "tbar->bbar,cbar,s;", "tbar->bbar,s,ubar;", "tbar->bbar,ubar,d;"]) process+=addBRReweighter() elif "Top-All" in parameterName : process+="set MEHeavyQuark:QuarkType Top\n" process+=insert_ME("MEHeavyQuark") elif "WZ" in parameterName : process+=insert_ME("MEPP2VV","WZ") process+=selectDecayMode("W+",["W+->nu_e,e+;", "W+->nu_mu,mu+;"]) process+=selectDecayMode("W-",["W-->nu_ebar,e-;", "W-->nu_mubar,mu-;"]) process+=selectDecayMode("Z0",["Z0->e-,e+;", "Z0->mu-,mu+;"]) addedBRReweighter = True elif "WW-emu" in parameterName : process+=insert_ME("MEPP2VV","WW") process+="set /Herwig/Particles/W+:Synchronized 0\n" process+="set /Herwig/Particles/W-:Synchronized 0\n" process+=selectDecayMode("W+",["W+->nu_e,e+;"]) process+=selectDecayMode("W-",["W-->nu_mubar,mu-;"]) addedBRReweighter = True elif "WW-ll" in parameterName : process+=insert_ME("MEPP2VV","WW") process+=selectDecayMode("W+",["W+->nu_e,e+;","W+->nu_mu,mu+;","W+->nu_tau,tau+;"]) addedBRReweighter = True elif "ZZ-ll" in parameterName : process+=insert_ME("MEPP2VV","ZZ") process+=selectDecayMode("Z0",["Z0->e-,e+;", "Z0->mu-,mu+;", "Z0->tau-,tau+;"]) addedBRReweighter = True elif "ZZ-lv" in parameterName : process+=insert_ME("MEPP2VV","ZZ") process+=selectDecayMode("Z0",["Z0->e-,e+;", "Z0->mu-,mu+;", "Z0->tau-,tau+;", "Z0->nu_e,nu_ebar;", "Z0->nu_mu,nu_mubar;", "Z0->nu_tau,nu_taubar;"]) addedBRReweighter = True elif "W-Z-e" in parameterName : process+=insert_ME("MEqq2gZ2ff","Electron") process+=insert_ME("MEqq2W2ff","Electron") elif "W-Z-mu" in parameterName : process+=insert_ME("MEqq2gZ2ff","Muon") process+=insert_ME("MEqq2W2ff","Muon") elif "W-e" in parameterName : process+=insert_ME("MEqq2W2ff","Electron") elif "W-mu" in parameterName : process+=insert_ME("MEqq2W2ff","Muon") elif "Z-e" in parameterName : process+=insert_ME("MEqq2gZ2ff","Electron") elif "Z-mu" in parameterName : process+=insert_ME("MEqq2gZ2ff","Muon") elif "Z-LowMass-e" in parameterName : process+=insert_ME("MEqq2gZ2ff","Electron") process+=mhat_minm_maxm(20,20,70) elif "Z-MedMass-e" in parameterName : process+=insert_ME("MEqq2gZ2ff","Electron") process+=mhat_minm_maxm(40,40,130) elif "Z-LowMass-mu" in parameterName : process+=insert_ME("MEqq2gZ2ff","Muon") process+=mhat_minm_maxm(10,10,70) elif "Z-Mass1" in parameterName : if parameterName.startswith("13-") : process+=mhat_minm_maxm(10,10,35) else : process+=mhat_minm_maxm(10,10,30) if "-e" in parameterName : process+=insert_ME("MEqq2gZ2ff","Electron") else : process+=insert_ME("MEqq2gZ2ff","Muon") elif "Z-Mass2" in parameterName : if parameterName.startswith("13-") : process+=mhat_minm_maxm(25,25,70) else : process+=mhat_minm_maxm(30,30,65) if "-e" in parameterName : process+=insert_ME("MEqq2gZ2ff","Electron") else : process+=insert_ME("MEqq2gZ2ff","Muon") elif "Z-Mass3" in parameterName : if parameterName.startswith("13-") : process+=mhat_minm_maxm(60,60,120) else : process+=mhat_minm_maxm(65,65,115) if "-e" in parameterName : process+=insert_ME("MEqq2gZ2ff","Electron") else : process+=insert_ME("MEqq2gZ2ff","Muon") elif "Z-Mass4" in parameterName : if parameterName.startswith("13-") : process+=mhat_minm_maxm(110,110,8000) else : process+=mhat_minm_maxm(115,115,8000) if "-e" in parameterName : process+=insert_ME("MEqq2gZ2ff","Electron") else : process+=insert_ME("MEqq2gZ2ff","Muon") elif "Z-HighMass1" in parameterName : process+=mhat_minm_maxm(116,116,400) if "-e" in parameterName : process+=insert_ME("MEqq2gZ2ff","Electron") else : process+=insert_ME("MEqq2gZ2ff","Muon") elif "Z-HighMass2" in parameterName : process+=mhat_minm_maxm(400,400,7000) if "-e" in parameterName : process+=insert_ME("MEqq2gZ2ff","Electron") else : process+=insert_ME("MEqq2gZ2ff","Muon") elif "W-Jet" in parameterName : process+=insert_ME("MEWJet","Electron","WDecay") if "W-Jet-1-e" in parameterName : process+="set /Herwig/Cuts/WBosonKtCut:MinKT 100.0*GeV\n" parameterName=parameterName.replace("W-Jet-1-e","W-Jet-e") elif "W-Jet-2-e" in parameterName : process+="set /Herwig/Cuts/WBosonKtCut:MinKT 190.0*GeV\n" parameterName=parameterName.replace("W-Jet-2-e","W-Jet-e") elif "W-Jet-3-e" in parameterName : process+="set /Herwig/Cuts/WBosonKtCut:MinKT 270.0*GeV\n" parameterName=parameterName.replace("W-Jet-3-e","W-Jet-e") elif "Z-Jet" in parameterName : if "-e" in parameterName : process+=insert_ME("MEZJet","Electron","ZDecay") if "Z-Jet-0-e" in parameterName : process+="set /Herwig/Cuts/ZBosonKtCut:MinKT 35.0*GeV\n" parameterName=parameterName.replace("Z-Jet-0-e","Z-Jet-e") elif "Z-Jet-1-e" in parameterName : process+="set /Herwig/Cuts/ZBosonKtCut:MinKT 100.0*GeV\n" parameterName=parameterName.replace("Z-Jet-1-e","Z-Jet-e") elif "Z-Jet-2-e" in parameterName : process+="set /Herwig/Cuts/ZBosonKtCut:MinKT 190.0*GeV\n" parameterName=parameterName.replace("Z-Jet-2-e","Z-Jet-e") elif "Z-Jet-3-e" in parameterName : process+="set /Herwig/Cuts/ZBosonKtCut:MinKT 270.0*GeV\n" parameterName=parameterName.replace("Z-Jet-3-e","Z-Jet-e") else : process+=insert_ME("MEZJet","Muon","ZDecay") process+="set /Herwig/Cuts/ZBosonKtCut:MinKT 35.0*GeV\n" parameterName=parameterName.replace("Z-Jet-0-mu","Z-Jet-mu") elif "WGamma" in parameterName : process+=insert_ME("MEPP2VGamma","1") process+="set MEPP2VGamma:MassOption 1" process+="set /Herwig/Cuts/PhotonKtCut:MinKT 10.\n" if "-e" in parameterName : process+=selectDecayMode("W+",["W+->nu_e,e+;"]) addedBRReweighter=True else : process+=selectDecayMode("W+",["W+->nu_mu,mu+;"]) addedBRReweighter=True elif "ZGamma" in parameterName : process+=insert_ME("MEPP2VGamma","2") process+="set /Herwig/Cuts/PhotonKtCut:MinKT 10.\n" if "-e" in parameterName : process+=selectDecayMode("Z0",["Z0->e-,e+;"]) addedBRReweighter=True else : process+=selectDecayMode("Z0",["Z0->mu-,mu+;"]) addedBRReweighter=True else : logging.error(" Process %s not supported for internal matrix elements" % name) sys.exit(1) elif(simulation=="Powheg") : if "VBF" in parameterName : process+=insert_ME("PowhegMEPP2HiggsVBF") if "GammaGamma" in parameterName : process+=selectDecayMode("h0",["h0->gamma,gamma;"]) addedBRReweighter = True elif "WW" in parameterName : process+=selectDecayMode("h0",["h0->W+,W-;"]) addedBRReweighter = True elif "ZZ" in parameterName : process+=selectDecayMode("h0",["h0->Z0,Z0;"]) addedBRReweighter = True elif "8-" not in parameterName : process+=selectDecayMode("h0",["h0->tau-,tau+;"]) addedBRReweighter = True process+="set /Herwig/Particles/tau-:Stable Stable\n" elif "ggHJet" in parameterName : logging.error(" Process %s not supported for POWHEG matrix elements" % name) sys.exit(1) elif "ggH" in parameterName : process+=insert_ME("PowhegMEHiggs") if "GammaGamma" in parameterName : process+=selectDecayMode("h0",["h0->gamma,gamma;"]) addedBRReweighter = True elif "WW" in parameterName : process+=selectDecayMode("h0",["h0->W+,W-;"]) addedBRReweighter = True elif "ZZ" in parameterName : process+=selectDecayMode("h0",["h0->Z0,Z0;"]) addedBRReweighter = True elif "8-" not in parameterName : process+=selectDecayMode("h0",["h0->tau-,tau+;"]) addedBRReweighter = True process+="set /Herwig/Particles/tau-:Stable Stable\n" elif "8-WH" in parameterName : process+=insert_ME("PowhegMEPP2WH") process+=jet_kt_cut(0.0) if "GammaGamma" in parameterName : process+=selectDecayMode("h0",["h0->gamma,gamma;"]) addedBRReweighter = True elif "WW" in parameterName : process+=selectDecayMode("h0",["h0->W+,W-;"]) addedBRReweighter = True elif "ZZ" in parameterName : process+=selectDecayMode("h0",["h0->Z0,Z0;"]) addedBRReweighter = True elif "8-ZH" in parameterName : process+=insert_ME("PowhegMEPP2ZH") process+=jet_kt_cut(0.0) if "GammaGamma" in parameterName : process+=selectDecayMode("h0",["h0->gamma,gamma;"]) addedBRReweighter = True elif "WW" in parameterName : process+=selectDecayMode("h0",["h0->W+,W-;"]) addedBRReweighter = True elif "ZZ" in parameterName : process+=selectDecayMode("h0",["h0->Z0,Z0;"]) addedBRReweighter = True elif "WH" in parameterName : process+=selectDecayMode("h0",["h0->b,bbar;"]) process+=selectDecayMode("W+",["W+->nu_e,e+;", "W+->nu_mu,mu+;"]) addedBRReweighter = True process+=insert_ME("PowhegMEPP2WH") process+=jet_kt_cut(0.0) elif "ZH" in parameterName : process+=selectDecayMode("h0",["h0->b,bbar;"]) process+=selectDecayMode("Z0",["Z0->e-,e+;", "Z0->mu-,mu+;"]) addedBRReweighter = True process+=insert_ME("PowhegMEPP2ZH") process+=jet_kt_cut(0.0) elif "UE" in parameterName : logging.error(" Process %s not supported for powheg matrix elements" % name) sys.exit(1) elif "WZ" in parameterName : process+="create Herwig::HwDecayHandler /Herwig/NewPhysics/DecayHandler\n" process+="set /Herwig/NewPhysics/DecayHandler:NewStep No\n" process+="set /Herwig/Shower/ShowerHandler:SplitHardProcess No\n"; process+="set /Herwig/Decays/ZDecayer:PhotonGenerator NULL\n"; process+="set /Herwig/Decays/WDecayer:PhotonGenerator NULL\n"; process+="insert /Herwig/NewPhysics/DecayHandler:Excluded 0 /Herwig/Particles/tau-\n" process+="insert /Herwig/NewPhysics/DecayHandler:Excluded 1 /Herwig/Particles/tau+\n" process+="insert /Herwig/Generators/EventGenerator:EventHandler:PreCascadeHandlers 0 /Herwig/NewPhysics/DecayHandler\n" process+=insert_ME("PowhegMEPP2VV","WZ") process+=selectDecayMode("W+",["W+->nu_e,e+;", "W+->nu_mu,mu+;"]) process+=selectDecayMode("W-",["W-->nu_ebar,e-;", "W-->nu_mubar,mu-;"]) process+=selectDecayMode("Z0",["Z0->e-,e+;", "Z0->mu-,mu+;"]) addedBRReweighter = True elif "WW-emu" in parameterName : process+="create Herwig::HwDecayHandler /Herwig/NewPhysics/DecayHandler\n" process+="set /Herwig/NewPhysics/DecayHandler:NewStep No\n" process+="set /Herwig/Shower/ShowerHandler:SplitHardProcess No\n"; process+="set /Herwig/Decays/ZDecayer:PhotonGenerator NULL\n"; process+="set /Herwig/Decays/WDecayer:PhotonGenerator NULL\n"; process+="insert /Herwig/NewPhysics/DecayHandler:Excluded 0 /Herwig/Particles/tau-\n" process+="insert /Herwig/NewPhysics/DecayHandler:Excluded 1 /Herwig/Particles/tau+\n" process+="insert /Herwig/Generators/EventGenerator:EventHandler:PreCascadeHandlers 0 /Herwig/NewPhysics/DecayHandler\n" process+=insert_ME("PowhegMEPP2VV","WW") process+="set /Herwig/Particles/W+:Synchronized 0\n" process+="set /Herwig/Particles/W-:Synchronized 0\n" process+=selectDecayMode("W+",["W+->nu_e,e+;"]) process+=selectDecayMode("W-",["W-->nu_mubar,mu-;"]) addedBRReweighter = True elif "WW-ll" in parameterName : process+="create Herwig::HwDecayHandler /Herwig/NewPhysics/DecayHandler\n" process+="set /Herwig/NewPhysics/DecayHandler:NewStep No\n" process+="set /Herwig/Shower/ShowerHandler:SplitHardProcess No\n"; process+="set /Herwig/Decays/ZDecayer:PhotonGenerator NULL\n"; process+="set /Herwig/Decays/WDecayer:PhotonGenerator NULL\n"; process+="insert /Herwig/NewPhysics/DecayHandler:Excluded 0 /Herwig/Particles/tau-\n" process+="insert /Herwig/NewPhysics/DecayHandler:Excluded 1 /Herwig/Particles/tau+\n" process+="insert /Herwig/Generators/EventGenerator:EventHandler:PreCascadeHandlers 0 /Herwig/NewPhysics/DecayHandler\n" process+=insert_ME("PowhegMEPP2VV","WW") process+=selectDecayMode("W+",["W+->nu_e,e+;", "W+->nu_mu,mu+;", "W+->nu_tau,tau+;"]) addedBRReweighter = True elif "ZZ-ll" in parameterName : process+="create Herwig::HwDecayHandler /Herwig/NewPhysics/DecayHandler\n" process+="set /Herwig/NewPhysics/DecayHandler:NewStep No\n" process+="set /Herwig/Shower/ShowerHandler:SplitHardProcess No\n"; process+="set /Herwig/Decays/ZDecayer:PhotonGenerator NULL\n"; process+="set /Herwig/Decays/WDecayer:PhotonGenerator NULL\n"; process+="insert /Herwig/NewPhysics/DecayHandler:Excluded 0 /Herwig/Particles/tau-\n" process+="insert /Herwig/NewPhysics/DecayHandler:Excluded 1 /Herwig/Particles/tau+\n" process+="insert /Herwig/Generators/EventGenerator:EventHandler:PreCascadeHandlers 0 /Herwig/NewPhysics/DecayHandler\n" process+=insert_ME("PowhegMEPP2VV","ZZ") process+=selectDecayMode("Z0",["Z0->e-,e+;", "Z0->mu-,mu+;", "Z0->tau-,tau+;"]) addedBRReweighter = True elif "ZZ-lv" in parameterName : process+="create Herwig::HwDecayHandler /Herwig/NewPhysics/DecayHandler\n" process+="set /Herwig/NewPhysics/DecayHandler:NewStep No\n" process+="set /Herwig/Shower/ShowerHandler:SplitHardProcess No\n"; process+="set /Herwig/Decays/ZDecayer:PhotonGenerator NULL\n"; process+="set /Herwig/Decays/WDecayer:PhotonGenerator NULL\n"; process+="insert /Herwig/NewPhysics/DecayHandler:Excluded 0 /Herwig/Particles/tau-\n" process+="insert /Herwig/NewPhysics/DecayHandler:Excluded 1 /Herwig/Particles/tau+\n" process+="insert /Herwig/Generators/EventGenerator:EventHandler:PreCascadeHandlers 0 /Herwig/NewPhysics/DecayHandler\n" process+=insert_ME("PowhegMEPP2VV","ZZ") process+=selectDecayMode("Z0",["Z0->e-,e+;", "Z0->mu-,mu+;", "Z0->tau-,tau+;", "Z0->nu_e,nu_ebar;", "Z0->nu_mu,nu_mubar;", "Z0->nu_tau,nu_taubar;"]) addedBRReweighter = True elif "W-Z-e" in parameterName : process+=insert_ME("PowhegMEqq2gZ2ff","Electron") process+=insert_ME("PowhegMEqq2W2ff","Electron") elif "W-Z-mu" in parameterName : process+=insert_ME("MEqq2gZ2ff","Muon") process+=insert_ME("MEqq2W2ff","Muon") elif "W-e" in parameterName : process+=insert_ME("PowhegMEqq2W2ff","Electron") elif "W-mu" in parameterName : process+=insert_ME("PowhegMEqq2W2ff","Muon") elif "Z-e" in parameterName : process+=insert_ME("PowhegMEqq2gZ2ff","Electron") elif "Z-mu" in parameterName : process+=insert_ME("PowhegMEqq2gZ2ff","Muon") elif "Z-LowMass-e" in parameterName : process+=insert_ME("PowhegMEqq2gZ2ff","Electron") process+=mhat_minm_maxm(20,20,70) elif "Z-MedMass-e" in parameterName : process+=insert_ME("PowhegMEqq2gZ2ff","Electron") process+=mhat_minm_maxm(40,40,130) elif "Z-LowMass-mu" in parameterName : process+=insert_ME("PowhegMEqq2gZ2ff","Muon") process+=mhat_minm_maxm(10,10,70) elif "Z-Mass1" in parameterName : if parameterName.startswith("13-") : process+=mhat_minm_maxm(10,10,35) else : process+=mhat_minm_maxm(10,10,30) if "-e" in parameterName : process+=insert_ME("PowhegMEqq2gZ2ff","Electron") else : process+=insert_ME("PowhegMEqq2gZ2ff","Muon") elif "Z-Mass2" in parameterName : if parameterName.startswith("13-") : process+=mhat_minm_maxm(25,25,70) else : process+=mhat_minm_maxm(30,30,65) if "-e" in parameterName : process+=insert_ME("PowhegMEqq2gZ2ff","Electron") else : process+=insert_ME("PowhegMEqq2gZ2ff","Muon") elif "Z-Mass3" in parameterName : if parameterName.startswith("13-") : process+=mhat_minm_maxm(60,60,120) else : process+=mhat_minm_maxm(65,65,115) if "-e" in parameterName : process+=insert_ME("PowhegMEqq2gZ2ff","Electron") else : process+=insert_ME("PowhegMEqq2gZ2ff","Muon") elif "Z-Mass4" in parameterName : if parameterName.startswith("13-") : process+=mhat_minm_maxm(110,110,8000) else: process+=mhat_minm_maxm(115,115,8000) if "-e" in parameterName : process+=insert_ME("PowhegMEqq2gZ2ff","Electron") else : process+=insert_ME("PowhegMEqq2gZ2ff","Muon") elif "Z-HighMass1" in parameterName : process+=mhat_minm_maxm(116,116,400) if "-e" in parameterName : process+=insert_ME("PowhegMEqq2gZ2ff","Electron") else : process+=insert_ME("PowhegMEqq2gZ2ff","Muon") elif "Z-HighMass2" in parameterName : process+=mhat_minm_maxm(400,400,7000) if "-e" in parameterName : process+=insert_ME("PowhegMEqq2gZ2ff","Electron") else : process+=insert_ME("PowhegMEqq2gZ2ff","Muon") elif "DiPhoton-GammaGamma" in parameterName : process+=insert_ME("MEGammaGammaPowheg","GammaGamma") process+=insert_ME("MEGammaGamma","gg") process+="set /Herwig/Cuts/PhotonKtCut:MinKT 5.\n" process+=jet_kt_cut(5.) parameterName=parameterName.replace("-GammaGamma","") elif "DiPhoton-GammaJet" in parameterName : process+=insert_ME("MEGammaGammaPowheg","VJet") process+="set /Herwig/Cuts/PhotonKtCut:MinKT 5.\n" process+=jet_kt_cut(5.) parameterName=parameterName.replace("-GammaJet","") else : logging.error(" Process %s not supported for internal POWHEG matrix elements" % name) sys.exit(1) elif( simulation=="Matchbox" or simulation=="Merging" ) : if "VBF" in parameterName : parameters["nlo"] = "read Matchbox/VBFNLO.in\n" if(simulation=="Merging"): process+="cd /Herwig/Merging/\n" process+="insert "+thefactory+":DiagramGenerator:RestrictLines 0 /Herwig/Particles/Z0\n" process+="insert "+thefactory+":DiagramGenerator:RestrictLines 0 /Herwig/Particles/W+\n" process+="insert "+thefactory+":DiagramGenerator:RestrictLines 0 /Herwig/Particles/W-\n" process+="insert "+thefactory+":DiagramGenerator:RestrictLines 0 /Herwig/Particles/gamma\n" process+="do "+thefactory+":DiagramGenerator:TimeLikeRange 0 0\n" if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p h0 j j","0","3","FixedScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p h0 j j","0","3","FixedScale",1,1) process+=setHardProcessWidthToZero(["h0"]) process+="set /Herwig/MatrixElements/Matchbox/Scales/FixedScale:FixedScale 125.7\n" if "GammaGamma" in parameterName : process+=selectDecayMode("h0",["h0->gamma,gamma;"]) process+=addBRReweighter() elif "WW" in parameterName : process+=selectDecayMode("h0",["h0->W+,W-;"]) process+=addBRReweighter() elif "ZZ" in parameterName : process+=selectDecayMode("h0",["h0->Z0,Z0;"]) process+=addBRReweighter() elif "8-" not in parameterName : process+=selectDecayMode("h0",["h0->tau-,tau+;"]) process+=addBRReweighter() process+="set /Herwig/Particles/tau-:Stable Stable\n" elif "ggHJet" in parameterName : if(simulation=="Merging"): logging.warning("ggHJet not explicitly tested for %s " % simulation) sys.exit(0) parameters["nlo"] = "read Matchbox/MadGraph-GoSam.in\nread Matchbox/HiggsEffective.in\n" process+=selectDecayMode("h0",["h0->tau-,tau+;"]) process+=addBRReweighter() process+="set /Herwig/Particles/tau-:Stable Stable\n" process+=setHardProcessWidthToZero(["h0"]) process+=addProcess(thefactory,"p p h0 j","3","1","FixedScale",0,0) process+=addFirstJet("20") process+="set "+thefactory+":ScaleChoice /Herwig/MatrixElements/Matchbox/Scales/FixedScale\n" process+="set /Herwig/MatrixElements/Matchbox/Scales/FixedScale:FixedScale 125.7\n" elif "ggH" in parameterName : parameters["nlo"] = "read Matchbox/MadGraph-GoSam.in\nread Matchbox/HiggsEffective.in\n" if(simulation=="Merging"): process+= "cd /Herwig/MatrixElements/Matchbox/Amplitudes\nset OpenLoops:HiggsEff Yes\nset MadGraph:Model heft\n" process+="cd /Herwig/Merging/\n" process+=setHardProcessWidthToZero(["h0"]) if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p h0","2","1","FixedScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p h0","2","1","FixedScale",2,2) process+="set /Herwig/MatrixElements/Matchbox/Scales/FixedScale:FixedScale 125.7\n" if "GammaGamma" in parameterName : process+=selectDecayMode("h0",["h0->gamma,gamma;"]) process+=addBRReweighter() elif "WW" in parameterName : process+=selectDecayMode("h0",["h0->W+,W-;"]) process+=addBRReweighter() elif "ZZ" in parameterName : process+=selectDecayMode("h0",["h0->Z0,Z0;"]) process+=addBRReweighter() elif "8-" not in parameterName : process+=selectDecayMode("h0",["h0->tau-,tau+;"]) process+=addBRReweighter() process+="set /Herwig/Particles/tau-:Stable Stable\n" elif "8-WH" in parameterName : if(simulation=="Merging"): logging.warning("8-WH not explicitly tested for %s " % simulation) sys.exit(0) process+=setHardProcessWidthToZero(["h0","W+","W-"]) process+=addProcess(thefactory,"p p W+ h0","0","2","FixedScale",0,0) process+=addProcess(thefactory,"p p W- h0","0","2","FixedScale",0,0) process+="set /Herwig/MatrixElements/Matchbox/Scales/FixedScale:FixedScale 125.7\n" if "GammaGamma" in parameterName : process+=selectDecayMode("h0",["h0->gamma,gamma;"]) process+=addBRReweighter() elif "WW" in parameterName : process+=selectDecayMode("h0",["h0->W+,W-;"]) process+=addBRReweighter() elif "ZZ" in parameterName : process+=selectDecayMode("h0",["h0->Z0,Z0;"]) process+=addBRReweighter() elif "8-ZH" in parameterName : if(simulation=="Merging"): logging.warning("8-ZH not explicitly tested for %s " % simulation) sys.exit(0) process+=setHardProcessWidthToZero(["h0","Z0"]) process+=addProcess(thefactory,"p p Z0 h0","0","2","FixedScale",0,0) process+="set /Herwig/MatrixElements/Matchbox/Scales/FixedScale:FixedScale 125.7\n" if "GammaGamma" in parameterName : process+=selectDecayMode("h0",["h0->gamma,gamma;"]) process+=addBRReweighter() elif "WW" in parameterName : process+=selectDecayMode("h0",["h0->W+,W-;"]) process+=addBRReweighter() elif "ZZ" in parameterName : process+=selectDecayMode("h0",["h0->Z0,Z0;"]) process+=addBRReweighter() elif "WH" in parameterName : if(simulation=="Merging"): logging.warning("WH not explicitly tested for %s " % simulation) sys.exit(0) process+=selectDecayMode("h0",["h0->b,bbar;"]) process+=addBRReweighter() process+=setHardProcessWidthToZero(["h0"]) process+=addProcess(thefactory,"p p e+ nu h0","0","3","LeptonPairMassScale",0,0) process+=addProcess(thefactory,"p p e- nu h0","0","3","LeptonPairMassScale",0,0) process+=addProcess(thefactory,"p p mu+ nu h0","0","3","LeptonPairMassScale",0,0) process+=addProcess(thefactory,"p p mu- nu h0","0","3","LeptonPairMassScale",0,0) process+=addLeptonPairCut("60","120") elif "ZH" in parameterName : if(simulation=="Merging"): logging.warning("ZH not explicitly tested for %s " % simulation) sys.exit(0) process+=selectDecayMode("h0",["h0->b,bbar;"]) process+=addBRReweighter() process+=setHardProcessWidthToZero(["h0"]) process+=addProcess(thefactory,"p p e+ e- h0","0","3","LeptonPairMassScale",0,0) process+=addProcess(thefactory,"p p mu+ mu- h0","0","3","LeptonPairMassScale",0,0) process+=addLeptonPairCut("60","120") elif "UE" in parameterName : logging.error(" Process %s not supported for Matchbox matrix elements" % name) sys.exit(1) elif "8-DiJets" in parameterName or "7-DiJets" in parameterName or "13-DiJets" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p j j","2","0","MaxJetPtScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p j j","2","0","MaxJetPtScale",1,1) process+="set /Herwig/UnderlyingEvent/MPIHandler:IdenticalToUE 0\n" if "13-DiJets" not in parameterName : if "-A" in parameterName : process+=addFirstJet("45") process+=addSecondJet("25") process+="set /Herwig/Cuts/FirstJet:YRange -3. 3.\n" process+="set /Herwig/Cuts/SecondJet:YRange -3. 3.\n" elif "-B" in parameterName : process+=addFirstJet("20") process+=addSecondJet("15") process+="set /Herwig/Cuts/FirstJet:YRange -2.7 2.7\n" process+="set /Herwig/Cuts/SecondJet:YRange -2.7 2.7\n" elif "-C" in parameterName : process+=addFirstJet("20") process+=addSecondJet("15") process+="set /Herwig/Cuts/FirstJet:YRange -4.8 4.8\n" process+="set /Herwig/Cuts/SecondJet:YRange -4.8 4.8\n" else : logging.error("Exit 00001") sys.exit(1) else : if "-A" in parameterName : process+= addFirstJet("75.") process+=addSecondJet("60.") process+="set /Herwig/Cuts/JetKtCut:MinEta -3.\n" process+="set /Herwig/Cuts/JetKtCut:MaxEta 3.\n" elif "-B" in parameterName : process+= addFirstJet("220.") process+=addSecondJet("180.") process+="set /Herwig/Cuts/JetKtCut:MinEta -3.\n" process+="set /Herwig/Cuts/JetKtCut:MaxEta 3.\n" else : logging.error("Exit 00001") sys.exit(1) if "DiJets-1" in parameterName : process+=addJetPairCut("90") elif "DiJets-2" in parameterName : process+=addJetPairCut("200") elif "DiJets-3" in parameterName : process+=addJetPairCut("450") elif "DiJets-4" in parameterName : process+=addJetPairCut("750") elif "DiJets-5" in parameterName : process+=addJetPairCut("950") elif "DiJets-6" in parameterName : process+=addJetPairCut("1550") elif "DiJets-7" in parameterName : process+=addJetPairCut("2150") elif "DiJets-8" in parameterName : process+=addJetPairCut("2750") elif "DiJets-9" in parameterName : process+=mhatmin_cut(3750.) elif "DiJets-10" in parameterName : process+=mhatmin_cut(4750.) elif "DiJets-11" in parameterName : process+=mhatmin_cut(5750.) else : logging.error("Exit 00002") sys.exit(1) elif( "7-Jets" in parameterName or "8-Jets" in parameterName or "13-Jets" in parameterName or "2760-Jets" in parameterName ) : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p j j","2","0","MaxJetPtScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p j j","2","0","MaxJetPtScale",1,1) process+="set /Herwig/UnderlyingEvent/MPIHandler:IdenticalToUE 0\n" if "Jets-10" in parameterName : process+=addFirstJet("1800") elif "Jets-0" in parameterName : process+=addFirstJet("5") elif "Jets-1" in parameterName : process+=addFirstJet("10") elif "Jets-2" in parameterName : process+=addFirstJet("20") elif "Jets-3" in parameterName : process+=addFirstJet("40") elif "Jets-4" in parameterName : process+=addFirstJet("70") elif "Jets-5" in parameterName : process+=addFirstJet("150") elif "Jets-6" in parameterName : process+=addFirstJet("200") elif "Jets-7" in parameterName : process+=addFirstJet("300") elif "Jets-8" in parameterName : process+=addFirstJet("500") elif "Jets-9" in parameterName : process+=addFirstJet("800") else : logging.error("Exit 00003") sys.exit(1) elif( "7-Charm" in parameterName or "7-Bottom" in parameterName or "8-Bottom" in parameterName) : parameters["bscheme"]=fourFlavour process+="set /Herwig/Particles/b:HardProcessMass 4.2*GeV\n" process+="set /Herwig/Particles/bbar:HardProcessMass 4.2*GeV\n" if("8-Bottom" in parameterName) : addBRReweighter() process+=selectDecayMode("Jpsi",["Jpsi->mu-,mu+;"]) if "Bottom" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p b bbar","2","0","MaxJetPtScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p b bbar","2","0","MaxJetPtScale",1,0) else: if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p c cbar","2","0","MaxJetPtScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p c cbar","2","0","MaxJetPtScale",1,0) process+="set /Herwig/UnderlyingEvent/MPIHandler:IdenticalToUE 0\n" if "-0" in parameterName : process+=addFirstJet("0") elif "-1" in parameterName : process+=addFirstJet("5") elif "-2" in parameterName : process+=addFirstJet("15") elif "-3" in parameterName : process+=addFirstJet("20") elif "-4" in parameterName : process+=addFirstJet("50") elif "-5" in parameterName : process+=addFirstJet("80") elif "-6" in parameterName : process+=addFirstJet("110") elif "-7" in parameterName : process+=addFirstJet("30") process+=addSecondJet("25") process+=addJetPairCut("90") elif "-8" in parameterName : process+=addFirstJet("30") process+=addSecondJet("25") process+=addJetPairCut("340") elif "-9" in parameterName : process+=addFirstJet("30") process+=addSecondJet("25") process+=addJetPairCut("500") else : logging.error("Exit 00004") sys.exit(1) elif "Top-L" in parameterName : process+=setHardProcessWidthToZero(["t","tbar"]) if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p t tbar","2","0","TopPairMTScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p t tbar","2","0","TopPairMTScale",2,2) process+=selectDecayMode("t",["t->nu_e,e+,b;", "t->nu_mu,mu+,b;"]) process+=addBRReweighter() elif "Top-SL" in parameterName : process+=setHardProcessWidthToZero(["t","tbar"]) if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p t tbar","2","0","TopPairMTScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p t tbar","2","0","TopPairMTScale",2,2) process+="set /Herwig/Particles/t:Synchronized Not_synchronized\n" process+="set /Herwig/Particles/tbar:Synchronized Not_synchronized\n" process+=selectDecayMode("t",["t->nu_e,e+,b;", "t->nu_mu,mu+,b;"]) process+=selectDecayMode("tbar",["tbar->b,bbar,cbar;", "tbar->bbar,cbar,d;", "tbar->bbar,cbar,s;", "tbar->bbar,s,ubar;", "tbar->bbar,ubar,d;"]) process+=addBRReweighter() elif "Top-All" in parameterName : process+=setHardProcessWidthToZero(["t","tbar"]) if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p t tbar","2","0","TopPairMTScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p t tbar","2","0","TopPairMTScale",2,2) elif "WZ" in parameterName : if(simulation=="Merging"): logging.warning("WZ not explicitly tested for %s " % simulation) sys.exit(0) process+=setHardProcessWidthToZero(["W+","W-","Z0"]) process+=addProcess(thefactory,"p p W+ Z0","0","2","FixedScale",0,0) process+=addProcess(thefactory,"p p W- Z0","0","2","FixedScale",0,0) process+="set /Herwig/MatrixElements/Matchbox/Scales/FixedScale:FixedScale 171.6*GeV\n\n" process+=selectDecayMode("W+",["W+->nu_e,e+;", "W+->nu_mu,mu+;"]) process+=selectDecayMode("W-",["W-->nu_ebar,e-;", "W-->nu_mubar,mu-;"]) process+=selectDecayMode("Z0",["Z0->e-,e+;", "Z0->mu-,mu+;"]) process+=addBRReweighter() process+=addLeptonPairCut("60","120") elif "WW-emu" in parameterName : if(simulation=="Merging"): logging.warning("WW-emu not explicitly tested for %s " % simulation) sys.exit(0) process+=setHardProcessWidthToZero(["W+","W-","Z0"]) process+=addProcess(thefactory,"p p W+ W-","0","2","FixedScale",0,0) process+="set /Herwig/MatrixElements/Matchbox/Scales/FixedScale:FixedScale 160.8*GeV\n" process+="set /Herwig/Particles/W+:Synchronized 0\n" process+="set /Herwig/Particles/W-:Synchronized 0\n" process+=selectDecayMode("W+",["W+->nu_e,e+;"]) process+=selectDecayMode("W-",["W-->nu_mubar,mu-;"]) process+=addBRReweighter() parameters["bscheme"] = "read Matchbox/FourFlavourScheme.in\n" process+=addLeptonPairCut("60","120") elif "WW-ll" in parameterName : if(simulation=="Merging"): logging.warning("WW-ll not explicitly tested for %s " % simulation) sys.exit(0) process+=setHardProcessWidthToZero(["W+","W-","Z0"]) process+=addProcess(thefactory,"p p W+ W-","0","2","FixedScale",0,0) process+="set /Herwig/MatrixElements/Matchbox/Scales/FixedScale:FixedScale 160.8*GeV\n" process+=selectDecayMode("W+",["W+->nu_e,e+;", "W+->nu_mu,mu+;", "W+->nu_tau,tau+;"]) process+=addBRReweighter() process+=addLeptonPairCut("60","120") parameters["bscheme"] = "read Matchbox/FourFlavourScheme.in\n" elif "ZZ-ll" in parameterName : if(simulation=="Merging"): logging.warning("ZZ-ll not explicitly tested for %s " % simulation) sys.exit(0) process+=setHardProcessWidthToZero(["W+","W-","Z0"]) process+=addProcess(thefactory,"p p Z0 Z0","0","2","FixedScale",0,0) process+="set /Herwig/MatrixElements/Matchbox/Scales/FixedScale:FixedScale 182.2*GeV\n" process+=selectDecayMode("Z0",["Z0->e-,e+;", "Z0->mu-,mu+;", "Z0->tau-,tau+;"]) process+=addBRReweighter() process+=addLeptonPairCut("60","120") elif "ZZ-lv" in parameterName : if(simulation=="Merging"): logging.warning("ZZ-lv not explicitly tested for %s " % simulation) sys.exit(0) process+=setHardProcessWidthToZero(["W+","W-","Z0"]) process+=addProcess(thefactory,"p p Z0 Z0","0","2","FixedScale",0,0) process+="set /Herwig/MatrixElements/Matchbox/Scales/FixedScale:FixedScale 182.2*GeV\n" process+=selectDecayMode("Z0",["Z0->e-,e+;", "Z0->mu-,mu+;", "Z0->tau-,tau+;", "Z0->nu_e,nu_ebar;", "Z0->nu_mu,nu_mubar;", "Z0->nu_tau,nu_taubar;"]) process+=addBRReweighter() process+=addLeptonPairCut("60","120") elif "W-Z-e" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p e+ e-","0","2","LeptonPairMassScale",0,0) process+=addProcess(thefactory,"p p e+ nu","0","2","LeptonPairMassScale",0,0) process+=addProcess(thefactory,"p p e- nu","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=particlegroup(thefactory,'epm','e+','e-') process+=particlegroup(thefactory,'epmnu','e+','e-','nu_e','nu_ebar') process+=addProcess(thefactory,"p p epm epmnu","0","2","LeptonPairMassScale",2,2) process+=addLeptonPairCut("60","120") elif "W-Z-mu" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p mu+ mu-","0","2","LeptonPairMassScale",0,0) process+=addProcess(thefactory,"p p mu+ nu","0","2","LeptonPairMassScale",0,0) process+=addProcess(thefactory,"p p mu- nu","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=particlegroup(thefactory,'mupm','mu+','mu-') process+=particlegroup(thefactory,'mupmnu','mu+','mu-','nu_mu','nu_mubar') process+=addProcess(thefactory,"p p mupm mupmnu","0","2","LeptonPairMassScale",2,2) process+=addLeptonPairCut("60","120") elif "W-e" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p e+ nu","0","2","LeptonPairMassScale",0,0) process+=addProcess(thefactory,"p p e- nu","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=particlegroup(thefactory,'epm','e+','e-') process+=addProcess(thefactory,"p p epm nu","0","2","LeptonPairMassScale",2,2) process+=addLeptonPairCut("60","120") elif "W-mu" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p mu+ nu","0","2","LeptonPairMassScale",0,0) process+=addProcess(thefactory,"p p mu- nu","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=particlegroup(thefactory,'mupm','mu+','mu-') process+=addProcess(thefactory,"p p mupm nu","0","2","LeptonPairMassScale",2,2) process+=addLeptonPairCut("60","120") elif "Z-e" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p e+ e-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p e+ e-","0","2","LeptonPairMassScale",2,2) process+=addLeptonPairCut("60","120") elif "Z-mu" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p mu+ mu-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p mu+ mu-","0","2","LeptonPairMassScale",2,2) process+=addLeptonPairCut("60","120") elif "Z-jj" in parameterName : if(simulation=="Merging"): logging.warning("Z-jj not explicitly tested for %s " % simulation) sys.exit(0) process+=addProcess(thefactory,"p p e+ e- j j","2","2","LeptonPairMassScale",0,0) process+=addFirstJet("40") process+=addSecondJet("30") process+=addLeptonPairCut("60","120") elif "Z-LowMass-e" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p e+ e-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p e+ e-","0","2","LeptonPairMassScale",2,2) process+=addLeptonPairCut("20","70") elif "Z-MedMass-e" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p e+ e-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p e+ e-","0","2","LeptonPairMassScale",2,2) process+=addLeptonPairCut("40","130") elif "Z-LowMass-mu" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p mu+ mu-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p mu+ mu-","0","2","LeptonPairMassScale",2,2) process+=addLeptonPairCut("10","70") elif "Z-Mass1" in parameterName : if parameterName.startswith("13-") : process+=addLeptonPairCut("10","35") else : process+=addLeptonPairCut("10","30") if "-e" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p e+ e-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p e+ e-","0","2","LeptonPairMassScale",2,2) else : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p mu+ mu-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p mu+ mu-","0","2","LeptonPairMassScale",2,2) elif "Z-Mass2" in parameterName : if parameterName.startswith("13-") : process+=addLeptonPairCut("25","70") else : process+=addLeptonPairCut("30","75") if "-e" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p e+ e-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p e+ e-","0","2","LeptonPairMassScale",2,2) else : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p mu+ mu-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p mu+ mu-","0","2","LeptonPairMassScale",2,2) elif "Z-Mass3" in parameterName : if parameterName.startswith("13-") : process+=addLeptonPairCut("60","125") else : process+=addLeptonPairCut("65","120") if "-e" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p e+ e-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p e+ e-","0","2","LeptonPairMassScale",2,2) else : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p mu+ mu-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p mu+ mu-","0","2","LeptonPairMassScale",2,2) elif "Z-Mass4" in parameterName : if parameterName.startswith("13-") : process+=addLeptonPairCut("115","8000") else : process+=addLeptonPairCut("120","8000") if "-e" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p e+ e-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p e+ e-","0","2","LeptonPairMassScale",2,2) else : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p mu+ mu-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p mu+ mu-","0","2","LeptonPairMassScale",2,2) elif "Z-HighMass1" in parameterName : process+=addLeptonPairCut("116","400") if "-e" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p e+ e-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p e+ e-","0","2","LeptonPairMassScale",2,2) else : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p mu+ mu-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p mu+ mu-","0","2","LeptonPairMassScale",2,2) elif "Z-HighMass2" in parameterName : process+=addLeptonPairCut("400","7000") if "-e" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p e+ e-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p e+ e-","0","2","LeptonPairMassScale",2,2) else : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p mu+ mu-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p mu+ mu-","0","2","LeptonPairMassScale",2,2) elif "W-Jet" in parameterName : if(simulation=="Merging"): logging.warning("W-Jet not explicitly tested for %s " % simulation) sys.exit(0) process+=addProcess(thefactory,"p p e+ nu j","1","2","HTScale",0,0) process+=addProcess(thefactory,"p p e- nu j","1","2","HTScale",0,0) process+=addLeptonPairCut("60","120") if "W-Jet-1-e" in parameterName : process+=addFirstJet("100") parameterName=parameterName.replace("W-Jet-1-e","W-Jet-e") elif "W-Jet-2-e" in parameterName : process+=addFirstJet("190") parameterName=parameterName.replace("W-Jet-2-e","W-Jet-e") elif "W-Jet-3-e" in parameterName : process+=addFirstJet("270") parameterName=parameterName.replace("W-Jet-3-e","W-Jet-e") else : logging.error("Exit 00005") sys.exit(1) elif "Z-Jet" in parameterName : if(simulation=="Merging"): logging.warning("Z-Jet not explicitly tested for %s " % simulation) sys.exit(0) if "-e" in parameterName : process+=addProcess(thefactory,"p p e+ e- j","1","2","HTScale",0,0) if "Z-Jet-0-e" in parameterName : process+=addFirstJet("35") parameterName=parameterName.replace("Z-Jet-0-e","Z-Jet-e") elif "Z-Jet-1-e" in parameterName : process+=addFirstJet("100") parameterName=parameterName.replace("Z-Jet-1-e","Z-Jet-e") elif "Z-Jet-2-e" in parameterName : process+=addFirstJet("190") parameterName=parameterName.replace("Z-Jet-2-e","Z-Jet-e") elif "Z-Jet-3-e" in parameterName : process+=addFirstJet("270") parameterName=parameterName.replace("Z-Jet-3-e","Z-Jet-e") else : logging.error("Exit 00006") sys.exit(1) else : process+=addProcess(thefactory,"p p mu+ mu- j","1","2","HTScale",0,0) process+=addFirstJet("35") parameterName=parameterName.replace("Z-Jet-0-mu","Z-Jet-mu") process+=addLeptonPairCut("60","120") elif "Z-bb" in parameterName : if(simulation=="Merging"): logging.warning("Z-bb not explicitly tested for %s " % simulation) sys.exit(0) parameters["bscheme"]=fourFlavour process+="set /Herwig/Particles/b:HardProcessMass 4.2*GeV\nset /Herwig/Particles/bbar:HardProcessMass 4.2*GeV\n" process+=addProcess(thefactory,"p p e+ e- b bbar","2","2","FixedScale",0,0) process+=addLeptonPairCut("66","116") process+=addFirstJet("18") process+=addSecondJet("15") process+=addLeptonPairCut("60","120") elif "Z-b" in parameterName : if(simulation=="Merging"): logging.warning("Z-b not explicitly tested for %s " % simulation) sys.exit(0) process+=particlegroup(thefactory,'bjet','b','bbar') process+=addProcess(thefactory,"p p e+ e- bjet","1","2","FixedScale",0,0) process+="set /Herwig/MatrixElements/Matchbox/Scales/FixedScale:FixedScale 91.2*GeV\n" process+=addLeptonPairCut("60","120") process+=addFirstJet("15") elif "W-b" in parameterName : if(simulation=="Merging"): logging.warning("W-b not explicitly tested for %s " % simulation) sys.exit(0) parameters["bscheme"]=fourFlavour process += "set /Herwig/Particles/b:HardProcessMass 4.2*GeV\nset /Herwig/Particles/bbar:HardProcessMass 4.2*GeV\n" process+=addProcess(thefactory,"p p e- nu b bbar","2","2","FixedScale",0,0) process+=addProcess(thefactory,"p p mu+ nu b bbar","2","2","FixedScale",0,0) process += "set /Herwig/MatrixElements/Matchbox/Scales/FixedScale:FixedScale 80.4*GeV\n" process+=addFirstJet("30") process+=addLeptonPairCut("60","120") else : logging.error(" Process %s not supported for Matchbox matrix elements" % name) sys.exit(1) # LHC-GammaGamma elif(collider=="LHC-GammaGamma" ) : if "-7-" in parameterName : process = StringBuilder(collider_lumi(7000.0)) elif "-8-" in parameterName : process = StringBuilder(collider_lumi(8000.0)) else : process = StringBuilder(collider_lumi(7000.0)) if(simulation=="") : if "7" in parameterName : process += insert_ME("MEgg2ff","Muon") else : logging.error(" Process %s not supported for default matrix elements" % name) sys.exit(1) else : logging.error("LHC-GammaGamma not supported for %s " % simulation) sys.exit(1) parameters['parameterFile'] = os.path.join(collider,"{c}-{pn}.in".format(c=collider, pn=parameterName)) parameters['runname'] = 'Rivet-%s' % name parameters['process'] = str(process) if have_hadronic_collider : if collider == "EHS" : parameters['collider'] = "PPCollider.in\nread snippets/FixedTarget-PP.in" else : parameters['collider'] = "PPCollider.in" #check if selecteddecaymode and addedBRReweighter is consistent if selecteddecaymode and not addedBRReweighter: logging.error("Decaymode was selected but no BRReweighter was added.") sys.exit(1) if addedBRReweighter and not selecteddecaymode: logging.error("BRReweighter was added but no Decaymode was selected.") sys.exit(1) # check that we only add one process if in merging mode: if numberOfAddedProcesses > 1 and simulation =="Merging": logging.error("In Merging only one process is allowed at the moment. See ticket #403.") sys.exit(1) # Check if a process was added for Merging or Matchbox: if numberOfAddedProcesses == 0 and (simulation =="Merging" or simulation =="Matchbox"): logging.error("No process was selected.") sys.exit(1) # get template and write the file with open(os.path.join("Rivet/Templates",templateName), 'r') as f: templateText = f.read() template = Template( templateText ) with open(os.path.join("Rivet",name+".in"), 'w') as f: f.write( template.substitute(parameters) ) diff --git a/Tests/python/merge-DIS b/Tests/python/merge-DIS --- a/Tests/python/merge-DIS +++ b/Tests/python/merge-DIS @@ -1,162 +1,162 @@ #! /usr/bin/env python -import logging -import sys +from __future__ import print_function +import logging, sys if sys.version_info[:3] < (2,4,0): - print "rivet scripts require Python version >= 2.4.0... exiting" + print ("rivet scripts require Python version >= 2.4.0... exiting") sys.exit(1) import os, yoda # ############################################# def fillAbove(desthisto, sourcehistosbyq2): q2high=1e100 q2low=-1e100 for q2,h in sorted(sourcehistosbyq2.iteritems(),reverse=True) : q2low=q2 for i in range(0,h.numBins()) : if(h.bins()[i].xMin() >= q2low and h.bins()[i].xMin() < q2high ) : desthisto.bins()[i] += h.bins()[i] q2high=q2 def merge(hpath): global inhistos global outhistos try: fillAbove(outhistos[hpath], inhistos[hpath]) except: pass def useOne(hpath, q2): global inhistos global outhistos try: outhistos[hpath] = inhistos[hpath][float(q2)] except: pass if __name__ == "__main__": import logging from optparse import OptionParser, OptionGroup parser = OptionParser(usage="%prog name") verbgroup = OptionGroup(parser, "Verbosity control") verbgroup.add_option("-v", "--verbose", action="store_const", const=logging.DEBUG, dest="LOGLEVEL", default=logging.INFO, help="print debug (very verbose) messages") verbgroup.add_option("-q", "--quiet", action="store_const", const=logging.WARNING, dest="LOGLEVEL", default=logging.INFO, help="be very quiet") parser.add_option_group(verbgroup) (opts, args) = parser.parse_args() logging.basicConfig(level=opts.LOGLEVEL, format="%(message)s") ## Check args if len(args) < 1: logging.error("Must specify at least the name of the files") sys.exit(1) # ####################################### yodafiles=["-e--LowQ2","-e+-LowQ2","-e+-HighQ2"] ## Get histos inhistos = {} outhistos={} weights = {} for f in yodafiles: file = "Rivet-%s%s.yoda" % (args[0], f) if(file.find("Low")> 0) : q2=0 elif(file.find("High")>0) : q2=50 if not os.access(file, os.R_OK): logging.error("%s can not be read" % file) continue try: aos = yoda.read(file) except: logging.error("%s can not be parsed as YODA" % file) continue ## Get histos from this YODA file - for aopath, ao in aos.iteritems() : + for aopath, ao in aos.items() : if("RAW" in aopath) :continue if(aopath.find("4129130")>0 ) : - if not inhistos.has_key(aopath): + if aopath not in inhistos: inhistos[aopath] = {} tmpE = inhistos[aopath] - if not tmpE.has_key(q2): + if q2 not in tmpE: tmpE[q2] = ao else: raise Exception("A set with q2 = %s already exists" % ( q2 )) elif(aopath.find("2919893")>0 ) : outhistos[aopath] = ao elif(aopath.find("_XSEC")>=0 or aopath.find("_EVTCOUNT")>=0) : continue else : logging.error("Analysis %s is unknown" % aopath) sys.exit(1) ## Make empty output histos if needed -for hpath,hsets in inhistos.iteritems(): +for hpath,hsets in inhistos.items(): if( hpath.find("4129130")>0 and (hpath.find("d33")>0 or hpath.find("d34")>0)) : title="" path="" - histo = hsets.values()[0] + histo = list(hsets.values())[0] if hasattr(histo, 'title'): title=histo.title() if hasattr(histo, 'path'): path=histo.path() if(type(histo)==yoda.core.Scatter2D) : outhistos[hpath] = yoda.core.Scatter2D(path,title) elif(type(histo)==yoda.core.Profile1D) : outhistos[hpath] = yoda.core.Profile1D(path,title) for i in range(0,histo.numBins()) : outhistos[hpath].addBin(histo.bins()[i].xMin(),histo.bins()[i].xMax()) else : logging.error("Histogram %s is of unknown type" % hpath) sys.exit(1) # H1 transverse energy useOne("/H1_2000_S4129130/d01-x01-y01","0") useOne("/H1_2000_S4129130/d02-x01-y01","0") useOne("/H1_2000_S4129130/d03-x01-y01","0") useOne("/H1_2000_S4129130/d04-x01-y01","0") useOne("/H1_2000_S4129130/d05-x01-y01","0") useOne("/H1_2000_S4129130/d06-x01-y01","0") useOne("/H1_2000_S4129130/d07-x01-y01","0") useOne("/H1_2000_S4129130/d08-x01-y01","0") useOne("/H1_2000_S4129130/d09-x01-y01","0") useOne("/H1_2000_S4129130/d10-x01-y01","0") useOne("/H1_2000_S4129130/d11-x01-y01","0") useOne("/H1_2000_S4129130/d12-x01-y01","0") useOne("/H1_2000_S4129130/d13-x01-y01","0") useOne("/H1_2000_S4129130/d14-x01-y01","0") useOne("/H1_2000_S4129130/d15-x01-y01","0") useOne("/H1_2000_S4129130/d16-x01-y01","50") useOne("/H1_2000_S4129130/d17-x01-y01","50") useOne("/H1_2000_S4129130/d18-x01-y01","50") useOne("/H1_2000_S4129130/d19-x01-y01","50") useOne("/H1_2000_S4129130/d20-x01-y01","50") useOne("/H1_2000_S4129130/d21-x01-y01","50") useOne("/H1_2000_S4129130/d22-x01-y01","50") useOne("/H1_2000_S4129130/d23-x01-y01","50") useOne("/H1_2000_S4129130/d24-x01-y01","50") useOne("/H1_2000_S4129130/d25-x01-y01","0") useOne("/H1_2000_S4129130/d26-x01-y01","0") useOne("/H1_2000_S4129130/d27-x01-y01","0") useOne("/H1_2000_S4129130/d28-x01-y01","0") useOne("/H1_2000_S4129130/d29-x01-y01","50") useOne("/H1_2000_S4129130/d30-x01-y01","50") useOne("/H1_2000_S4129130/d31-x01-y01","50") useOne("/H1_2000_S4129130/d32-x01-y01","50") merge("/H1_2000_S4129130/d33-x01-y01") merge("/H1_2000_S4129130/d34-x01-y01") # Choose output file name = args[0]+".yoda" # output the yoda file yoda.writeYODA(outhistos,name) sys.exit(0) diff --git a/Tests/python/merge-EE b/Tests/python/merge-EE --- a/Tests/python/merge-EE +++ b/Tests/python/merge-EE @@ -1,1332 +1,1332 @@ #! /usr/bin/env python -# import lighthisto +from __future__ import print_function import logging import sys if sys.version_info[:3] < (2,4,0): - print "rivet scripts require Python version >= 2.4.0... exiting" + print ("rivet scripts require Python version >= 2.4.0... exiting") sys.exit(1) import os, yoda, copy # # ############################################# def fillAbove(desthisto, sourcehistosbysqrts): if type(desthisto) is yoda.core.Scatter2D : - for sqrts,h in sorted(sourcehistosbysqrts.iteritems()) : + for sqrts,h in sorted(sourcehistosbysqrts.items()) : if(sqrts=="U1") : sqrts2=9.46 if "LENA_1981_I164397" in desthisto.path() : sqrts2=9.4624 elif sqrts=="U2" : sqrts2=10.02 if "LENA_1981_I164397" in desthisto.path() : sqrts2=10.0148 elif sqrts=="U4" : sqrts2=10.58 else : sqrts2=float(sqrts) if ("ARGUS_1989_I276860" in desthisto.path() and sqrts2==10. ) : sqrts2=9.98 elif ( "LENA_1981_I164397" in desthisto.path() and sqrts2==10. ) : sqrts2=9.9903 elif ( "LENA_1981_I164397" in desthisto.path() and sqrts2==9.51) : sqrts2=9.5149 step = 0.001 if("TASSO_1980_I143691" in desthisto.path()) : step=0.3 if("JADE_1979_I142874" in desthisto.path()) : step=0.3 if("CLEO_1985_I205668" in desthisto.path()) : step=0.05 for i in range(0,h.numPoints()) : xmin = min(h.points()[i].xMin(),h.points()[i].x()-step) xmax = max(h.points()[i].xMax(),h.points()[i].x()+step) if(sqrts2>=xmin and sqrts2<=xmax) : desthisto.addPoint(h.points()[i]) elif(type(desthisto)==yoda.core.Profile1D) : - for sqrts, h in sorted(sourcehistosbysqrts.iteritems()) : + for sqrts, h in sorted(sourcehistosbysqrts.items()) : step = 0.001 for i in range(0,h.numBins()) : xmin = min(h.bins()[i].xMin(),h.bins()[i].xMid()-step) xmax = max(h.bins()[i].xMax(),h.bins()[i].xMid()+step) if(sqrts>=xmin and sqrts<=xmax) : desthisto.bins()[i] += h.bins()[i] break else : logging.error("Unknown analysis object" + desthisto.path) sys.exit(1) def merge(hpath): global inhistos global outhistos try: fillAbove(outhistos[hpath], inhistos[hpath]) except: pass def useOne(hpath, sqrts): global inhistos global outhistos try: outhistos[hpath] = inhistos[hpath][float(sqrts)] except: try: outhistos[hpath] = inhistos[hpath][sqrts] except: pass def average(hpath, sqrts1,sqrts2): global inhistos global outhistos outhistos[hpath] = inhistos[hpath][float(sqrts1)]+inhistos[hpath][float(sqrts2)] outhistos[hpath].setPath(hpath) outhistos[hpath].scaleW(0.5) if __name__ == "__main__": import logging from optparse import OptionParser, OptionGroup parser = OptionParser(usage="%prog name") verbgroup = OptionGroup(parser, "Verbosity control") verbgroup.add_option("-v", "--verbose", action="store_const", const=logging.DEBUG, dest="LOGLEVEL", default=logging.INFO, help="print debug (very verbose) messages") verbgroup.add_option("-q", "--quiet", action="store_const", const=logging.WARNING, dest="LOGLEVEL", default=logging.INFO, help="be very quiet") parser.add_option_group(verbgroup) parser.add_option("--with-gg", action='store_true' , dest="gg", default=False, help="Include gg analyses") parser.add_option("--without-gg", action='store_false', dest="gg", default=False, help="Don\'t include gg analyses") parser.add_option("--with-decay", action='store_true' , dest="decay", default=False, help="Include decay analyses") parser.add_option("--without-decay", action='store_false', dest="decay", default=False, help="Don\'t include decay analyses") (opts, args) = parser.parse_args() logging.basicConfig(level=opts.LOGLEVEL, format="%(message)s") ## Check args if len(args) < 1: logging.error("Must specify at least the name of the files") sys.exit(1) ####################################### yodafiles=["130","133","136","177","192", "196","202","205","206","207","91" ,"91-nopi" ,\ "161","183","197","35" ,"36.2","172",\ "189","200","44","14","14.8","21.5","22","25","10",\ "12.8","26.8","48.0","93.0",\ "12","13","17","27.6","27.7","29","30.2","34.5",\ "30.7","30","31.3","31.6","34","34.8","42.1","43.6","50","52","53.3",\ "55","56","57","58","59.5","60.8","60","61.4","7.7", "9.4","45","66","76","41","42.6","82","85","2.2","2.6","3.0","3.2","4.6","4.8", "5.8","6.2","6.6","7.0","7.4","3.63","4.03","4.17","4.3", "4.41","5.0","5.2","4.5","8.8","9.27","9.46","9.51","10.52","10.52-sym","10.54","10.58", "10.6","10.45","10.47"] # add gg if needed if(opts.gg) : yodafiles += ["10.5-gg","12.8-gg","16.86-gg","26.8-gg",\ "35.44-gg","97.0-gg","11.96-gg","13.96-gg",\ "21.84-gg","28.48-gg","48.0-gg"] # add decays if needed if(opts.decay) : yodafiles += ["Upsilon","Upsilon2","Upsilon3","Upsilon4","Upsilon4-asym", "Tau","Phi","Lambdac","Omega-Meson", "Omega-Baryon","Eta","Xi0","Xic0","Xicp", "Omegac0","Xim","JPsi","Psi2S","Psi3770"] ## Get histos inhistos = {} outhistos={} for f in yodafiles: file = "Rivet-%s-%s.yoda" % (args[0], f) if(file.find("Tau")>0) : sqrts=10.58 elif(file.find("Upsilon4")>0) : sqrts="U4" elif(file.find("Upsilon2")>0) : sqrts="U2" elif(file.find("Upsilon3")>0) : sqrts="U3" elif(file.find("Upsilon")>0) : sqrts="U1" elif(file.find("Phi")>0) : sqrts="phi" elif(file.find("Omega-Meson")>0) : sqrts="omega" elif(file.find("JPsi")>0) : sqrts="psi" elif(file.find("Psi2S")>0) : sqrts="psi2s" elif(file.find("Psi3770")>0) : sqrts="psi1d" elif(file.find("Lambdac")>0 or file.find("Xic0")>0 or file.find("Omega")>0 or file.find("Xi0")>0 or file.find("Xim")>0 or file.find("Xicp")>0 or file.find("Eta")>0) : sqrts="baryon" else : sqrts=float(f.split("-")[0]) if not os.access(file, os.R_OK): logging.error("%s cannot be read" % file) continue try: aos = yoda.read(file) except: logging.error("%s cannot be parsed as yoda" % file) continue ## Get histos from this YODA file - for aopath, ao in aos.iteritems() : + for aopath, ao in aos.items() : if("RAW" in aopath or "/_" in aopath) :continue # plots which neede merging/selecting if(aopath.find("4300807")>0 or aopath.find("6132243")>0 or aopath.find("5765862")>0 or aopath.find("3612880")>0 or aopath.find("4328825")>0 or aopath.find("5361494")>0 or aopath.find("2148048")>0 or aopath.find("295160" )>0 or aopath.find("190818" )>0 or aopath.find("154270" )>0 or aopath.find("277658" )>0 or aopath.find("143691" )>0 or aopath.find("6265367")>0 or aopath.find("6895344")>0 or aopath.find("6181155")>0 or aopath.find("2789213")>0 or aopath.find("2669951")>0 or aopath.find("278933" )>0 or aopath.find("276860" )>0 or aopath.find("251097" )>0 or aopath.find("262551" )>0 or aopath.find("262415" )>0 or aopath.find("165122" )>0 or aopath.find("118873" )>0 or aopath.find("177174" )>0 or aopath.find("284251" )>0 or aopath.find("191161" )>0 or aopath.find("1422780")>0 or aopath.find("132410" )>0 or "JADE_1979_I142874" in aopath or "LENA_1981_I164397" in aopath or "ARGUS_1991_I315059" in aopath or "TASSO_1989_I266893" in aopath or "CLEO_1985_I205668" in aopath or "BABAR_2014_I1286317" in aopath or ("OPAL_2000_I513476" in aopath and ("d14" in aopath or "d20" in aopath )) or (aopath.find("MULTIPLICITIES")>0 and aopath.find("Upsilon_4S")<0)) : - if not inhistos.has_key(aopath): + if aopath not in inhistos: inhistos[aopath] = {} tmpE = inhistos[aopath] sqrttemp=sqrts if(aopath.find("2669951")>0 and aopath.find("d01")>0 and sqrts==10.45) : sqrts=9.9 - if not tmpE.has_key(sqrts): + if sqrts not in tmpE: tmpE[sqrts] = ao else: raise Exception("A set with sqrts = %s already exists" % ( sqrts)) sqrts=sqrttemp elif(aopath.find("OPAL_2004_I648738")>=0) : if(file.find("gg")>=0) : if(aopath.find("y03")>=0) : outhistos[aopath] = ao else : if(aopath.find("y03")<0) : outhistos[aopath] = ao elif(aopath.find("A2_2017_I1486671")>=0) : if("Eta" in file) : if "d01" in aopath : outhistos[aopath] = ao elif("Omega" in file) : if "d02" in aopath : outhistos[aopath] = ao else : outhistos[aopath] = ao elif("ARGUS_1992_I319102" in aopath) : if(("d02" in aopath or "d04" in aopath) and sqrts==10.47) : outhistos[aopath] = ao elif(("d03"in aopath or "d05" in aopath) and sqrts=="U4") : outhistos[aopath] = ao elif("MC_OmegaPhia1_3Pion_Decay" in aopath) : if("_1" in aopath and "Omega" in file) : outhistos[aopath] = ao elif("_2" in aopath and "Phi" in file) : outhistos[aopath] = ao elif("BABAR_2006_I719581" in aopath) : if("d02" in aopath and "Omega" in file) : outhistos[aopath] = ao elif("d01" in aopath and "Xi" in file) : outhistos[aopath] = ao elif("BABAR_2002_I582184" in aopath) : if(("d02" in aopath or "d05" in aopath ) and "Upsilon" in file) : outhistos[aopath] = ao elif( not ("d02" in aopath or "d05" in aopath ) and sqrts==10.6) : outhistos[aopath] = ao elif(aopath=="/BABAR_2007_I746745/d01-x01-y01") : htemp = aos["/RAW/BABAR_2007_I746745/d01-x01-y01"] htemp.scaleW(aos["/_XSEC"].points()[0].x()/aos["/_EVTCOUNT"].val()) htemp.setPath("/BABAR_2007_I746745/d01-x01-y01") if "/BABAR_2007_I746745/d01-x01-y01" in outhistos : htemp2=htemp+outhistos["/BABAR_2007_I746745/d01-x01-y01"] htemp2.setPath("/BABAR_2007_I746745/d01-x01-y01") outhistos["/BABAR_2007_I746745/d01-x01-y01"]=htemp2 else : outhistos["/BABAR_2007_I746745/d01-x01-y01"]=htemp elif(aopath=="/BABAR_2007_I722622/d03-x01-y01" or aopath=="/BABAR_2007_I722622/d03-x01-y02" or aopath=="/BABAR_2007_I722622/d04-x01-y01") : htemp = aos["/RAW"+aopath] htemp.scaleW(aos["/_XSEC"].points()[0].x()/aos["/_EVTCOUNT"].val()) htemp.setPath(aopath) if aopath in outhistos : htemp2=htemp+outhistos[aopath] htemp2.setPath(aopath) outhistos[aopath]=htemp2 else : outhistos[aopath]=htemp else: outhistos[aopath] = ao # ## Make empty output histos if needed -for hpath,hsets in inhistos.iteritems(): +for hpath,hsets in inhistos.items(): if( hpath.find("4300807")>0 or hpath.find("6132243")>0 or hpath.find("5765862")>0 or hpath.find("295160" )>0 or hpath.find("4328825")>0 or hpath.find("5361494")>0 or hpath.find("190818" )>0 or hpath.find("154270" )>0 or hpath.find("277658" )>0 or hpath.find("2669951")>0 or hpath.find("276860" )>0 or hpath.find("165122" )>0 or hpath.find("118873" )>0 or hpath.find("143691" )>0 or hpath.find("284251" )>0 or hpath.find("191161" )>0 or hpath.find("1422780")>0 or hpath.find("132410" )>0 or "OPAL_2000_I513476" in hpath or "JADE_1979_I142874" in hpath or "CLEO_1985_I205668" in hpath or "BABAR_2014_I1286317" in hpath or "LENA_1981_I164397" in hpath): if(hpath=="/PLUTO_1981_I165122/d01-x01-y01" or hpath=="/PLUTO_1981_I165122/d03-x01-y01" ) : continue title="" path="" - histo = hsets.values()[0] + histo = list(hsets.values())[0] if hasattr(histo, 'title'): title=histo.title() if hasattr(histo, 'path'): path=histo.path() if(type(histo)==yoda.core.Scatter2D) : outhistos[hpath] = yoda.core.Scatter2D(path,title) elif(type(histo)==yoda.core.Profile1D) : outhistos[hpath] = yoda.core.Profile1D(path,title) for i in range(0,histo.numBins()) : outhistos[hpath].addBin(histo.bins()[i].xMin(), histo.bins()[i].xMax()) elif(type(histo)==yoda.core.Histo1D) : outhistos[hpath] = yoda.core.Histo1D(path,title) for i in range(0,histo.numBins()) : outhistos[hpath].addBin(histo.bins()[i].xMin(), histo.bins()[i].xMax()) else : logging.error("Histogram %s is of unknown type" % hpath) sys.exit(1) # tasso useOne("/TASSO_1990_S2148048/d06-x01-y01","14") useOne("/TASSO_1990_S2148048/d07-x01-y01","14") useOne("/TASSO_1990_S2148048/d08-x01-y01","14") useOne("/TASSO_1990_S2148048/d06-x01-y02","22") useOne("/TASSO_1990_S2148048/d07-x01-y02","22") useOne("/TASSO_1990_S2148048/d08-x01-y02","22") useOne("/TASSO_1990_S2148048/d06-x01-y03","35") useOne("/TASSO_1990_S2148048/d07-x01-y03","35") useOne("/TASSO_1990_S2148048/d08-x01-y03","35") useOne("/TASSO_1990_S2148048/d06-x01-y04","44") useOne("/TASSO_1990_S2148048/d07-x01-y04","44") useOne("/TASSO_1990_S2148048/d08-x01-y04","44") # jade useOne("/JADE_1998_S3612880/d02-x01-y01","44") useOne("/JADE_1998_S3612880/d03-x01-y01","44") useOne("/JADE_1998_S3612880/d04-x01-y01","44") useOne("/JADE_1998_S3612880/d05-x01-y01","44") useOne("/JADE_1998_S3612880/d06-x01-y01","35") useOne("/JADE_1998_S3612880/d07-x01-y01","35") useOne("/JADE_1998_S3612880/d08-x01-y01","35") useOne("/JADE_1998_S3612880/d09-x01-y01","35") useOne("/JADE_1998_S3612880/d10-x01-y01","44") useOne("/JADE_1998_S3612880/d11-x01-y01","35") useOne("/JADE_1998_S3612880/d12-x01-y01","22") # opal/jade useOne("/JADE_OPAL_2000_S4300807/d07-x01-y01","35") useOne("/JADE_OPAL_2000_S4300807/d07-x01-y02","35") useOne("/JADE_OPAL_2000_S4300807/d07-x01-y03","35") useOne("/JADE_OPAL_2000_S4300807/d07-x01-y04","35") useOne("/JADE_OPAL_2000_S4300807/d07-x01-y05","35") useOne("/JADE_OPAL_2000_S4300807/d08-x01-y01","44") useOne("/JADE_OPAL_2000_S4300807/d08-x01-y02","44") useOne("/JADE_OPAL_2000_S4300807/d08-x01-y03","44") useOne("/JADE_OPAL_2000_S4300807/d08-x01-y04","44") useOne("/JADE_OPAL_2000_S4300807/d08-x01-y05","44") useOne("/JADE_OPAL_2000_S4300807/d09-x01-y01","91") useOne("/JADE_OPAL_2000_S4300807/d09-x01-y02","91") useOne("/JADE_OPAL_2000_S4300807/d09-x01-y03","91") useOne("/JADE_OPAL_2000_S4300807/d09-x01-y04","91") useOne("/JADE_OPAL_2000_S4300807/d09-x01-y05","91") useOne("/JADE_OPAL_2000_S4300807/d10-x01-y01","133") useOne("/JADE_OPAL_2000_S4300807/d10-x01-y02","133") useOne("/JADE_OPAL_2000_S4300807/d10-x01-y03","133") useOne("/JADE_OPAL_2000_S4300807/d10-x01-y04","133") useOne("/JADE_OPAL_2000_S4300807/d10-x01-y05","133") useOne("/JADE_OPAL_2000_S4300807/d11-x01-y01","161") useOne("/JADE_OPAL_2000_S4300807/d11-x01-y02","161") useOne("/JADE_OPAL_2000_S4300807/d11-x01-y03","161") useOne("/JADE_OPAL_2000_S4300807/d11-x01-y04","161") useOne("/JADE_OPAL_2000_S4300807/d11-x01-y05","161") useOne("/JADE_OPAL_2000_S4300807/d12-x01-y01","172") useOne("/JADE_OPAL_2000_S4300807/d12-x01-y02","172") useOne("/JADE_OPAL_2000_S4300807/d12-x01-y03","172") useOne("/JADE_OPAL_2000_S4300807/d12-x01-y04","172") useOne("/JADE_OPAL_2000_S4300807/d12-x01-y05","172") useOne("/JADE_OPAL_2000_S4300807/d13-x01-y01","183") useOne("/JADE_OPAL_2000_S4300807/d13-x01-y02","183") useOne("/JADE_OPAL_2000_S4300807/d13-x01-y03","183") useOne("/JADE_OPAL_2000_S4300807/d13-x01-y04","183") useOne("/JADE_OPAL_2000_S4300807/d13-x01-y05","183") useOne("/JADE_OPAL_2000_S4300807/d14-x01-y01","189") useOne("/JADE_OPAL_2000_S4300807/d14-x01-y02","189") useOne("/JADE_OPAL_2000_S4300807/d14-x01-y03","189") useOne("/JADE_OPAL_2000_S4300807/d14-x01-y04","189") useOne("/JADE_OPAL_2000_S4300807/d14-x01-y05","189") useOne("/JADE_OPAL_2000_S4300807/d16-x01-y01","35") useOne("/JADE_OPAL_2000_S4300807/d16-x01-y02","35") useOne("/JADE_OPAL_2000_S4300807/d16-x01-y03","35") useOne("/JADE_OPAL_2000_S4300807/d16-x01-y04","35") useOne("/JADE_OPAL_2000_S4300807/d16-x01-y05","35") useOne("/JADE_OPAL_2000_S4300807/d17-x01-y01","44") useOne("/JADE_OPAL_2000_S4300807/d17-x01-y02","44") useOne("/JADE_OPAL_2000_S4300807/d17-x01-y03","44") useOne("/JADE_OPAL_2000_S4300807/d17-x01-y04","44") useOne("/JADE_OPAL_2000_S4300807/d17-x01-y05","44") useOne("/JADE_OPAL_2000_S4300807/d18-x01-y01","91") useOne("/JADE_OPAL_2000_S4300807/d18-x01-y02","91") useOne("/JADE_OPAL_2000_S4300807/d18-x01-y03","91") useOne("/JADE_OPAL_2000_S4300807/d18-x01-y04","91") useOne("/JADE_OPAL_2000_S4300807/d18-x01-y05","91") useOne("/JADE_OPAL_2000_S4300807/d19-x01-y01","133") useOne("/JADE_OPAL_2000_S4300807/d19-x01-y02","133") useOne("/JADE_OPAL_2000_S4300807/d19-x01-y03","133") useOne("/JADE_OPAL_2000_S4300807/d19-x01-y04","133") useOne("/JADE_OPAL_2000_S4300807/d19-x01-y05","133") useOne("/JADE_OPAL_2000_S4300807/d20-x01-y01","161") useOne("/JADE_OPAL_2000_S4300807/d20-x01-y02","161") useOne("/JADE_OPAL_2000_S4300807/d20-x01-y03","161") useOne("/JADE_OPAL_2000_S4300807/d20-x01-y04","161") useOne("/JADE_OPAL_2000_S4300807/d20-x01-y05","161") useOne("/JADE_OPAL_2000_S4300807/d21-x01-y01","172") useOne("/JADE_OPAL_2000_S4300807/d21-x01-y02","172") useOne("/JADE_OPAL_2000_S4300807/d21-x01-y03","172") useOne("/JADE_OPAL_2000_S4300807/d21-x01-y04","172") useOne("/JADE_OPAL_2000_S4300807/d21-x01-y05","172") useOne("/JADE_OPAL_2000_S4300807/d22-x01-y01","183") useOne("/JADE_OPAL_2000_S4300807/d22-x01-y02","183") useOne("/JADE_OPAL_2000_S4300807/d22-x01-y03","183") useOne("/JADE_OPAL_2000_S4300807/d22-x01-y04","183") useOne("/JADE_OPAL_2000_S4300807/d22-x01-y05","183") useOne("/JADE_OPAL_2000_S4300807/d23-x01-y01","189") useOne("/JADE_OPAL_2000_S4300807/d23-x01-y02","189") useOne("/JADE_OPAL_2000_S4300807/d23-x01-y03","189") useOne("/JADE_OPAL_2000_S4300807/d23-x01-y04","189") useOne("/JADE_OPAL_2000_S4300807/d23-x01-y05","189") useOne("/JADE_OPAL_2000_S4300807/d24-x01-y01","35") useOne("/JADE_OPAL_2000_S4300807/d24-x01-y02","35") useOne("/JADE_OPAL_2000_S4300807/d24-x01-y03","35") useOne("/JADE_OPAL_2000_S4300807/d24-x01-y04","35") useOne("/JADE_OPAL_2000_S4300807/d25-x01-y01","44") useOne("/JADE_OPAL_2000_S4300807/d25-x01-y02","44") useOne("/JADE_OPAL_2000_S4300807/d25-x01-y03","44") useOne("/JADE_OPAL_2000_S4300807/d25-x01-y04","44") useOne("/JADE_OPAL_2000_S4300807/d26-x01-y01","91") useOne("/JADE_OPAL_2000_S4300807/d26-x01-y02","91") useOne("/JADE_OPAL_2000_S4300807/d26-x01-y03","91") useOne("/JADE_OPAL_2000_S4300807/d26-x01-y04","91") useOne("/JADE_OPAL_2000_S4300807/d27-x01-y01","133") useOne("/JADE_OPAL_2000_S4300807/d27-x01-y02","133") useOne("/JADE_OPAL_2000_S4300807/d27-x01-y03","133") useOne("/JADE_OPAL_2000_S4300807/d27-x01-y04","133") useOne("/JADE_OPAL_2000_S4300807/d28-x01-y01","161") useOne("/JADE_OPAL_2000_S4300807/d28-x01-y02","161") useOne("/JADE_OPAL_2000_S4300807/d28-x01-y03","161") useOne("/JADE_OPAL_2000_S4300807/d28-x01-y04","161") useOne("/JADE_OPAL_2000_S4300807/d29-x01-y01","172") useOne("/JADE_OPAL_2000_S4300807/d29-x01-y02","172") useOne("/JADE_OPAL_2000_S4300807/d29-x01-y03","172") useOne("/JADE_OPAL_2000_S4300807/d29-x01-y04","172") useOne("/JADE_OPAL_2000_S4300807/d30-x01-y01","183") useOne("/JADE_OPAL_2000_S4300807/d30-x01-y02","183") useOne("/JADE_OPAL_2000_S4300807/d30-x01-y03","183") useOne("/JADE_OPAL_2000_S4300807/d30-x01-y04","183") useOne("/JADE_OPAL_2000_S4300807/d31-x01-y01","189") useOne("/JADE_OPAL_2000_S4300807/d31-x01-y02","189") useOne("/JADE_OPAL_2000_S4300807/d31-x01-y03","189") useOne("/JADE_OPAL_2000_S4300807/d31-x01-y04","189") useOne("/OPAL_2004_S6132243/d01-x01-y01","91") useOne("/OPAL_2004_S6132243/d01-x01-y02","133") useOne("/OPAL_2004_S6132243/d01-x01-y03","177") useOne("/OPAL_2004_S6132243/d01-x01-y04","197") useOne("/OPAL_2004_S6132243/d02-x01-y01","91") useOne("/OPAL_2004_S6132243/d02-x01-y02","133") useOne("/OPAL_2004_S6132243/d02-x01-y03","177") useOne("/OPAL_2004_S6132243/d02-x01-y04","197") useOne("/OPAL_2004_S6132243/d03-x01-y01","91") useOne("/OPAL_2004_S6132243/d03-x01-y02","133") useOne("/OPAL_2004_S6132243/d03-x01-y03","177") useOne("/OPAL_2004_S6132243/d03-x01-y04","197") useOne("/OPAL_2004_S6132243/d04-x01-y01","91") useOne("/OPAL_2004_S6132243/d04-x01-y02","133") useOne("/OPAL_2004_S6132243/d04-x01-y03","177") useOne("/OPAL_2004_S6132243/d04-x01-y04","197") useOne("/OPAL_2004_S6132243/d05-x01-y01","91") useOne("/OPAL_2004_S6132243/d05-x01-y02","133") useOne("/OPAL_2004_S6132243/d05-x01-y03","177") useOne("/OPAL_2004_S6132243/d05-x01-y04","197") useOne("/OPAL_2004_S6132243/d06-x01-y01","91") useOne("/OPAL_2004_S6132243/d06-x01-y02","133") useOne("/OPAL_2004_S6132243/d06-x01-y03","177") useOne("/OPAL_2004_S6132243/d06-x01-y04","197") useOne("/OPAL_2004_S6132243/d07-x01-y01","91") useOne("/OPAL_2004_S6132243/d07-x01-y02","133") useOne("/OPAL_2004_S6132243/d07-x01-y03","177") useOne("/OPAL_2004_S6132243/d07-x01-y04","197") useOne("/OPAL_2004_S6132243/d08-x01-y01","91") useOne("/OPAL_2004_S6132243/d08-x01-y02","133") useOne("/OPAL_2004_S6132243/d08-x01-y03","177") useOne("/OPAL_2004_S6132243/d08-x01-y04","197") useOne("/OPAL_2004_S6132243/d09-x01-y01","91") useOne("/OPAL_2004_S6132243/d09-x01-y02","133") useOne("/OPAL_2004_S6132243/d09-x01-y03","177") useOne("/OPAL_2004_S6132243/d09-x01-y04","197") useOne("/OPAL_2004_S6132243/d10-x01-y01","91") useOne("/OPAL_2004_S6132243/d10-x01-y02","133") useOne("/OPAL_2004_S6132243/d10-x01-y03","177") useOne("/OPAL_2004_S6132243/d10-x01-y04","197") useOne("/OPAL_2004_S6132243/d11-x01-y01","91") useOne("/OPAL_2004_S6132243/d11-x01-y02","133") useOne("/OPAL_2004_S6132243/d11-x01-y03","177") useOne("/OPAL_2004_S6132243/d11-x01-y04","197") useOne("/OPAL_2004_S6132243/d12-x01-y01","91") useOne("/OPAL_2004_S6132243/d12-x01-y02","133") useOne("/OPAL_2004_S6132243/d12-x01-y03","177") useOne("/OPAL_2004_S6132243/d12-x01-y04","197") useOne("/OPAL_2004_S6132243/d13-x01-y01","91") useOne("/OPAL_2004_S6132243/d13-x01-y02","133") useOne("/OPAL_2004_S6132243/d13-x01-y03","177") useOne("/OPAL_2004_S6132243/d13-x01-y04","197") useOne("/OPAL_2004_S6132243/d14-x01-y01","91") useOne("/OPAL_2004_S6132243/d14-x01-y02","133") useOne("/OPAL_2004_S6132243/d14-x01-y03","177") useOne("/OPAL_2004_S6132243/d14-x01-y04","197") useOne("/OPAL_2004_S6132243/d15-x01-y01","91") useOne("/OPAL_2004_S6132243/d15-x01-y02","133") useOne("/OPAL_2004_S6132243/d15-x01-y03","177") useOne("/OPAL_2004_S6132243/d15-x01-y04","197") useOne("/OPAL_2004_S6132243/d16-x01-y01","91") useOne("/OPAL_2004_S6132243/d16-x01-y02","133") useOne("/OPAL_2004_S6132243/d16-x01-y03","177") useOne("/OPAL_2004_S6132243/d16-x01-y04","197") useOne("/OPAL_2004_S6132243/d17-x01-y01","91") useOne("/OPAL_2004_S6132243/d17-x01-y02","133") useOne("/OPAL_2004_S6132243/d17-x01-y03","177") useOne("/OPAL_2004_S6132243/d17-x01-y04","197") useOne("/OPAL_2004_S6132243/d18-x01-y01","91") useOne("/OPAL_2004_S6132243/d18-x01-y02","133") useOne("/OPAL_2004_S6132243/d18-x01-y03","177") useOne("/OPAL_2004_S6132243/d18-x01-y04","197") useOne("/OPAL_2004_S6132243/d19-x01-y01","91") useOne("/OPAL_2004_S6132243/d19-x01-y02","133") useOne("/OPAL_2004_S6132243/d19-x01-y03","177") useOne("/OPAL_2004_S6132243/d19-x01-y04","197") useOne("/OPAL_2004_S6132243/d20-x01-y01","91") useOne("/OPAL_2004_S6132243/d20-x01-y02","133") useOne("/OPAL_2004_S6132243/d20-x01-y03","177") useOne("/OPAL_2004_S6132243/d20-x01-y04","197") useOne("/OPAL_2004_S6132243/d21-x01-y01","91") useOne("/OPAL_2004_S6132243/d21-x01-y02","133") useOne("/OPAL_2004_S6132243/d21-x01-y03","177") useOne("/OPAL_2004_S6132243/d21-x01-y04","197") useOne("/OPAL_2004_S6132243/d22-x01-y01","91") useOne("/OPAL_2004_S6132243/d22-x01-y02","133") useOne("/OPAL_2004_S6132243/d22-x01-y03","177") useOne("/OPAL_2004_S6132243/d22-x01-y04","197") useOne("/OPAL_2004_S6132243/d23-x01-y01","91") useOne("/OPAL_2004_S6132243/d23-x01-y02","133") useOne("/OPAL_2004_S6132243/d23-x01-y03","177") useOne("/OPAL_2004_S6132243/d23-x01-y04","197") useOne("/OPAL_2004_S6132243/d24-x01-y01","91") useOne("/OPAL_2004_S6132243/d24-x01-y02","133") useOne("/OPAL_2004_S6132243/d24-x01-y03","177") useOne("/OPAL_2004_S6132243/d24-x01-y04","197") useOne("/OPAL_2004_S6132243/d25-x01-y01","91") useOne("/OPAL_2004_S6132243/d25-x01-y02","133") useOne("/OPAL_2004_S6132243/d25-x01-y03","177") useOne("/OPAL_2004_S6132243/d25-x01-y04","197") useOne("/OPAL_2004_S6132243/d26-x01-y01","91") useOne("/OPAL_2004_S6132243/d26-x01-y02","133") useOne("/OPAL_2004_S6132243/d26-x01-y03","177") useOne("/OPAL_2004_S6132243/d26-x01-y04","197") merge( "/OPAL_2002_S5361494/d01-x01-y01") merge( "/OPAL_2002_S5361494/d01-x01-y02") merge( "/OPAL_2002_S5361494/d01-x01-y03") merge( "/OPAL_2002_S5361494/d01-x01-y04") merge("/DELPHI_2000_S4328825/d01-x01-y01") merge("/DELPHI_2000_S4328825/d01-x01-y02") merge("/DELPHI_2000_S4328825/d01-x01-y03") merge("/DELPHI_2000_S4328825/d01-x01-y04") merge("/ALEPH_2004_S5765862/d01-x01-y01") useOne("/ALEPH_2004_S5765862/d02-x01-y01","133") useOne("/ALEPH_2004_S5765862/d03-x01-y01","161") useOne("/ALEPH_2004_S5765862/d04-x01-y01","172") useOne("/ALEPH_2004_S5765862/d05-x01-y01","183") useOne("/ALEPH_2004_S5765862/d06-x01-y01","189") useOne("/ALEPH_2004_S5765862/d07-x01-y01","196") useOne("/ALEPH_2004_S5765862/d08-x01-y01","200") useOne("/ALEPH_2004_S5765862/d09-x01-y01","206") useOne("/ALEPH_2004_S5765862/d11-x01-y01","133") useOne("/ALEPH_2004_S5765862/d12-x01-y01","161") useOne("/ALEPH_2004_S5765862/d13-x01-y01","172") useOne("/ALEPH_2004_S5765862/d14-x01-y01","183") useOne("/ALEPH_2004_S5765862/d15-x01-y01","189") useOne("/ALEPH_2004_S5765862/d16-x01-y01","196") useOne("/ALEPH_2004_S5765862/d17-x01-y01","200") useOne("/ALEPH_2004_S5765862/d18-x01-y01","206") useOne("/ALEPH_2004_S5765862/d19-x01-y01","133") useOne("/ALEPH_2004_S5765862/d20-x01-y01","161") useOne("/ALEPH_2004_S5765862/d21-x01-y01","172") useOne("/ALEPH_2004_S5765862/d22-x01-y01","183") useOne("/ALEPH_2004_S5765862/d23-x01-y01","189") useOne("/ALEPH_2004_S5765862/d24-x01-y01","196") useOne("/ALEPH_2004_S5765862/d25-x01-y01","200") useOne("/ALEPH_2004_S5765862/d26-x01-y01","206") useOne("/ALEPH_2004_S5765862/d27-x01-y01","133") useOne("/ALEPH_2004_S5765862/d28-x01-y01","161") useOne("/ALEPH_2004_S5765862/d29-x01-y01","172") useOne("/ALEPH_2004_S5765862/d30-x01-y01","183") useOne("/ALEPH_2004_S5765862/d31-x01-y01","189") useOne("/ALEPH_2004_S5765862/d32-x01-y01","196") useOne("/ALEPH_2004_S5765862/d33-x01-y01","200") useOne("/ALEPH_2004_S5765862/d34-x01-y01","206") useOne("/ALEPH_2004_S5765862/d35-x01-y01","206") useOne("/ALEPH_2004_S5765862/d36-x01-y01","133") useOne("/ALEPH_2004_S5765862/d37-x01-y01","161") useOne("/ALEPH_2004_S5765862/d38-x01-y01","172") useOne("/ALEPH_2004_S5765862/d39-x01-y01","183") useOne("/ALEPH_2004_S5765862/d40-x01-y01","189") useOne("/ALEPH_2004_S5765862/d41-x01-y01","196") useOne("/ALEPH_2004_S5765862/d42-x01-y01","200") useOne("/ALEPH_2004_S5765862/d43-x01-y01","206") useOne("/ALEPH_2004_S5765862/d44-x01-y01","133") useOne("/ALEPH_2004_S5765862/d45-x01-y01","161") useOne("/ALEPH_2004_S5765862/d46-x01-y01","172") useOne("/ALEPH_2004_S5765862/d47-x01-y01","183") useOne("/ALEPH_2004_S5765862/d48-x01-y01","189") useOne("/ALEPH_2004_S5765862/d49-x01-y01","196") useOne("/ALEPH_2004_S5765862/d50-x01-y01","200") useOne("/ALEPH_2004_S5765862/d51-x01-y01","206") useOne("/ALEPH_2004_S5765862/d54-x01-y01","91") useOne("/ALEPH_2004_S5765862/d55-x01-y01","133") useOne("/ALEPH_2004_S5765862/d56-x01-y01","161") useOne("/ALEPH_2004_S5765862/d57-x01-y01","172") useOne("/ALEPH_2004_S5765862/d58-x01-y01","183") useOne("/ALEPH_2004_S5765862/d59-x01-y01","189") useOne("/ALEPH_2004_S5765862/d60-x01-y01","200") useOne("/ALEPH_2004_S5765862/d61-x01-y01","206") useOne("/ALEPH_2004_S5765862/d62-x01-y01","91") useOne("/ALEPH_2004_S5765862/d63-x01-y01","133") useOne("/ALEPH_2004_S5765862/d64-x01-y01","161") useOne("/ALEPH_2004_S5765862/d65-x01-y01","172") useOne("/ALEPH_2004_S5765862/d66-x01-y01","183") useOne("/ALEPH_2004_S5765862/d67-x01-y01","189") useOne("/ALEPH_2004_S5765862/d68-x01-y01","200") useOne("/ALEPH_2004_S5765862/d69-x01-y01","206") useOne("/ALEPH_2004_S5765862/d70-x01-y01","91") useOne("/ALEPH_2004_S5765862/d71-x01-y01","133") useOne("/ALEPH_2004_S5765862/d72-x01-y01","161") useOne("/ALEPH_2004_S5765862/d73-x01-y01","172") useOne("/ALEPH_2004_S5765862/d74-x01-y01","183") useOne("/ALEPH_2004_S5765862/d75-x01-y01","189") useOne("/ALEPH_2004_S5765862/d76-x01-y01","200") useOne("/ALEPH_2004_S5765862/d77-x01-y01","206") useOne("/ALEPH_2004_S5765862/d78-x01-y01","91") useOne("/ALEPH_2004_S5765862/d79-x01-y01","133") useOne("/ALEPH_2004_S5765862/d80-x01-y01","161") useOne("/ALEPH_2004_S5765862/d81-x01-y01","172") useOne("/ALEPH_2004_S5765862/d82-x01-y01","183") useOne("/ALEPH_2004_S5765862/d83-x01-y01","189") useOne("/ALEPH_2004_S5765862/d84-x01-y01","200") useOne("/ALEPH_2004_S5765862/d85-x01-y01","206") useOne("/ALEPH_2004_S5765862/d86-x01-y01","91") useOne("/ALEPH_2004_S5765862/d87-x01-y01","133") useOne("/ALEPH_2004_S5765862/d88-x01-y01","161") useOne("/ALEPH_2004_S5765862/d89-x01-y01","172") useOne("/ALEPH_2004_S5765862/d90-x01-y01","183") useOne("/ALEPH_2004_S5765862/d91-x01-y01","189") useOne("/ALEPH_2004_S5765862/d92-x01-y01","200") useOne("/ALEPH_2004_S5765862/d93-x01-y01","206") useOne("/ALEPH_2004_S5765862/d94-x01-y01","91") useOne("/ALEPH_2004_S5765862/d95-x01-y01","133") useOne("/ALEPH_2004_S5765862/d96-x01-y01","161") useOne("/ALEPH_2004_S5765862/d97-x01-y01","172") useOne("/ALEPH_2004_S5765862/d98-x01-y01","183") useOne("/ALEPH_2004_S5765862/d99-x01-y01","189") useOne("/ALEPH_2004_S5765862/d100-x01-y01","200") useOne("/ALEPH_2004_S5765862/d101-x01-y01","206") useOne("/ALEPH_2004_S5765862/d102-x01-y01","91") useOne("/ALEPH_2004_S5765862/d103-x01-y01","133") useOne("/ALEPH_2004_S5765862/d104-x01-y01","161") useOne("/ALEPH_2004_S5765862/d105-x01-y01","172") useOne("/ALEPH_2004_S5765862/d106-x01-y01","183") useOne("/ALEPH_2004_S5765862/d107-x01-y01","189") useOne("/ALEPH_2004_S5765862/d108-x01-y01","200") useOne("/ALEPH_2004_S5765862/d109-x01-y01","206") useOne("/ALEPH_2004_S5765862/d110-x01-y01","91") useOne("/ALEPH_2004_S5765862/d111-x01-y01","133") useOne("/ALEPH_2004_S5765862/d112-x01-y01","161") useOne("/ALEPH_2004_S5765862/d113-x01-y01","172") useOne("/ALEPH_2004_S5765862/d114-x01-y01","183") useOne("/ALEPH_2004_S5765862/d115-x01-y01","189") useOne("/ALEPH_2004_S5765862/d116-x01-y01","200") useOne("/ALEPH_2004_S5765862/d117-x01-y01","206") useOne("/ALEPH_2004_S5765862/d118-x01-y01","91") useOne("/ALEPH_2004_S5765862/d119-x01-y01","133") useOne("/ALEPH_2004_S5765862/d120-x01-y01","161") useOne("/ALEPH_2004_S5765862/d121-x01-y01","172") useOne("/ALEPH_2004_S5765862/d122-x01-y01","183") useOne("/ALEPH_2004_S5765862/d123-x01-y01","189") useOne("/ALEPH_2004_S5765862/d124-x01-y01","200") useOne("/ALEPH_2004_S5765862/d125-x01-y01","206") useOne("/ALEPH_2004_S5765862/d126-x01-y01","133") useOne("/ALEPH_2004_S5765862/d127-x01-y01","161") useOne("/ALEPH_2004_S5765862/d128-x01-y01","172") useOne("/ALEPH_2004_S5765862/d129-x01-y01","183") useOne("/ALEPH_2004_S5765862/d130-x01-y01","189") useOne("/ALEPH_2004_S5765862/d131-x01-y01","200") useOne("/ALEPH_2004_S5765862/d132-x01-y01","206") useOne("/ALEPH_2004_S5765862/d133-x01-y01","91") useOne("/ALEPH_2004_S5765862/d134-x01-y01","133") useOne("/ALEPH_2004_S5765862/d135-x01-y01","161") useOne("/ALEPH_2004_S5765862/d136-x01-y01","172") useOne("/ALEPH_2004_S5765862/d137-x01-y01","183") useOne("/ALEPH_2004_S5765862/d138-x01-y01","189") useOne("/ALEPH_2004_S5765862/d139-x01-y01","200") useOne("/ALEPH_2004_S5765862/d140-x01-y01","206") useOne("/ALEPH_2004_S5765862/d141-x01-y01","91") useOne("/ALEPH_2004_S5765862/d142-x01-y01","133") useOne("/ALEPH_2004_S5765862/d143-x01-y01","161") useOne("/ALEPH_2004_S5765862/d144-x01-y01","172") useOne("/ALEPH_2004_S5765862/d145-x01-y01","183") useOne("/ALEPH_2004_S5765862/d146-x01-y01","189") useOne("/ALEPH_2004_S5765862/d147-x01-y01","200") useOne("/ALEPH_2004_S5765862/d148-x01-y01","206") useOne("/ALEPH_2004_S5765862/d149-x01-y01","91") useOne("/ALEPH_2004_S5765862/d150-x01-y01","133") useOne("/ALEPH_2004_S5765862/d151-x01-y01","161") useOne("/ALEPH_2004_S5765862/d152-x01-y01","172") useOne("/ALEPH_2004_S5765862/d153-x01-y01","183") useOne("/ALEPH_2004_S5765862/d154-x01-y01","189") useOne("/ALEPH_2004_S5765862/d155-x01-y01","200") useOne("/ALEPH_2004_S5765862/d156-x01-y01","206") useOne("/ALEPH_2004_S5765862/d157-x01-y01","91") useOne("/ALEPH_2004_S5765862/d158-x01-y01","133") useOne("/ALEPH_2004_S5765862/d159-x01-y01","161") useOne("/ALEPH_2004_S5765862/d160-x01-y01","172") useOne("/ALEPH_2004_S5765862/d161-x01-y01","183") useOne("/ALEPH_2004_S5765862/d162-x01-y01","189") useOne("/ALEPH_2004_S5765862/d163-x01-y01","200") useOne("/ALEPH_2004_S5765862/d164-x01-y01","206") useOne("/ALEPH_2004_S5765862/d165-x01-y01","91") useOne("/ALEPH_2004_S5765862/d166-x01-y01","133") useOne("/ALEPH_2004_S5765862/d167-x01-y01","161") useOne("/ALEPH_2004_S5765862/d168-x01-y01","172") useOne("/ALEPH_2004_S5765862/d169-x01-y01","183") useOne("/ALEPH_2004_S5765862/d170-x01-y01","189") useOne("/ALEPH_2004_S5765862/d172-x01-y01","206") useOne("/ALEPH_2004_S5765862/d173-x01-y01","91") useOne("/ALEPH_2004_S5765862/d174-x01-y01","133") useOne("/ALEPH_2004_S5765862/d175-x01-y01","161") useOne("/ALEPH_2004_S5765862/d176-x01-y01","172") useOne("/ALEPH_2004_S5765862/d177-x01-y01","183") useOne("/ALEPH_2004_S5765862/d178-x01-y01","189") useOne("/ALEPH_2004_S5765862/d179-x01-y01","206") useOne("/ALEPH_2004_S5765862/d180-x01-y01","91") useOne("/ALEPH_2004_S5765862/d181-x01-y01","133") useOne("/ALEPH_2004_S5765862/d182-x01-y01","161") useOne("/ALEPH_2004_S5765862/d183-x01-y01","172") useOne("/ALEPH_2004_S5765862/d184-x01-y01","183") useOne("/ALEPH_2004_S5765862/d185-x01-y01","189") useOne("/ALEPH_2004_S5765862/d186-x01-y01","206") useOne("/ALEPH_2004_S5765862/d187-x01-y01","91") useOne("/ALEPH_2004_S5765862/d188-x01-y01","133") useOne("/ALEPH_2004_S5765862/d189-x01-y01","161") useOne("/ALEPH_2004_S5765862/d190-x01-y01","172") useOne("/ALEPH_2004_S5765862/d191-x01-y01","183") useOne("/ALEPH_2004_S5765862/d192-x01-y01","189") useOne("/ALEPH_2004_S5765862/d193-x01-y01","200") useOne("/ALEPH_2004_S5765862/d194-x01-y01","206") useOne("/ALEPH_2004_S5765862/d195-x01-y01","91") useOne("/ALEPH_2004_S5765862/d196-x01-y01","133") useOne("/ALEPH_2004_S5765862/d197-x01-y01","161") useOne("/ALEPH_2004_S5765862/d198-x01-y01","172") useOne("/ALEPH_2004_S5765862/d199-x01-y01","183") useOne("/ALEPH_2004_S5765862/d200-x01-y01","189") useOne("/ALEPH_2004_S5765862/d201-x01-y01","200") useOne("/ALEPH_2004_S5765862/d202-x01-y01","206") useOne("/ALEPH_2004_S5765862/d203-x01-y01","91") useOne("/ALEPH_2004_S5765862/d204-x01-y01","133") useOne("/ALEPH_2004_S5765862/d205-x01-y01","161") useOne("/ALEPH_2004_S5765862/d206-x01-y01","172") useOne("/ALEPH_2004_S5765862/d207-x01-y01","183") useOne("/ALEPH_2004_S5765862/d208-x01-y01","189") useOne("/ALEPH_2004_S5765862/d209-x01-y01","200") useOne("/ALEPH_2004_S5765862/d210-x01-y01","206") useOne("/ALEPH_2004_S5765862/d211-x01-y01","91") useOne("/ALEPH_2004_S5765862/d212-x01-y01","133") useOne("/ALEPH_2004_S5765862/d213-x01-y01","161") useOne("/ALEPH_2004_S5765862/d214-x01-y01","172") useOne("/ALEPH_2004_S5765862/d215-x01-y01","183") useOne("/ALEPH_2004_S5765862/d216-x01-y01","189") useOne("/ALEPH_2004_S5765862/d217-x01-y01","200") useOne("/ALEPH_2004_S5765862/d218-x01-y01","206") useOne("/ALEPH_2004_S5765862/d219-x01-y01","91") useOne("/ALEPH_2004_S5765862/d220-x01-y01","133") useOne("/ALEPH_2004_S5765862/d221-x01-y01","161") useOne("/ALEPH_2004_S5765862/d222-x01-y01","172") useOne("/ALEPH_2004_S5765862/d223-x01-y01","183") useOne("/ALEPH_2004_S5765862/d224-x01-y01","189") useOne("/ALEPH_2004_S5765862/d225-x01-y01","200") useOne("/ALEPH_2004_S5765862/d226-x01-y01","206") useOne("/ALEPH_2004_S5765862/d227-x01-y01","91") useOne("/ALEPH_2004_S5765862/d228-x01-y01","133") useOne("/ALEPH_2004_S5765862/d229-x01-y01","161") useOne("/ALEPH_2004_S5765862/d230-x01-y01","172") useOne("/ALEPH_2004_S5765862/d231-x01-y01","183") useOne("/ALEPH_2004_S5765862/d232-x01-y01","189") useOne("/ALEPH_2004_S5765862/d233-x01-y01","200") useOne("/ALEPH_2004_S5765862/d234-x01-y01","206") # hadron multiplicities useOne("/PDG_HADRON_MULTIPLICITIES/d01-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES/d02-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES/d03-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES/d04-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES/d05-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES/d06-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES/d07-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES/d08-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES/d09-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES/d13-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES/d15-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES/d17-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES/d18-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES/d19-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES/d20-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES/d21-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES/d22-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES/d23-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES/d25-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES/d31-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES/d38-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES/d39-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES/d40-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES/d44-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES/d45-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES/d46-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES/d47-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES/d48-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES/d49-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES/d50-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES/d51-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES/d53-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES/d54-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES/d01-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES/d02-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES/d03-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES/d04-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES/d05-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES/d06-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES/d07-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES/d08-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES/d09-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES/d13-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES/d15-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES/d18-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES/d19-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES/d20-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES/d21-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES/d22-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES/d31-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES/d33-x01-y01","35") useOne("/PDG_HADRON_MULTIPLICITIES/d34-x01-y01","35") useOne("/PDG_HADRON_MULTIPLICITIES/d38-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES/d39-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES/d44-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES/d46-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES/d47-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES/d48-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES/d50-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES/d51-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES/d01-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES/d02-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES/d03-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES/d04-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES/d05-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES/d06-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES/d07-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES/d08-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES/d09-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES/d10-x01-y01","91") useOne("/PDG_HADRON_MULTIPLICITIES/d11-x01-y01","91") useOne("/PDG_HADRON_MULTIPLICITIES/d12-x01-y01","91") useOne("/PDG_HADRON_MULTIPLICITIES/d13-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES/d14-x01-y01","91") useOne("/PDG_HADRON_MULTIPLICITIES/d15-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES/d16-x01-y01","91") useOne("/PDG_HADRON_MULTIPLICITIES/d17-x01-y02","91") useOne("/PDG_HADRON_MULTIPLICITIES/d18-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES/d19-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES/d20-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES/d21-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES/d23-x01-y02","91") useOne("/PDG_HADRON_MULTIPLICITIES/d24-x01-y01","91") useOne("/PDG_HADRON_MULTIPLICITIES/d25-x01-y02","91") useOne("/PDG_HADRON_MULTIPLICITIES/d26-x01-y01","91") useOne("/PDG_HADRON_MULTIPLICITIES/d27-x01-y01","91") useOne("/PDG_HADRON_MULTIPLICITIES/d28-x01-y01","91") useOne("/PDG_HADRON_MULTIPLICITIES/d29-x01-y01","91") useOne("/PDG_HADRON_MULTIPLICITIES/d30-x01-y01","91") useOne("/PDG_HADRON_MULTIPLICITIES/d31-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES/d32-x01-y01","91") useOne("/PDG_HADRON_MULTIPLICITIES/d34-x01-y02","91") useOne("/PDG_HADRON_MULTIPLICITIES/d35-x01-y01","91") useOne("/PDG_HADRON_MULTIPLICITIES/d36-x01-y01","91") useOne("/PDG_HADRON_MULTIPLICITIES/d37-x01-y01","91") useOne("/PDG_HADRON_MULTIPLICITIES/d38-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES/d39-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES/d40-x01-y02","91") useOne("/PDG_HADRON_MULTIPLICITIES/d41-x01-y01","91") useOne("/PDG_HADRON_MULTIPLICITIES/d42-x01-y01","91") useOne("/PDG_HADRON_MULTIPLICITIES/d43-x01-y01","91") useOne("/PDG_HADRON_MULTIPLICITIES/d44-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES/d45-x01-y02","91") useOne("/PDG_HADRON_MULTIPLICITIES/d46-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES/d47-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES/d48-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES/d49-x01-y02","91") useOne("/PDG_HADRON_MULTIPLICITIES/d50-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES/d51-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES/d52-x01-y01","91") useOne("/PDG_HADRON_MULTIPLICITIES/d54-x01-y02","91") useOne("/PDG_HADRON_MULTIPLICITIES/d01-x01-y04","177") useOne("/PDG_HADRON_MULTIPLICITIES/d03-x01-y04","177") useOne("/PDG_HADRON_MULTIPLICITIES/d04-x01-y04","177") useOne("/PDG_HADRON_MULTIPLICITIES/d38-x01-y04","177") useOne("/PDG_HADRON_MULTIPLICITIES/d39-x01-y04","177") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d02-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d03-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d04-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d05-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d06-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d07-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d08-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d09-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d13-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d15-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d17-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d18-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d19-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d20-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d21-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d22-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d23-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d25-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d31-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d38-x01-y01","10" ) useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d39-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d40-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d44-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d45-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d46-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d47-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d48-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d49-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d50-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d51-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d53-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d54-x01-y01","10") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d02-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d03-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d04-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d05-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d06-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d07-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d08-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d09-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d13-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d15-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d18-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d19-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d20-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d21-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d22-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d31-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d33-x01-y01","35") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d34-x01-y01","35") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d38-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d39-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d44-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d46-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d47-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d48-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d50-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d51-x01-y02","35") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d02-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d03-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d04-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d05-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d06-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d07-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d08-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d09-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d10-x01-y01","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d11-x01-y01","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d12-x01-y01","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d13-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d14-x01-y01","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d15-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d16-x01-y01","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d17-x01-y02","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d18-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d19-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d20-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d21-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d23-x01-y02","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d24-x01-y01","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d25-x01-y02","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d26-x01-y01","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d27-x01-y01","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d28-x01-y01","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d29-x01-y01","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d30-x01-y01","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d31-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d32-x01-y01","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d34-x01-y02","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d35-x01-y01","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d36-x01-y01","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d37-x01-y01","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d38-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d39-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d40-x01-y02","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d41-x01-y01","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d42-x01-y01","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d43-x01-y01","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d44-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d45-x01-y02","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d46-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d47-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d48-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d49-x01-y02","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d50-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d51-x01-y03","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d52-x01-y01","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d54-x01-y02","91") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d03-x01-y04","177") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d04-x01-y04","177") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d38-x01-y04","177") useOne("/PDG_HADRON_MULTIPLICITIES_RATIOS/d39-x01-y04","177") # AMY analysis useOne("/AMY_1990_I295160/d01-x01-y01","50") useOne("/AMY_1990_I295160/d01-x01-y02","52") useOne("/AMY_1990_I295160/d01-x01-y03","55") useOne("/AMY_1990_I295160/d01-x01-y04","56") useOne("/AMY_1990_I295160/d01-x01-y05","57") useOne("/AMY_1990_I295160/d01-x01-y06","60") useOne("/AMY_1990_I295160/d01-x01-y07","60.8") useOne("/AMY_1990_I295160/d01-x01-y08","61.4") useOne("/AMY_1990_I295160/d01-x01-y09","57") useOne("/AMY_1990_I295160/d02-x02-y01","57") merge("/AMY_1990_I295160/d02-x01-y01") merge("/JADE_1983_I190818/d01-x01-y01") merge("/PLUTO_1980_I154270/d01-x01-y01") merge("/TASSO_1989_I277658/d02-x01-y01") useOne("/TASSO_1989_I277658/d05-x01-y01","14") useOne("/TASSO_1989_I277658/d05-x01-y02","22") useOne("/TASSO_1989_I277658/d05-x01-y03","34.8") useOne("/TASSO_1989_I277658/d05-x01-y04","43.6") # BELLE useOne("/BELLE_2006_S6265367/d01-x01-y01","10.52") useOne("/BELLE_2006_S6265367/d01-x01-y02","10.52") useOne("/BELLE_2006_S6265367/d01-x01-y03","10.52") useOne("/BELLE_2006_S6265367/d01-x01-y04","10.52") useOne("/BELLE_2006_S6265367/d01-x01-y05","10.52") useOne("/BELLE_2006_S6265367/d01-x01-y06","10.52") useOne("/BELLE_2006_S6265367/d01-x01-y07","10.52") useOne("/BELLE_2006_S6265367/d01-x01-y08","10.52") useOne("/BELLE_2006_S6265367/d02-x01-y01","10.52") useOne("/BELLE_2006_S6265367/d02-x01-y02","10.52") useOne("/BELLE_2006_S6265367/d03-x01-y01","10.52") useOne("/BELLE_2006_S6265367/d03-x01-y02","10.52") useOne("/BELLE_2006_S6265367/d04-x01-y01","10.52") useOne("/BELLE_2006_S6265367/d04-x01-y02","10.52") useOne("/BELLE_2006_S6265367/d05-x01-y01","10.52") useOne("/BELLE_2006_S6265367/d05-x01-y02","10.52") useOne("/BELLE_2006_S6265367/d06-x01-y01","10.52") useOne("/BELLE_2006_S6265367/d06-x01-y02","10.52") useOne("/BELLE_2006_S6265367/d07-x01-y01","10.52") useOne("/BELLE_2006_S6265367/d07-x01-y02","10.52") useOne("/BELLE_2006_S6265367/d08-x01-y01","10.52") useOne("/BELLE_2006_S6265367/d08-x01-y02","10.52") useOne("/BELLE_2006_S6265367/d09-x01-y01","U4") useOne("/BELLE_2006_S6265367/d09-x01-y02","U4") useOne("/BELLE_2006_S6265367/d10-x01-y01","U4") useOne("/BELLE_2006_S6265367/d10-x01-y02","U4") useOne("/BELLE_2006_S6265367/d11-x01-y01","U4") useOne("/BELLE_2006_S6265367/d11-x01-y02","U4") useOne("/BELLE_2006_S6265367/d12-x01-y01","U4") useOne("/BELLE_2006_S6265367/d12-x01-y02","U4") useOne("/BELLE_2006_S6265367/d13-x01-y01","U4") useOne("/BELLE_2006_S6265367/d13-x01-y02","U4") useOne("/BELLE_2006_S6265367/d14-x01-y01","U4") useOne("/BELLE_2006_S6265367/d14-x01-y02","U4") useOne("/BELLE_2006_S6265367/d15-x01-y01","U4") useOne("/BELLE_2006_S6265367/d15-x01-y02","U4") # BABAR useOne("/BABAR_2007_S6895344/d01-x01-y01","10.54") useOne("/BABAR_2007_S6895344/d02-x01-y01","10.54") useOne("/BABAR_2007_S6895344/d03-x01-y01","U4") useOne("/BABAR_2007_S6895344/d04-x01-y01","U4") # BABAR useOne("/BABAR_2005_S6181155/d01-x01-y01","10.58") useOne("/BABAR_2005_S6181155/d02-x01-y01","10.58") useOne("/BABAR_2005_S6181155/d02-x01-y02","10.54") useOne("/BABAR_2005_S6181155/d03-x01-y01","10.54") useOne("/BABAR_2005_S6181155/d04-x01-y01","10.58") useOne("/BABAR_2005_S6181155/d05-x01-y01","10.58") useOne("/BABAR_2005_S6181155/d05-x01-y02","10.54") # ARGUS useOne("/ARGUS_1993_S2789213/d01-x01-y01","10.45") useOne("/ARGUS_1993_S2789213/d01-x01-y02","10.45") useOne("/ARGUS_1993_S2789213/d01-x01-y03","10.45") useOne("/ARGUS_1993_S2789213/d01-x01-y04","10.45") useOne("/ARGUS_1993_S2789213/d01-x01-y05","10.45") useOne("/ARGUS_1993_S2789213/d02-x01-y01", "U1") useOne("/ARGUS_1993_S2789213/d02-x01-y02", "U1") useOne("/ARGUS_1993_S2789213/d02-x01-y03", "U1") useOne("/ARGUS_1993_S2789213/d02-x01-y04", "U1") useOne("/ARGUS_1993_S2789213/d02-x01-y05", "U1") useOne("/ARGUS_1993_S2789213/d03-x01-y01","U4") useOne("/ARGUS_1993_S2789213/d03-x01-y02","U4") useOne("/ARGUS_1993_S2789213/d03-x01-y03","U4") useOne("/ARGUS_1993_S2789213/d03-x01-y04","U4") useOne("/ARGUS_1993_S2789213/d03-x01-y05","U4") useOne("/ARGUS_1993_S2789213/d04-x01-y01","10.45") useOne("/ARGUS_1993_S2789213/d05-x01-y01", "U1") useOne("/ARGUS_1993_S2789213/d06-x01-y01","U4") useOne("/ARGUS_1993_S2789213/d07-x01-y01","10.45") useOne("/ARGUS_1993_S2789213/d08-x01-y01", "U1") useOne("/ARGUS_1993_S2789213/d09-x01-y01","U4") useOne("/ARGUS_1993_S2789213/d10-x01-y01","10.45") useOne("/ARGUS_1993_S2789213/d11-x01-y01", "U1") useOne("/ARGUS_1993_S2789213/d12-x01-y01","U4") useOne("/ARGUS_1993_S2789213/d13-x01-y01","10.45") useOne("/ARGUS_1993_S2789213/d14-x01-y01", "U1") useOne("/ARGUS_1993_S2789213/d15-x01-y01","U4") if("/ARGUS_1993_S2669951/d04-x01-y01" in outhistos) : useOne("/ARGUS_1993_S2669951/d02-x01-y01","10.45") useOne("/ARGUS_1993_S2669951/d03-x01-y01","U1") useOne("/ARGUS_1993_S2669951/d04-x01-y01","U2") merge("/ARGUS_1993_S2669951/d01-x01-y01") merge("/ARGUS_1993_S2669951/d01-x01-y02") merge("/ARGUS_1993_S2669951/d05-x01-y01") useOne("/ARGUS_1990_I278933/d01-x01-y01","9.46") useOne("/ARGUS_1990_I278933/d01-x01-y02","U1") useOne("/ARGUS_1990_I278933/d01-x01-y03","U2") useOne("/ARGUS_1990_I278933/d02-x01-y01","9.46") useOne("/ARGUS_1990_I278933/d02-x01-y02","U1") useOne("/ARGUS_1990_I278933/d02-x01-y03","U2") useOne("/ARGUS_1990_I278933/d03-x01-y01","9.46") useOne("/ARGUS_1990_I278933/d03-x01-y02","9.46") useOne("/ARGUS_1990_I278933/d04-x01-y01","U1") useOne("/ARGUS_1990_I278933/d04-x01-y02","U2") useOne("/ARGUS_1990_I278933/d05-x01-y01","9.46") useOne("/ARGUS_1990_I278933/d05-x01-y02","9.46") useOne("/ARGUS_1990_I278933/d06-x01-y01","U1") useOne("/ARGUS_1990_I278933/d06-x01-y02","U2") useOne("/ARGUS_1989_I262551/d01-x01-y01","10.00") useOne("/ARGUS_1989_I262551/d02-x01-y01","U1") useOne("/ARGUS_1989_I262551/d02-x01-y02","U2") useOne("/ARGUS_1989_I262551/d03-x01-y01","U1") useOne("/ARGUS_1989_I262551/d04-x01-y01","U2") merge("/ARGUS_1989_I276860/d01-x01-y01") merge("/ARGUS_1989_I276860/d01-x01-y02") merge("/ARGUS_1989_I276860/d02-x01-y01") merge("/ARGUS_1989_I276860/d03-x01-y01") merge("/ARGUS_1989_I276860/d04-x01-y01") merge("/ARGUS_1989_I276860/d04-x01-y02") for i in range(5,13) : useOne("/ARGUS_1989_I276860/d%02d-x01-y01" %i,"U1") useOne("/ARGUS_1989_I276860/d%02d-x01-y02" %i,"10.00") for i in range(1,8) : useOne("/ARGUS_1988_I251097/d01-x01-y%02d" %i,"U1") useOne("/ARGUS_1988_I251097/d02-x01-y%02d" %i,"10.00") useOne("/ARGUS_1988_I251097/d03-x01-y01","U1") useOne("/ARGUS_1988_I251097/d04-x01-y01","U2") useOne("/ARGUS_1988_I251097/d05-x01-y01","10.00") useOne("/ARGUS_1988_I251097/d06-x01-y01","10.00") useOne("/ARGUS_1988_I251097/d07-x01-y01","U1") useOne("/ARGUS_1988_I251097/d08-x01-y01","U2") useOne("/ARGUS_1988_I251097/d09-x01-y01","10.00") useOne("/ARGUS_1989_I262415/d03-x01-y01","U1") useOne("/ARGUS_1989_I262415/d04-x01-y01","10.00") useOne("/ARGUS_1989_I262415/d01-x01-y01","U1") useOne("/ARGUS_1989_I262415/d01-x01-y02","10.00") useOne("/ARGUS_1989_I262415/d01-x02-y01","U1") useOne("/ARGUS_1989_I262415/d01-x02-y02","10.00") merge("/PLUTO_1981_I165122/d01-x01-y01") merge("/PLUTO_1981_I165122/d02-x01-y01") useOne("/PLUTO_1981_I165122/d06-x01-y01","U1") useOne("/PLUTO_1981_I165122/d04-x01-y01","30.2") useOne("/PLUTO_1981_I165122/d05-x01-y01","9.4") useOne("/PLUTO_1977_I118873/d02-x01-y01","3.63") useOne("/PLUTO_1977_I118873/d03-x01-y01","4.03") useOne("/PLUTO_1977_I118873/d04-x01-y01","4.5") useOne("/TASSO_1982_I177174/d01-x01-y01","14.") useOne("/TASSO_1982_I177174/d01-x01-y02","22.") useOne("/TASSO_1982_I177174/d01-x01-y03","34.") for i in range(2,4) : useOne("/TASSO_1982_I177174/d0%s-x01-y01" %i ,"12.") useOne("/TASSO_1982_I177174/d0%s-x01-y02" %i ,"14.") useOne("/TASSO_1982_I177174/d0%s-x01-y03" %i ,"22.") useOne("/TASSO_1982_I177174/d0%s-x01-y04" %i ,"25.") useOne("/TASSO_1982_I177174/d0%s-x01-y05" %i ,"30.") useOne("/TASSO_1982_I177174/d0%s-x01-y06" %i ,"34.") useOne("/TASSO_1982_I177174/d0%s-x01-y07" %i ,"35.") merge("/TASSO_1980_I143691/d01-x01-y01") useOne("/TASSO_1980_I143691/d02-x01-y01","13.") useOne("/TASSO_1980_I143691/d05-x01-y01","13.") if("/TASSO_1980_I143691/d03-x01-y01" in inhistos and "17." in inhistos["/TASSO_1980_I143691/d03-x01-y01"] and "22." in inhistos["/TASSO_1980_I143691/d03-x01-y01"]) : average("/TASSO_1980_I143691/d03-x01-y01","17.","22.") average("/TASSO_1980_I143691/d06-x01-y01","17.","22.") useOne("/TASSO_1980_I143691/d04-x01-y01","30.2") useOne("/TASSO_1980_I143691/d07-x01-y01","30.2") useOne("/TASSO_1990_I284251/d01-x01-y01","42.6") useOne("/TASSO_1990_I284251/d01-x01-y02","35.") useOne("/TASSO_1990_I284251/d01-x01-y03","34.5") useOne("/TASSO_1990_I284251/d02-x01-y01","14.8") useOne("/TASSO_1990_I284251/d03-x01-y01","21.5") merge("/TASSO_1990_I284251/d04-x01-y01") useOne("/TASSO_1990_I284251/d05-x01-y01","42.6") useOne("/TASSO_1990_I284251/d05-x01-y02","42.6") useOne("/TASSO_1990_I284251/d05-x01-y03","35") useOne("/TASSO_1990_I284251/d05-x01-y04","35") useOne("/TASSO_1990_I284251/d06-x01-y01","14.8") useOne("/TASSO_1990_I284251/d06-x01-y02","14.8") useOne("/TASSO_1990_I284251/d07-x01-y01","21.5") useOne("/TASSO_1990_I284251/d07-x01-y02","21.5") useOne("/TASSO_1990_I284251/d08-x01-y01","42.6") useOne("/TASSO_1990_I284251/d08-x01-y02","35.") useOne("/TASSO_1990_I284251/d08-x01-y03","34.5") merge("/TASSO_1990_I284251/d09-x01-y01") useOne("/TASSO_1990_I284251/d10-x01-y01","35") useOne("/TASSO_1990_I284251/d10-x01-y02","35") merge("/DASP_1979_I132410/d01-x01-y01") # BES xi analysis useOne("/BESIII_2016_I1422780/d02-x01-y01","psi") useOne("/BESIII_2016_I1422780/d02-x01-y02","psi") useOne("/BESIII_2016_I1422780/d02-x01-y03","psi") useOne("/BESIII_2016_I1422780/d02-x01-y04","psi2s") useOne("/BESIII_2016_I1422780/d02-x01-y05","psi2s") useOne("/BESIII_2016_I1422780/d02-x01-y06","psi2s") if ( "/BESIII_2016_I1422780/d01-x01-y03" in inhistos and "psi" in inhistos["/BESIII_2016_I1422780/d01-x01-y03"]) : for point in inhistos["/BESIII_2016_I1422780/d01-x01-y03"]["psi"].points(): outhistos["/BESIII_2016_I1422780/d01-x01-y03"].addPoint(point) if ( "/BESIII_2016_I1422780/d01-x01-y03" in inhistos and "psi2s" in inhistos["/BESIII_2016_I1422780/d01-x01-y03"]) : for point in inhistos["/BESIII_2016_I1422780/d01-x01-y03"]["psi2s"].points(): outhistos["/BESIII_2016_I1422780/d01-x01-y03"].addPoint(point) # pluto analysis for id in range(1,3) : for iy in range(1,5) : merge("/PLUTO_1983_I191161/d0%s-x01-y0%s" % (id,iy)) merge("/OPAL_2000_I513476/d14-x01-y01") merge("/OPAL_2000_I513476/d20-x01-y01") merge("/OPAL_2000_I513476/d20-x01-y02") merge("/OPAL_2000_I513476/d20-x01-y03") merge("/OPAL_2000_I513476/d20-x01-y04") merge("/JADE_1979_I142874/d02-x01-y01") merge("/LENA_1981_I164397/d03-x01-y01") useOne("/LENA_1981_I164397/d04-x01-y01","9.51") useOne("/LENA_1981_I164397/d04-x01-y02","10.") useOne("/LENA_1981_I164397/d04-x01-y03","U1") useOne("/LENA_1981_I164397/d04-x01-y04","U2") useOne("/ARGUS_1991_I315059/d01-x01-y01","10.47") useOne("/ARGUS_1991_I315059/d01-x01-y02","10.47") useOne("/ARGUS_1991_I315059/d01-x01-y03","10.47") useOne("/ARGUS_1991_I315059/d02-x01-y01","10.47") useOne("/ARGUS_1991_I315059/d03-x01-y01","10.47") useOne("/ARGUS_1991_I315059/d04-x01-y01","10.47") useOne("/ARGUS_1991_I315059/d05-x01-y01","U4") useOne("/ARGUS_1991_I315059/d06-x01-y01","U4") useOne("/ARGUS_1991_I315059/d07-x01-y01","U4") for i in [3,4,5,6,7,8,18,19,20,21,22,23] : useOne("/TASSO_1989_I266893/d%02d-x01-y01" %i ,"34.8") for i in range(9,15) : useOne("/TASSO_1989_I266893/d%02d-x01-y01" %i ,"42.1") for i in range(1,4) : useOne("/TASSO_1989_I266893/d15-x01-y%02d" %i ,"34.8") useOne("/TASSO_1989_I266893/d16-x01-y%02d" %i ,"42.1") for i in range(1,12) : useOne("/CLEO_1985_I205668/d%02d-x01-y01" %i ,10.47) useOne("/CLEO_1985_I205668/d%02d-x01-y02" %i , "U1") for i in range(12,24) : merge("/CLEO_1985_I205668/d%02d-x01-y01" %i) useOne("/BABAR_2014_I1286317/d01-x01-y01", "U3") useOne("/BABAR_2014_I1286317/d02-x01-y01", "U2") useOne("/BABAR_2014_I1286317/d03-x01-y01", "U1") useOne("/BABAR_2014_I1286317/d06-x01-y01", "U3") useOne("/BABAR_2014_I1286317/d06-x02-y01", "U2") useOne("/BABAR_2014_I1286317/d06-x03-y01", "U1") useOne("/BABAR_2014_I1286317/d04-x01-y01", "10.6") useOne("/BABAR_2014_I1286317/d05-x01-y01", "10.6") useOne("/BABAR_2014_I1286317/d06-x04-y01", "10.6") # normalize where we have sum histos if("/BABAR_2007_I746745/d01-x01-y01" in outhistos and outhistos["/BABAR_2007_I746745/d01-x01-y01"].effNumEntries()!=0.) : outhistos["/BABAR_2007_I746745/d01-x01-y01"].normalize() if("/BABAR_2007_I722622/d03-x01-y01" in outhistos) : outhistos["/BABAR_2007_I722622/d03-x01-y01"].normalize() if("/BABAR_2007_I722622/d03-x01-y02" in outhistos) : outhistos["/BABAR_2007_I722622/d03-x01-y02"].normalize() if("/BABAR_2007_I722622/d04-x01-y01" in outhistos) : outhistos["/BABAR_2007_I722622/d04-x01-y01"].normalize() # Choose output file name = args[0]+".yoda" # output the yoda file yoda.writeYODA(outhistos,name) sys.exit(0) diff --git a/Tests/python/merge-EE-Gamma b/Tests/python/merge-EE-Gamma --- a/Tests/python/merge-EE-Gamma +++ b/Tests/python/merge-EE-Gamma @@ -1,136 +1,136 @@ #! /usr/bin/env python -import logging,sys -import os, yoda, copy +from __future__ import print_function +import logging,sys, os, yoda, copy if sys.version_info[:3] < (2,4,0): - print "rivet scripts require Python version >= 2.4.0... exiting" + print ("rivet scripts require Python version >= 2.4.0... exiting") sys.exit(1) ############################################# def fillAbove(desthisto, sourcehistosbysqrts): if type(desthisto) is yoda.core.Scatter2D : for sqrts in sorted(sourcehistosbysqrts.keys()) : h=sourcehistosbysqrts[sqrts] for i in range(0,h.numPoints) : if sqrts==h.points[i].x : desthisto.addPoint(h.points[i]) elif(type(desthisto)==yoda.core.Profile1D) : - for sqrts, h in sorted(sourcehistosbysqrts.iteritems()) : + for sqrts, h in sorted(sourcehistosbysqrts.items()) : for i in range(0,h.numBins) : if(sqrts>=h.bins[i].xMin and \ sqrts<=h.bins[i].xMax) : desthisto.bins[i] += h.bins[i] break else : logging.error("Unknown analysis object" + desthisto.path) sys.exit(1) def merge(hpath): global inhistos global outhistos try: fillAbove(outhistos[hpath], inhistos[hpath]) except: pass def useOne(hpath, sqrts): global inhistos global outhistos try: outhistos[hpath] = inhistos[hpath][float(sqrts)] except: pass if __name__ == "__main__": import logging from optparse import OptionParser, OptionGroup parser = OptionParser(usage="%prog name") verbgroup = OptionGroup(parser, "Verbosity control") verbgroup.add_option("-v", "--verbose", action="store_const", const=logging.DEBUG, dest="LOGLEVEL", default=logging.INFO, help="print debug (very verbose) messages") verbgroup.add_option("-q", "--quiet", action="store_const", const=logging.WARNING, dest="LOGLEVEL", default=logging.INFO, help="be very quiet") parser.add_option_group(verbgroup) (opts, args) = parser.parse_args() logging.basicConfig(level=opts.LOGLEVEL, format="%(message)s") ## Check args if len(args) < 1: logging.error("Must specify at least the name of the files") sys.exit(1) ####################################### yodafiles=["-Direct-mumu-161","-Direct-mumu-172","-Direct-mumu-183", "-Direct-mumu-189","-Direct-mumu-196","-Direct-mumu-206", "-Direct-tautau-189","-Direct-tautau-196","-Direct-tautau-206", "-Direct-Jets-198","-Single-Resolved-Jets-198","-Double-Resolved-Jets-198", "-Direct-Jets-206","-Single-Resolved-Jets-206","-Double-Resolved-Jets-206",] # Get histos inhistos = {} outhistos = {} for f in yodafiles: file = "Rivet-%s%s.yoda" % (args[0], f) sqrts=float(f.split("-")[-1].replace(".yoda","")) if not os.access(file, os.R_OK): logging.error("%s cannot be read" % file) continue try: aos = yoda.read(file) except: logging.error("%s cannot be parsed as yoda" % file) continue ## Get histos from this YODA file - for aopath, ao in aos.iteritems() : + for aopath, ao in aos.items() : if("RAW" in aopath or "_XSEC" in aopath or "_EVTCOUNT" in aopath ) :continue # merge of different energy values if("L3_2004_I645127" in aopath) : if(("d01" in aopath and "mu" in file) or ("d02" in aopath and "tau" in file)) : if not inhistos.has_key(aopath): inhistos[aopath] = {} if not inhistos[aopath].has_key(sqrts): inhistos[aopath][sqrts] = ao else: raise Exception("A set with sqrts = %s already exists" % ( sqrts)) else : if(aopath in outhistos) : outhistos[aopath] += ao else : outhistos[aopath] = ao ## Make empty output histos if needed -for hpath,hsets in inhistos.iteritems(): +for hpath,hsets in inhistos.items(): if("L3_2004_I645127" in hpath ) : if(type(hsets.values()[0])==yoda.core.Scatter2D) : outhistos[hpath] = yoda.core.Scatter2D(hsets.values()[0].path, hsets.values()[0].title) elif(type(hsets.values()[0])==yoda.core.Profile1D) : outhistos[hpath] = yoda.core.Profile1D(hsets.values()[0].path, hsets.values()[0].title) for i in range(0,hsets.values()[0].numBins) : outhistos[hpath].addBin(hsets.values()[0].bins[i].xMin, hsets.values()[0].bins[i].xMax) elif(type(hsets.values()[0])==yoda.core.Histo1D) : outhistos[hpath] = yoda.core.Histo1D(hsets.values()[0].path, hsets.values()[0].title) for i in range(0,hsets.values()[0].numBins) : outhistos[hpath].addBin(hsets.values()[0].bins[i].xMin, hsets.values()[0].bins[i].xMax) else : logging.error("Histogram %s is of unknown type" % hpath) sys.exit(1) merge("/L3_2004_I645127/d01-x01-y01") merge("/L3_2004_I645127/d01-x01-y02") merge("/L3_2004_I645127/d02-x01-y01") # Choose output file name = args[0]+".yoda" # output the yoda file -print "Write yoda to ",name +print ("Write yoda to ",name) yoda.writeYODA(outhistos,name) sys.exit(0) diff --git a/Tests/python/merge-GammaGamma b/Tests/python/merge-GammaGamma --- a/Tests/python/merge-GammaGamma +++ b/Tests/python/merge-GammaGamma @@ -1,124 +1,125 @@ #! /usr/bin/env python +from __future__ import print_function import logging,sys import os, yoda, copy if sys.version_info[:3] < (2,4,0): - print "rivet scripts require Python version >= 2.4.0... exiting" + print ("rivet scripts require Python version >= 2.4.0... exiting") sys.exit(1) ############################################# def fillAbove(desthisto, sourcehistosbysqrts): - print "in fill above" if type(desthisto) is yoda.core.Scatter2D : for sqrts in sorted(sourcehistosbysqrts.keys()) : h=sourcehistosbysqrts[sqrts] for i in range(0,h.numPoints) : if sqrts==h.points[i].x : desthisto.addPoint(h.points[i]) elif(type(desthisto)==yoda.core.Profile1D) : - for sqrts, h in sorted(sourcehistosbysqrts.iteritems()) : + for sqrts, h in sorted(sourcehistosbysqrts.items()) : for i in range(0,h.numBins) : if(sqrts>=h.bins[i].xMin and \ sqrts<=h.bins[i].xMax) : desthisto.bins[i] += h.bins[i] break else : logging.error("Unknown analysis object" + desthisto.path) sys.exit(1) def merge(hpath): global inhistos global outhistos try: fillAbove(outhistos[hpath], inhistos[hpath]) except: pass def useOne(hpath, sqrts): global inhistos global outhistos try: outhistos[hpath] = inhistos[hpath][float(sqrts)] except: pass if __name__ == "__main__": import logging from optparse import OptionParser, OptionGroup parser = OptionParser(usage="%prog name") verbgroup = OptionGroup(parser, "Verbosity control") verbgroup.add_option("-v", "--verbose", action="store_const", const=logging.DEBUG, dest="LOGLEVEL", default=logging.INFO, help="print debug (very verbose) messages") verbgroup.add_option("-q", "--quiet", action="store_const", const=logging.WARNING, dest="LOGLEVEL", default=logging.INFO, help="be very quiet") parser.add_option_group(verbgroup) (opts, args) = parser.parse_args() logging.basicConfig(level=opts.LOGLEVEL, format="%(message)s") ## Check args if len(args) < 1: logging.error("Must specify at least the name of the files") sys.exit(1) ####################################### yodafiles=["-mumu-3.5","-mumu-4.5","-mumu-5.5","-mumu-6.5","-mumu-7.5","-mumu-9.0","-mumu-12.5","-mumu-17.5","-mumu-30.0"] # Get histos inhistos = {} outhistos = {} for f in yodafiles: file = "Rivet-%s%s.yoda" % (args[0], f) sqrts=float(f.split("-")[-1].replace(".yoda","")) if not os.access(file, os.R_OK): logging.error("%s cannot be read" % file) continue try: aos = yoda.read(file) except: logging.error("%s cannot be parsed as yoda" % file) continue ## Get histos from this YODA file - for aopath, ao in aos.iteritems() : + for aopath, ao in aos.items() : if("RAW" in aopath or "_XSEC" in aopath or "_EVTCOUNT" in aopath ) :continue # merge of different energy values if("L3_2004_I645127" in aopath) : - if not inhistos.has_key(aopath): + if aopath not in inhistos: inhistos[aopath] = {} - if not inhistos[aopath].has_key(sqrts): + if sqrts not in inhistos[aopath]: inhistos[aopath][sqrts] = ao else: raise Exception("A set with sqrts = %s already exists" % ( sqrts)) else : outhistos[aopath] = ao ## Make empty output histos if needed -for hpath,hsets in inhistos.iteritems(): +for hpath,hsets in inhistos.items(): if("L3_2004_I645127" in hpath ) : - if(type(hsets.values()[0])==yoda.core.Scatter2D) : - outhistos[hpath] = yoda.core.Scatter2D(hsets.values()[0].path, - hsets.values()[0].title) - elif(type(hsets.values()[0])==yoda.core.Profile1D) : - outhistos[hpath] = yoda.core.Profile1D(hsets.values()[0].path, - hsets.values()[0].title) - for i in range(0,hsets.values()[0].numBins) : - outhistos[hpath].addBin(hsets.values()[0].bins[i].xMin, - hsets.values()[0].bins[i].xMax) - elif(type(hsets.values()[0])==yoda.core.Histo1D) : - outhistos[hpath] = yoda.core.Histo1D(hsets.values()[0].path, - hsets.values()[0].title) - for i in range(0,hsets.values()[0].numBins) : - outhistos[hpath].addBin(hsets.values()[0].bins[i].xMin, - hsets.values()[0].bins[i].xMax) + hist = list(hsets.values())[0] + if(type(hist)==yoda.core.Scatter2D) : + outhistos[hpath] = yoda.core.Scatter2D(hist.path(), + hist.title()) + elif(type(hist)==yoda.core.Profile1D) : + outhistos[hpath] = yoda.core.Profile1D(hist.path(), + hist.title()) + for i in range(0,hist.numBins) : + outhistos[hpath].addBin(hist.bins()[i].xMin(), + hist.bins()[i].xMax()) + elif(type(hist)==yoda.core.Histo1D) : + outhistos[hpath] = yoda.core.Histo1D(hist.path(), + hist.title()) + for i in range(0,hist.numBins) : + outhistos[hpath].addBin(hist.bins()[i].xMin(), + hist.bins()[i].xMax()) else : logging.error("Histogram %s is of unknown type" % hpath) sys.exit(1) merge("/L3_2004_I645127:PROCESS=GG/d03-x01-y05") # Choose output file name = args[0]+".yoda" # output the yoda file -print "Write yoda to ",name +print ("Write yoda to ",name) yoda.writeYODA(outhistos,name) sys.exit(0) diff --git a/Tests/python/merge-LHC-EW b/Tests/python/merge-LHC-EW --- a/Tests/python/merge-LHC-EW +++ b/Tests/python/merge-LHC-EW @@ -1,470 +1,469 @@ #! /usr/bin/env python -import logging -import sys -import os, yoda +from __future__ import print_function +import logging, sys, os, yoda """%prog Script for merging aida files """ def fillAbove(scale,desthisto, sourcehistosbyptmin) : pthigh= 1e100 ptlow =-1e100 - for pt, h in sorted(sourcehistosbyptmin.iteritems(),reverse=True): + for pt, h in sorted(sourcehistosbyptmin.items(),reverse=True): ptlow=pt if(type(desthisto)==yoda.core.Scatter2D) : for i in range(0,h.numPoints()) : xMin = h.points()[i].x()-h.points()[i].xErrs().minus if( xMin*scale >= ptlow and xMin*scale < pthigh ) : desthisto.addPoint(h.points()[i]) elif(type(desthisto)==yoda.core.Profile1D) : for i in range(0,h.numBins()) : if(h.bins()[i].xMin()*scale >= ptlow and h.bins()[i].xMin()*scale < pthigh ) : desthisto.bins()[i] += h.bins()[i] elif(type(desthisto)==yoda.core.Histo1D) : for i in range(0,h.numBins()) : if(h.bins()[i].xMin()*scale >= ptlow and h.bins()[i].xMin()*scale < pthigh ) : desthisto.bins()[i] += h.bins()[i] else : logging.error("Can't merge %s, unknown type" % desthisto.path()) sys.exit(1) pthigh=pt def mergeByMass(hpath, sqrts, scale=1.): global inhistos_mass global outhistos try: fillAbove(scale,outhistos[hpath], inhistos_mass[hpath][float(sqrts)]) except: pass def useOneMass(hpath, sqrts, ptmin): global inhistos_mass global outhistos try: ## Find best pT_min match ptmins = inhistos_mass[hpath][float(sqrts)].keys() closest_ptmin = None for ptm in ptmins: if closest_ptmin is None or \ abs(ptm-float(ptmin)) < abs(closest_ptmin-float(ptmin)): closest_ptmin = ptm if closest_ptmin != float(ptmin): logging.warning("Inexact match for requested pTmin=%s: " % ptmin + \ "using pTmin=%e instead" % closest_ptmin) outhistos[hpath] = inhistos_mass[hpath][float(sqrts)][closest_ptmin] except: pass import sys if sys.version_info[:3] < (2,4,0): - print "rivet scripts require Python version >= 2.4.0... exiting" + print ("rivet scripts require Python version >= 2.4.0... exiting") sys.exit(1) if __name__ == "__main__": import logging from optparse import OptionParser, OptionGroup parser = OptionParser(usage="%prog base") verbgroup = OptionGroup(parser, "Verbosity control") verbgroup.add_option("-v", "--verbose", action="store_const", const=logging.DEBUG, dest="LOGLEVEL", default=logging.INFO, help="print debug (very verbose) messages") verbgroup.add_option("-q", "--quiet", action="store_const", const=logging.WARNING, dest="LOGLEVEL", default=logging.INFO, help="be very quiet") parser.add_option_group(verbgroup) (opts, args) = parser.parse_args() logging.basicConfig(level=opts.LOGLEVEL, format="%(message)s") ## Check args if len(args) < 1: logging.error("Must specify at least the name of the files") sys.exit(1) yodafiles=["-13-Z-e","-13-Z-mu","-Z-HighMass1-e","-Z-HighMass2-e", "-8-Z-Mass1-e" ,"-8-Z-Mass1-mu" ,"-8-Z-Mass2-e" ,"-8-Z-Mass2-mu" ,"-8-Z-Mass3-e" ,"-8-Z-Mass3-mu" ,"-8-Z-Mass4-e" ,"-8-Z-Mass4-mu" , "-13-Z-Mass1-e","-13-Z-Mass1-mu","-13-Z-Mass2-e","-13-Z-Mass2-mu","-13-Z-Mass3-e","-13-Z-Mass3-mu","-13-Z-Mass4-e","-13-Z-Mass4-mu", "-W-e","-W-mu","-Z-e","-Z-mu","-Z-mu-Short","-Z-LowMass-e","-Z-LowMass-mu", "-Z-MedMass-e", "-WW-emu","-WW-ll","-WZ","-ZZ-ll","-ZZ-lv","-8-WZ","-13-WZ","-8-ZZ-lv","-8-WW-ll", "-7-W-Jet-1-e","-7-W-Jet-2-e","-7-W-Jet-3-e","-7-Z-Jet-1-e","-7-Z-Jet-2-e","-7-Z-Jet-3-e", "-7-WGamma-e","-7-WGamma-mu","-7-ZGamma-e","-7-ZGamma-mu"] ## Get histos outhistos={} inhistos_mass = {} for f in yodafiles: file='Rivet-'+args[0]+f+".yoda" if not os.access(file, os.R_OK): logging.error("%s can not be read" % file) continue try: aos = yoda.read(file) except: logging.error("%s can not be parsed as yoda" % file) continue mass=66 if(file.find("HighMass1")>=0) : mass = 116 elif(file.find("HighMass2")>=0) : mass = 400 elif(file.find("Mass1")>=0) : mass = 12 elif(file.find("Mass2")>=0) : mass = 30 elif(file.find("Mass3")>=0) : mass = 66 elif(file.find("Mass4")>=0) : mass = 116 ## Get histos from this YODA file - for aopath, ao in aos.iteritems() : + for aopath, ao in aos.items() : if("RAW" in aopath) :continue if(aopath.find("ATLAS_2010_S8919674")>0) : if((aopath.find("d01")>0 or aopath.find("d05")>0 or aopath.find("d07")>0) and file.find("-e")>0) : outhistos[aopath] = ao elif((aopath.find("d02")>0 or aopath.find("d06")>0 or aopath.find("d08")>0) and file.find("-mu")>0) : outhistos[aopath] = ao elif (aopath.find("ATLAS_2011_S9131140")>0) : if(aopath.find("d01")>0 and file.find("-e")>0) : outhistos[aopath] = ao elif(aopath.find("d02")>0 and file.find("-mu")>0) : outhistos[aopath] = ao elif (aopath.find("ATLAS_2011_I925932")>0) : if(aopath.find("d01")>0 and file.find("-e")>0) : outhistos[aopath] = ao elif(aopath.find("d02")>0 and file.find("-mu")>0) : outhistos[aopath] = ao elif (aopath.find("ATLAS_2011_I945498")>0) : if(aopath.find("y01")>0 and file.find("-e")>0) : outhistos[aopath] = ao elif(aopath.find("y02")>0 and file.find("-mu")>0) : outhistos[aopath] = ao elif(aopath.find("y03")>0 and file.find("-mu")>0) : outhistos[aopath] = ao elif (aopath.find("ATLAS_2013_I1217867")>0) : if(aopath.find("y01")>0 and file.find("-e")>0) : outhistos[aopath] = ao elif(aopath.find("y02")>0 and file.find("-mu")>0) : outhistos[aopath] = ao elif (aopath.find("CMS_2012_I941555")>0) : if((aopath.find("y01")>0 or aopath.find("y03")>0 ) and file.find("-mu")>0) : outhistos[aopath] = ao elif(aopath.find("y02")>0 and file.find("-e")>0) : outhistos[aopath] = ao elif (aopath.find("ATLAS_2014_I1300647" )>0) : if(aopath.find("y01")>0 and file.find("-e")>0) : outhistos[aopath] = ao elif((not aopath.find("y01")>0) and file.find("-mu")>0) : outhistos[aopath] = ao elif (aopath.find("ATLAS_2014_I1288706" )>0) : if(aopath.find("y02")>0 and file.find("-e")>0) : outhistos[aopath] = ao elif(aopath.find("y01")>0 and file.find("-mu")>0) : outhistos[aopath] = ao elif (aopath.find("ATLAS_2012_I1204784" )>0) : if( file.find("-e")>0 and ( aopath.find("d03")>0 or ((aopath.find("d01")>0 or aopath.find("d02")>0) and aopath.find("y01")>0))) : outhistos[aopath] = ao elif(file.find("-mu")>0 and ( aopath.find("d04")>0 or ((aopath.find("d01")>0 or aopath.find("d02")>0) and aopath.find("y02")>0))) : outhistos[aopath] = ao elif (aopath.find("ATLAS_2014_I1312627")>0) : if("EL" in aopath) : if(file.find("W")>0 and aopath.find("x02")>0) : outhistos[aopath] = ao elif(file.find("Z")>0 and aopath.find("x03")>0) : outhistos[aopath] = ao elif ("MU" in aopath) : if(file.find("W")>0 and aopath.find("x02")>0) : outhistos[aopath] = ao elif(file.find("Z")>0 and aopath.find("x03")>0) : outhistos[aopath] = ao else : if(file.find("W")>0 and aopath.find("x02")>0) : outhistos[aopath] = ao elif(file.find("Z")>0 and aopath.find("x03")>0) : outhistos[aopath] = ao elif (aopath.find("CMS_2018_I1711625")>0) : if( file.find("-e")>0 and aopath.find("d06-x01-y01") > 0 ): if aopath in outhistos : outhistos[aopath] += ao else : outhistos[aopath] = ao elif( file.find("-mu")>0 and (aopath.find("d03-x01-y01") > 0 or aopath.find("d05-x01-y01") > 0) ): if aopath in outhistos : outhistos[aopath] += ao else : outhistos[aopath] = ao elif (aopath.find("CMS_2013_I1224539_WJET" )>0) : if(file.find("-1-e")>0 and (aopath.find("d52")>0 or aopath.find("d53")>0 or aopath.find("d56")>0 or aopath.find("d57")>0 or aopath.find("d60")>0 or aopath.find("d61")>0 or aopath.find("d64")>0 or aopath.find("d65")>0 or aopath.find("d68")>0 or aopath.find("d69")>0 or aopath.find("d72")>0)) : outhistos[aopath] = ao elif(file.find("-2-e")>0 and (aopath.find("d54")>0 or aopath.find("d58")>0 or aopath.find("d62")>0 or aopath.find("d66")>0 or aopath.find("d70")>0 or aopath.find("d73")>0)) : outhistos[aopath] = ao elif(file.find("-3-e")>0 and (aopath.find("d55")>0 or aopath.find("d59")>0 or aopath.find("d63")>0 or aopath.find("d67")>0 or aopath.find("d71")>0 or aopath.find("d74")>0)) : outhistos[aopath] = ao elif (aopath.find("CMS_2013_I1224539_ZJET" )>0) : if(file.find("-1-e")>0 and (aopath.find("d29")>0 or aopath.find("d30")>0 or aopath.find("d33")>0 or aopath.find("d34")>0 or aopath.find("d37")>0 or aopath.find("d38")>0 or aopath.find("d41")>0 or aopath.find("d42")>0 or aopath.find("d45")>0 or aopath.find("d46")>0 or aopath.find("d49")>0)) : outhistos[aopath] = ao elif(file.find("-2-e")>0 and (aopath.find("d31")>0 or aopath.find("d35")>0 or aopath.find("d39")>0 or aopath.find("d43")>0 or aopath.find("d47")>0 or aopath.find("d50")>0)) : outhistos[aopath] = ao elif(file.find("-3-e")>0 and (aopath.find("d32")>0 or aopath.find("d36")>0 or aopath.find("d40")>0 or aopath.find("d44")>0 or aopath.find("d48")>0 or aopath.find("d51")>0)) : outhistos[aopath] = ao elif (aopath.find("CMS_2013_I1258128")>0) : if(aopath.find("d01")>0 or aopath.find("d02")>0 or aopath.find("d03")>0 or aopath.find("d04")>0) : outhistos[aopath] = ao elif (aopath.find("CMS_2013_I1209721" )>0 and file.find("-0")>0 ) : outhistos[aopath] = ao elif (aopath.find("ATLAS_2011_I928289")>0) : if(file.find("-e")>=0 and (aopath.find("y01")>=0 or aopath.find("y02")>=0)) : outhistos[aopath] = ao elif(file.find("-mu")>=0 and (aopath.find("y03")>=0 or aopath.find("y04")>=0)) : outhistos[aopath] = ao elif (aopath.find("CMS_2013_I1122847")>0) : if(file.find("-mu")>=0 and aopath.find("d01")>=0 ) : outhistos[aopath] = ao elif(file.find("-e")>=0 and (aopath.find("d02")>=0 or aopath.find("d03")>=0)) : outhistos[aopath] = ao elif (aopath.find("ATLAS_2016_I1424838")>0) : ihist = int(aopath.split("/")[2].split("-")[0].replace("d","")) if(file.find("-mu")>=0 and ihist>30 ) : outhistos[aopath] = ao elif(file.find("-e")>=0 and ihist<=30) : outhistos[aopath] = ao elif "ATLAS_2016_I1502620" in aopath : newPath = aopath.split(":")[0]+"/"+aopath.split("/")[-1] if newPath in outhistos : continue else : outhistos[newPath] = ao ao.setPath(newPath) elif ("CMS_2015_I1310737" in aopath or "ATLAS_2013_I1219109" in aopath or ("ATLAS_2014_I1319490" in aopath and "y01" in aopath )) : if aopath in outhistos : outhistos[aopath] += ao else : outhistos[aopath] = ao elif (aopath.find("ATLAS_2015_I1351916")>=0) : if(aopath.find("-y02")>=0) : pathBase = "/%s/" % aopath.split("/")[1] if("d03" in aopath) : hp = aos[pathBase+"_ncf_pos"] hm = aos[pathBase+"_ncf_neg"] else : hp = aos[pathBase+"_ncc_pos"] hm = aos[pathBase+"_ncc_neg"] ratio = (hp-hm)/(hp+hm) title="" if hasattr(ao, 'title'): - title=ao.title - hnew = yoda.Scatter2D(aopath,title) + title=ao.title() + hnew = yoda.core.Scatter2D(aopath,title) hnew.combineWith(ratio) outhistos[aopath] = hnew else : continue elif (aopath.find("ATLAS_2014_I1282447")>=0) : if((aopath.find("/ATLAS_2014_I1282447/d02-x01-y01")>=0 or aopath.find("/ATLAS_2014_I1282447/d08-x01-y01")>=0 or aopath.find("/ATLAS_2014_I1282447/d02-x01-y02")>=0 or aopath.find("/ATLAS_2014_I1282447/d02-x01-y01")>=0 or aopath.find("/ATLAS_2014_I1282447/d05-x01-y02")>=0 or aopath.find("/ATLAS_2014_I1282447/d05-x01-y03")>=0 or aopath.find("/ATLAS_2014_I1282447/d06-x01-y01")>=0 or aopath.find("/ATLAS_2014_I1282447/d06-x01-y02")>=0 or aopath.find("/ATLAS_2014_I1282447/d06-x01-y03")>=0 or aopath.find("/ATLAS_2014_I1282447/d06-x01-y04")>=0) and not (aopath.find("plus")>=0 or aopath.find("minus")>=0 or aopath.find("inc")>=0)) : continue if aopath in outhistos : outhistos[aopath] += ao else : outhistos[aopath] = ao elif (aopath.find("ATLAS_2015_I1408516")>=0) : - if not inhistos_mass.has_key(aopath): + if aopath not in inhistos_mass: inhistos_mass[aopath] = {} tmpE = inhistos_mass[aopath] sqrts=8000 - if not tmpE.has_key(sqrts): + if sqrts not in tmpE: tmpE[sqrts] = {} tmpP = tmpE[sqrts] - if not tmpP.has_key(mass): + if mass not in tmpP: tmpP[mass] = ao else: raise Exception("A set with mass = %s already exists" % ( mass)) elif (aopath.find("ATLAS_2013_I1234228")>=0) : - if not inhistos_mass.has_key(aopath): + if aopath not in inhistos_mass: inhistos_mass[aopath] = {} tmpE = inhistos_mass[aopath] sqrts=7000 - if not tmpE.has_key(sqrts): + if sqrts not in tmpE: tmpE[sqrts] = {} tmpP = tmpE[sqrts] - if not tmpP.has_key(mass): + if mass not in tmpP: tmpP[mass] = ao else: raise Exception("A set with mass = %s already exists" % ( mass)) elif (aopath.find("ATLAS_2017_I1514251")>=0) : outhistos[aopath] = ao if(type(ao)==yoda.core.Scatter2D) : ao.scaleY(2.) elif(type(ao)==yoda.core.Histo1D) : ao.scaleW(2.) elif ( "2015_041_" in aopath) : aopath=aopath.replace("_EL","").replace("_MU","") ao.setPath(aopath) outhistos[aopath] = ao else : outhistos[aopath] = ao - for hpath,hsets in inhistos_mass.iteritems(): + for hpath,hsets in inhistos_mass.items(): if(hpath!="/ATLAS_2015_I1408516:LMODE=EL/d41-x01-y01" and hpath!="/ATLAS_2015_I1408516:LMODE=MU/d41-x01-y02" and hpath!="/ATLAS_2013_I1234228/d01-x01-y02" ) : continue title="" path="" - histo = hsets.values()[0].values()[0] + histo = list(list(hsets.values())[0].values())[0] if hasattr(histo, 'title'): title=histo.title() if hasattr(histo, 'path'): path=histo.path() if(type(histo)==yoda.core.Scatter2D) : outhistos[hpath] = yoda.core.Scatter2D(path,title) elif(type(histo)==yoda.core.Profile1D) : outhistos[hpath] = yoda.core.Profile1D(path,title) for i in range(0,histo.numBins()) : outhistos[hpath].addBin(histo.bins()[i].xMin(), histo.bins()[i].xMax()) elif(type(histo)==yoda.core.Histo1D) : outhistos[hpath] = yoda.core.Histo1D(path,title) for i in range(0,histo.numBins()) : outhistos[hpath].addBin(histo.bins()[i].xMin(), histo.bins()[i].xMax()) else : logging.error("Histogram %s is of unknown type" % hpath) sys.exit(1) # sort out mass bins for ATLAS Z-> e,mu at 8 TeV for ltype in ["EL","MU"] : if(ltype=="EL") : y = "y01" mergeByMass("/ATLAS_2015_I1408516:LMODE=EL/d41-x01-y01", "8000") else : y = "y04" mergeByMass("/ATLAS_2015_I1408516:LMODE=MU/d41-x01-y02", "8000") - for d in [2,3,04,14,26,38]: + for d in [2,3,4,14,26,38]: useOneMass("/ATLAS_2015_I1408516:LMODE=%s/d%02d-x01-%s" % (ltype,d,y), "8000", "30" ) for d in [5,6,7,8,9,10,15,17,18,19,20,21,22,27,29,30,31,32,33,34,39]: useOneMass("/ATLAS_2015_I1408516:LMODE=%s/d%02d-x01-%s" % (ltype,d,y), "8000", "66" ) for d in [11,12,13,16,28,40]: useOneMass("/ATLAS_2015_I1408516:LMODE=%s/d%02d-x01-%s" % (ltype,d,y), "8000", "116" ) for d in [23,35]: useOneMass("/ATLAS_2015_I1408516:LMODE=%s/d%02d-x01-%s" % (ltype,d,y), "8000", "12" ) for d in [24,36]: useOneMass("/ATLAS_2015_I1408516:LMODE=%s/d%02d-x01-%s" % (ltype,d,y), "8000", "12" ) for d in [25,37]: useOneMass("/ATLAS_2015_I1408516:LMODE=%s/d%02d-x01-%s" % (ltype,d,y), "8000", "30" ) # sort out ratios for ATLAS W+c if("/ATLAS_2014_I1282447/d02-x01-y01_plus" in outhistos and "/ATLAS_2014_I1282447/d02-x01-y01_minus" in outhistos) : d02y01_plus = outhistos["/ATLAS_2014_I1282447/d02-x01-y01_plus"] d02y01_minus = outhistos["/ATLAS_2014_I1282447/d02-x01-y01_minus"] ratio_d02y01 = d02y01_plus/d02y01_minus ratio_d02y01.setPath("/ATLAS_2014_I1282447/d02-x01-y01") del outhistos["/ATLAS_2014_I1282447/d02-x01-y01_plus"] del outhistos["/ATLAS_2014_I1282447/d02-x01-y01_minus"] outhistos["/ATLAS_2014_I1282447/d02-x01-y01"] = ratio_d02y01 if("/ATLAS_2014_I1282447/d02-x01-y02_plus" in outhistos and "/ATLAS_2014_I1282447/d02-x01-y02_minus" in outhistos) : d02y02_plus = outhistos["/ATLAS_2014_I1282447/d02-x01-y02_plus"] d02y02_minus = outhistos["/ATLAS_2014_I1282447/d02-x01-y02_minus"] ratio_d02y02 = d02y02_plus/d02y02_minus ratio_d02y02.setPath("/ATLAS_2014_I1282447/d02-x01-y02") del outhistos["/ATLAS_2014_I1282447/d02-x01-y02_plus"] del outhistos["/ATLAS_2014_I1282447/d02-x01-y02_minus"] outhistos["/ATLAS_2014_I1282447/d02-x01-y02"] = ratio_d02y02 if("/ATLAS_2014_I1282447/d08-x01-y01_plus" in outhistos and "/ATLAS_2014_I1282447/d08-x01-y01_minus" in outhistos) : d08y01_plus = outhistos["/ATLAS_2014_I1282447/d08-x01-y01_plus"] d08y01_minus = outhistos["/ATLAS_2014_I1282447/d08-x01-y01_minus"] ratio_d08y01 = d08y01_plus/d08y01_minus ratio_d08y01.setPath("/ATLAS_2014_I1282447/d08-x01-y01") del outhistos["/ATLAS_2014_I1282447/d08-x01-y01_plus"] del outhistos["/ATLAS_2014_I1282447/d08-x01-y01_minus"] outhistos["/ATLAS_2014_I1282447/d08-x01-y01"] = ratio_d08y01 if ("/ATLAS_2014_I1282447/d05-x01-y01" in outhistos and "/ATLAS_2014_I1282447/d01-x01-y02" in outhistos) : h_winc = outhistos["/ATLAS_2014_I1282447/d05-x01-y01"] h_d = outhistos["/ATLAS_2014_I1282447/d01-x01-y02"] ratio_wd = h_d/h_winc ratio_wd.setPath("/ATLAS_2014_I1282447/d05-x01-y02") outhistos["/ATLAS_2014_I1282447/d05-x01-y02"] = ratio_wd if ("/ATLAS_2014_I1282447/d05-x01-y01" in outhistos and "/ATLAS_2014_I1282447/d01-x01-y03" in outhistos) : h_winc = outhistos["/ATLAS_2014_I1282447/d05-x01-y01"] h_dstar= outhistos["/ATLAS_2014_I1282447/d01-x01-y03"] ratio_wdstar = h_dstar/h_winc ratio_wdstar.setPath("/ATLAS_2014_I1282447/d05-x01-y03") outhistos["/ATLAS_2014_I1282447/d05-x01-y03"] = ratio_wdstar if("/ATLAS_2014_I1282447/d06-x01-y01_winc" in outhistos and "/ATLAS_2014_I1282447/d06-x01-y02_winc" in outhistos) : h_winc_plus = outhistos["/ATLAS_2014_I1282447/d06-x01-y01_winc"] h_winc_minus = outhistos["/ATLAS_2014_I1282447/d06-x01-y02_winc"] if( "/ATLAS_2014_I1282447/d06-x01-y01_wplus" in outhistos ) : h_wd_plus = outhistos["/ATLAS_2014_I1282447/d06-x01-y01_wplus"] ratio_wd_plus = h_wd_plus/h_winc_plus ratio_wd_plus.setPath("/ATLAS_2014_I1282447/d06-x01-y01") outhistos["/ATLAS_2014_I1282447/d06-x01-y01"] = ratio_wd_plus del outhistos["/ATLAS_2014_I1282447/d06-x01-y01_wplus"] if( "/ATLAS_2014_I1282447/d06-x01-y02_wminus" in outhistos ) : h_wd_minus = outhistos["/ATLAS_2014_I1282447/d06-x01-y02_wminus"] ratio_wd_minus = h_wd_minus/h_winc_minus ratio_wd_minus.setPath("/ATLAS_2014_I1282447/d06-x01-y02") outhistos["/ATLAS_2014_I1282447/d06-x01-y02"] = ratio_wd_minus del outhistos["/ATLAS_2014_I1282447/d06-x01-y02_wminus"] if ( "/ATLAS_2014_I1282447/d06-x01-y03_wplus" in outhistos) : h_wdstar_plus = outhistos["/ATLAS_2014_I1282447/d06-x01-y03_wplus"] ratio_wdstar_plus = h_wdstar_plus/h_winc_plus ratio_wdstar_plus.setPath("/ATLAS_2014_I1282447/d06-x01-y03") outhistos["/ATLAS_2014_I1282447/d06-x01-y03"] = ratio_wdstar_plus del outhistos["/ATLAS_2014_I1282447/d06-x01-y03_wplus"] if ( "/ATLAS_2014_I1282447/d06-x01-y04_wminus" in outhistos) : h_wdstar_minus = outhistos["/ATLAS_2014_I1282447/d06-x01-y04_wminus"] ratio_wdstar_minus = h_wdstar_minus/h_winc_minus ratio_wdstar_minus.setPath("/ATLAS_2014_I1282447/d06-x01-y04") outhistos["/ATLAS_2014_I1282447/d06-x01-y04"] = ratio_wdstar_minus del outhistos["/ATLAS_2014_I1282447/d06-x01-y04_wminus"] del outhistos["/ATLAS_2014_I1282447/d06-x01-y01_winc"] del outhistos["/ATLAS_2014_I1282447/d06-x01-y02_winc"] mergeByMass("/ATLAS_2013_I1234228/d01-x01-y02", "7000") # ATLAS W/Z ratios iy=0 for suffix in ["",":LMODE=EL",":LMODE=MU"] : iy+=1 basePath = "/ATLAS_2014_I1312627%s/" % suffix for ihist in range(1,21) : num = "%sd%02d-x02-y%02d" % (basePath,ihist,iy) den = "%sd%02d-x03-y%02d" % (basePath,ihist,iy) if(den in outhistos and num in outhistos) : ratio = outhistos[num]/outhistos[den] ratio.setPath("%sd%02d-x01-y%02d" % (basePath,ihist,iy)) del outhistos[num] del outhistos[den] outhistos[ "%sd%02d-x01-y%02d" % (basePath,ihist,iy)]=ratio elif den in outhistos : del outhistos[den] elif num in outhistos : del outhistos[num] # Choose output file name = args[0]+"-EW.yoda" yoda.writeYODA(outhistos,name) sys.exit(0) diff --git a/Tests/python/merge-LHC-Jets b/Tests/python/merge-LHC-Jets --- a/Tests/python/merge-LHC-Jets +++ b/Tests/python/merge-LHC-Jets @@ -1,1671 +1,1670 @@ #! /usr/bin/env python -import logging -import sys -import math +from __future__ import print_function +import logging, sys, math if sys.version_info[:3] < (2,4,0): - print "rivet scripts require Python version >= 2.4.0... exiting" + print ("rivet scripts require Python version >= 2.4.0... exiting") sys.exit(1) import os, yoda # ############################################# def rescale(path,scale) : if(path not in outhistos) : return outhistos[path].scaleW(scale) def fillAbove(scale,desthisto, sourcehistosbyptmin) : pthigh= 1e100 ptlow =-1e100 - for pt, h in sorted(sourcehistosbyptmin.iteritems(),reverse=True): + for pt, h in sorted(sourcehistosbyptmin.items(),reverse=True): ptlow=pt if(type(desthisto)==yoda.core.Scatter2D) : for i in range(0,h.numPoints()) : xMin = h.points()[i].x()-h.points()[i].xErrs().minus if( xMin*scale >= ptlow and xMin*scale < pthigh ) : desthisto.addPoint(h.points()[i]) elif(type(desthisto)==yoda.core.Profile1D) : for i in range(0,h.numBins()) : if(h.bins()[i].xMin()*scale >= ptlow and h.bins()[i].xMin()*scale < pthigh ) : desthisto.bins()[i] += h.bins()[i] elif(type(desthisto)==yoda.core.Histo1D) : for i in range(0,h.numBins()) : if(h.bins()[i].xMin()*scale >= ptlow and h.bins()[i].xMin()*scale < pthigh ) : desthisto.bins()[i] += h.bins()[i] elif(type(desthisto)==yoda.core.Counter) : desthisto += h else : logging.error("Can't merge %s, unknown type" % desthisto.path()) sys.exit(1) pthigh=pt def mergeByPt(hpath, sqrts, scale=1.) : global inhistos_pt global outhistos try: fillAbove(scale,outhistos[hpath], inhistos_pt[hpath][float(sqrts)]) except: pass def mergeByMass(hpath, sqrts, scale=1.): global inhistos_mass global outhistos try: fillAbove(scale,outhistos[hpath], inhistos_mass[hpath][float(sqrts)]) except: pass def useOnePt(hpath, sqrts, ptmin): global inhistos_pt global outhistos try: ## Find best pT_min match ptmins = inhistos_pt[hpath][float(sqrts)].keys() closest_ptmin = None for ptm in ptmins: if closest_ptmin is None or \ abs(ptm-float(ptmin)) < abs(closest_ptmin-float(ptmin)): closest_ptmin = ptm if closest_ptmin != float(ptmin): logging.warning("Inexact match for requested pTmin=%s: " % ptmin + \ "using pTmin=%e instead" % closest_ptmin) outhistos[hpath] = inhistos_pt[hpath][float(sqrts)][closest_ptmin] except: pass def useOneMass(hpath, sqrts, ptmin): global inhistos_pt global outhistos try: ## Find best pT_min match ptmins = inhistos_mass[hpath][float(sqrts)].keys() closest_ptmin = None for ptm in ptmins: if closest_ptmin is None or \ abs(ptm-float(ptmin)) < abs(closest_ptmin-float(ptmin)): closest_ptmin = ptm if closest_ptmin != float(ptmin): logging.warning("Inexact match for requested mass=%s: " % ptmin + \ "using mass=%e instead" % closest_ptmin) outhistos[hpath] = inhistos_mass[hpath][float(sqrts)][closest_ptmin] except: pass # ####################################### if __name__ == "__main__": import logging from optparse import OptionParser, OptionGroup parser = OptionParser(usage="%prog name") verbgroup = OptionGroup(parser, "Verbosity control") parser.add_option("--with-ue", action='store_true' , dest="ue", default=True, help="Include UE analyses") parser.add_option("--without-ue", action='store_false', dest="ue", default=True, help="Don\'t include UE analyses") verbgroup.add_option("-v", "--verbose", action="store_const", const=logging.DEBUG, dest="LOGLEVEL", default=logging.INFO, help="print debug (very verbose) messages") verbgroup.add_option("-q", "--quiet", action="store_const", const=logging.WARNING, dest="LOGLEVEL", default=logging.INFO, help="be very quiet") parser.add_option_group(verbgroup) (opts, args) = parser.parse_args() logging.basicConfig(level=opts.LOGLEVEL, format="%(message)s") (opts, args) = parser.parse_args() ## Check args if len(args) < 1: logging.error("Must specify at least the name of the files") sys.exit(1) yodafiles=["-7-Bottom-0.yoda","-7-Bottom-1.yoda","-7-Bottom-2.yoda", "-7-Bottom-3.yoda","-7-Bottom-4.yoda","-7-Bottom-5.yoda","-7-Bottom-6.yoda", "-7-Charm-1.yoda","-7-Charm-2.yoda", "-7-Charm-3.yoda","-7-Charm-4.yoda","-7-Charm-5.yoda", "-7-Top-SL.yoda","-7-Top-L.yoda", "-8-Top-SL.yoda","-8-Top-L.yoda","-8-Top-All.yoda", "-13-Top-L.yoda","-13-Top-SL.yoda","-13-Top-All.yoda"] for i in range(1,11) : for j in [7,8,13] : yodafiles.append("-%1.1i-Jets-%1.1i.yoda" % (j,i)) for i in range(1,4) : yodafiles.append("-2760-Jets-%1.1i.yoda" % i) if(opts.ue) : yodafiles += ["-7-Jets-0.yoda" ,"-8-Jets-0.yoda" , "-900-UE.yoda" ,"-2360-UE.yoda" , "-2760-UE.yoda" ,"-7-UE.yoda" , "-900-UE-Long.yoda" ,"-8-UE.yoda" , "-7-UE-Long.yoda","-13-UE.yoda","-13-UE-Long.yoda"] ## Get histos inhistos_pt = {} inhistos_mass = {} outhistos={} weights = {} for f in yodafiles: file='Rivet-'+args[0]+f ptmin=0. sqrts=7000 # CMS energy if(file.find("-900-")>0) : sqrts=900 elif(file.find("-2360-")>0) : sqrts=2360 elif(file.find("-2760-")>0) : sqrts=2760 elif(file.find("-7-")>=0) : sqrts=7000 elif(file.find("-8-")>=0) : sqrts=8000 elif(file.find("-13-")>0) : sqrts=13000 # pT min if(file.find("UE")>0) : ptmin=0. elif(file.find("Jets-0")>0) : ptmin=4. elif(file.find("Jets-10")>0) : ptmin=1900. elif(file.find("Jets-1")>0) : if( not opts.ue) : ptmin = 10. else : ptmin = 20. elif(file.find("Jets-2")>0) : ptmin=40. elif(file.find("Jets-3")>0) : ptmin=80. elif(file.find("Jets-4")>0) : ptmin=110. elif(file.find("Jets-5")>0) : ptmin=210. elif(file.find("Jets-6")>0) : ptmin=260. elif(file.find("Jets-7")>0) : ptmin=400. elif(file.find("Jets-8")>0) : ptmin=600. elif(file.find("Jets-9")>0) : ptmin=900. elif(file.find("Bottom-0")>0) : ptmin=0. elif(file.find("Bottom-1")>0 or file.find("Charm-1")>0) : ptmin=10. elif(file.find("Bottom-2")>0 or file.find("Charm-2")>0) : ptmin=20. elif(file.find("Bottom-3")>0 or file.find("Charm-3")>0) : ptmin=30. elif(file.find("Bottom-4")>0 or file.find("Charm-4")>0) : ptmin=70. elif(file.find("Bottom-5")>0 or file.find("Charm-5")>0) : ptmin=100. elif(file.find("Bottom-6")>0 or file.find("Charm-6")>0) : ptmin=130. elif(file.find("Top-SL.yoda")>0 or file.find("Top-L.yoda")>0 or \ file.find("Top-All.yoda")>0): ptmin=0. if not os.access(file, os.R_OK): logging.error("%s can not be read" % file) continue try: aos = yoda.read(file) except: logging.error("%s can not be parsed as YODA" % file) continue ## Get histos from this YODA file - for aopath, ao in aos.iteritems() : + for aopath, ao in aos.items() : if("RAW" in aopath) :continue if(aopath.find("S8924791")>0 or aopath.find("S8971293")>0 or aopath.find("S8817804")>0 or aopath.find("I1082936")>0 or aopath.find("S8994773")>0 or aopath.find("S8918562")>0 or aopath.find("S8624100")>0 or aopath.find("S8625980")>0 or aopath.find("S8894728")>0 or aopath.find("S8957746")>0 or aopath.find("S9126244")>0 or aopath.find("S9120041")>0 or aopath.find("S8950903")>0 or aopath.find("S9086218")>0 or aopath.find("S9088458")>0 or aopath.find("I919017" )>0 or aopath.find("I926145" )>0 or aopath.find("S8941262")>0 or aopath.find("S8973270")>0 or aopath.find("I1118269")>0 or aopath.find("I1188891")>0 or aopath.find("I1082009")>0 or aopath.find("I1087342")>0 or aopath.find("S9035664")>0 or aopath.find("I1125575")>0 or aopath.find("I1094564")>0 or aopath.find("I930220" )>0 or aopath.find("I1224539")>0 or aopath.find("I1273574")>0 or aopath.find("I1261026")>0 or aopath.find("I1307243")>0 or aopath.find("I1325553")>0 or aopath.find("I1298810")>0 or aopath.find("I1298811")>0 or aopath.find("I1208923")>0 or aopath.find("I1305624")>0 or aopath.find("I1419070")>0 or aopath.find("I1394679")>0 or aopath.find("I929691" )>0 or aopath.find("I1393758")>0 or aopath.find("I1459051")>0 or aopath.find("I1487277")>0 or aopath.find("I1421646")>0 or aopath.find("I1111014")>0 or aopath.find("I1605749")>0 or aopath.find("I1682495")>0 or aopath.find("I1609253")>0 or aopath.find("1385107" )>0 or aopath.find("I1486238")>0 or aopath.find("1634970" )>0 or aopath.find("I1604271")>0 or aopath.find("I1598460")>0 or aopath.find("1724098" )>0 or aopath.find("ATLAS_2016_CONF_2016_092")>0 or aopath.find("CMS_2012_PAS_QCD_11_010")>0) : if("1419070" in aopath and ("forward" in aopath or "central" in aopath )) : continue - if not inhistos_pt.has_key(aopath): + if aopath not in inhistos_pt: inhistos_pt[aopath] = {} tmpE = inhistos_pt[aopath] - if not tmpE.has_key(sqrts): + if sqrts not in tmpE: tmpE[sqrts] = {} - if not tmpE[sqrts].has_key(ptmin): + if ptmin not in tmpE[sqrts]: tmpE[sqrts][ptmin] = ao else: tmpE[sqrts][ptmin] += ao #raise Exception("A set with ptmin = %s already exists" % ( ptmin)) else : if("1509919" in aopath and "Ctr_cut" in aopath) : continue elif "I1393758" in aopath and ("d02" in aopath or "d04" in aopath or "d06" in aopath or "d08" in aopath or "d10" in aopath or "d12" in aopath) : continue elif "1387176" in aopath and "y02" in aopath: continue elif "1454211" in aopath and "cutflow" in aopath : continue elif("ATLAS_2016_I1468168" in aopath) : newPath=aopath.replace("Passed_events","d02-x01-y01") outhistos[newPath] = ao ao.setPath(newPath) elif(aopath.find("I1243871")>0) : if(aopath.find("x01")>0 and file.find("-7-Top-L.yoda")>0 ) : outhistos[aopath] = ao elif(aopath.find("x02")>0 and file.find("-7-Top-SL.yoda")>0 ) : outhistos[aopath] = ao elif(aopath.find("1467230")>0 or aopath.find("1419652")>0) : if(aopath.find("y01")>0 and file.find("Long")>0 ) : outhistos[aopath] = ao elif(aopath.find("y02")>0 and file.find("Long")<0 ) : outhistos[aopath] = ao elif("CMS_2017_I1471287" in aopath) : if("CMS_2017_I1471287/d" in aopath) : outhistos[aopath] = ao elif("ATLAS_2018_I1705857" in aopath ) : ihist = int(aopath.split("/d")[1].split("-")[0]) if "-SL" in file : if ihist in [9,10,11,12,19,20,21,22,23,24,25,26,33,34,35,36,37,38,45,46,47,48,49,50] : outhistos[aopath] = ao elif "-L" in file : if ihist in [3,4,5,6,7,8,13,14,15,16,17,18,27,28,29,30,31,32,39,40,41,42,43,44] : outhistos[aopath] = ao if ihist in [1,2] : if aopath not in outhistos : outhistos[aopath] = ao else : title="" path="" if hasattr(ao, 'title'): - title=ao.title + title=ao.title() if hasattr(ao, 'path'): path=ao.path() temp = yoda.core.Histo1D(path,title) for i in range(0,ao.numBins()) : temp.addBin(ao.bins()[i].xMin(),ao.bins()[i].xMax()) if("-SL" in file) : temp.bins()[0] += outhistos[aopath].bins()[0] temp.bins()[1] += outhistos[aopath].bins()[1] temp.bins()[2] += ao.bins()[2] temp.bins()[3] += ao.bins()[3] temp.bins()[2] += ao.bins()[2] temp.bins()[3] += ao.bins()[3] else : temp.bins()[0] += ao.bins()[0] temp.bins()[1] += ao.bins()[1] temp.bins()[2] += outhistos[aopath].bins()[2] temp.bins()[3] += outhistos[aopath].bins()[3] temp.bins()[2] += outhistos[aopath].bins()[2] temp.bins()[3] += outhistos[aopath].bins()[3] outhistos[aopath] = temp else : outhistos[aopath] = ao yodafiles=["-7-Bottom-7.yoda","-7-Bottom-8.yoda","-7-Bottom-9.yoda"] for i in range(1,8) : yodafiles.append("-7-DiJets-%1.1i-A.yoda" % i) yodafiles.append("-7-DiJets-%1.1i-B.yoda" % i) yodafiles.append("-7-DiJets-%1.1i-C.yoda" % i) for i in range(1,12) : yodafiles.append("-13-DiJets-%1.1i-A.yoda" % i) # for i in range(6,12) : # yodafiles.append("-13-DiJets-%1.1i-B.yoda" % i) for f in yodafiles: file='Rivet-'+args[0]+f if "-7-Jets" in file or "-7-DiJets" in file or "-7-Bottom" in file : sqrts = 7000 elif "-13-Jets" in file or "-13-DiJets" in file : sqrts = 13000 if(file.find("-DiJets-2")>0) : mass=250 elif(file.find("-DiJets-3")>0) : mass=500 elif(file.find("-DiJets-4")>0) : mass=800 elif(file.find("-DiJets-5")>0) : mass=1000 elif(file.find("-DiJets-6")>0) : mass=1600 elif(file.find("-DiJets-7")>0) : mass=2200 elif(file.find("-DiJets-8")>0) : mass=2800 elif(file.find("-DiJets-9")>0) : mass=3900 elif(file.find("-DiJets-10")>0) : mass=4900 elif(file.find("-DiJets-11")>0) : mass=5900 elif(file.find("-DiJets-1")>0) : mass=100 elif(file.find("-Bottom-7")>0) : mass=110 elif(file.find("-Bottom-8")>0) : mass=370 elif(file.find("-Bottom-9")>0) : mass=550 elif(file.find("-Jets-1")>0) : mass=0 if not os.access(file, os.R_OK): logging.error("%s can not be read" % file) continue try: aos = yoda.read(file) except: logging.error("%s can not be parsed as YODA" % file) continue ## Get histos from this YODA file - for aopath, ao in aos.iteritems() : + for aopath, ao in aos.items() : if("RAW" in aopath) :continue if(aopath.find("8817804")>0 or aopath.find("8968497")>0 or aopath.find("1082936")>0 or aopath.find("I930220")>0 or aopath.find("1261026")>0 or aopath.find("1090423")>0 or aopath.find("1268975")>0 or aopath.find("1519995") >0 or aopath.find("1663452") >0 or aopath.find("1634970" )>0 or aopath.find("CMS_2013_I1208923")>0) : - if not inhistos_mass.has_key(aopath): + if aopath not in inhistos_mass: inhistos_mass[aopath] = {} tmpE = inhistos_mass[aopath] - if not tmpE.has_key(sqrts): + if sqrts not in tmpE: tmpE[sqrts] = {} tmpP = tmpE[sqrts] - if not tmpP.has_key(mass): + if mass not in tmpP: tmpP[mass] = ao else: - print aopath - print sqrts,mass,file + print (aopath) + print (sqrts,mass,file) raise Exception("A set with mass = %s already exists" % ( mass)) ## Make empty output histos if needed -for hpath,hsets in inhistos_pt.iteritems(): +for hpath,hsets in inhistos_pt.items(): if( hpath.find("8924791")>0 or hpath.find("8971293")>0 or hpath.find("8817804")>0 or hpath.find("8968497")>0 or (hpath.find("9120041")>0 and (hpath.find("d01")>0 or hpath.find("d02")>0)) or hpath.find("9126244")>0 or hpath.find("926145") >0 or hpath.find("9086218")>0 or hpath.find("1082936")>0 or hpath.find("8941262")>0 or hpath.find("1118269")>0 or hpath.find("1087342")>0 or hpath.find("1188891")>0 or hpath.find("919017")>0 or hpath.find("9035664")>0 or hpath.find("1125575")>0 or hpath.find("1094564")>0 or hpath.find("I930220")>0 or hpath.find("S9088458")>0 or hpath.find("I1273574")>0 or hpath.find("I1261026")>0 or hpath.find("I1090423")>0 or hpath.find("QCD_11_010")>0 or hpath.find("1298811" )>0 or hpath.find("I1325553" )>0 or hpath.find("I1298810" )>0 or hpath.find("1307243" )>0 or hpath.find("I1419070")>0 or hpath.find("I1394679")>0 or hpath.find("I1487277")>0 or hpath.find("I1604271")>0 or hpath.find("I1598460")>0 or hpath.find("CMS_2013_I1208923")>0 or hpath.find("1393758")>0 or hpath.find("ATLAS_2016_CONF_2016_092")>0 or hpath.find("1111014")>0 or hpath.find("1385107")>0 or hpath.find("I1486238") or hpath.find("1459051")>0 or hpath.find("1634970")>0) : title="" path="" - histo = hsets.values()[0].values()[0] + histo = list(list(hsets.values())[0].values())[0] if hasattr(histo, 'title'): - title=histo.title + title=histo.title() if hasattr(histo, 'path'): path=histo.path() if(type(histo)==yoda.core.Counter) : outhistos[hpath] = yoda.core.Counter(path,title) elif(type(histo)==yoda.core.Scatter2D) : outhistos[hpath] = yoda.core.Scatter2D(path,title) elif(type(histo)==yoda.core.Profile1D) : outhistos[hpath] = yoda.core.Profile1D(path,title) for i in range(0,histo.numBins()) : outhistos[hpath].addBin(histo.bins()[i].xMin(), histo.bins()[i].xMax()) elif(type(histo)==yoda.core.Histo1D) : outhistos[hpath] = yoda.core.Histo1D(path,title) for i in range(0,histo.numBins()) : outhistos[hpath].addBin(histo.bins()[i].xMin(), histo.bins()[i].xMax()) else : logging.error("Histogram %s is of unknown type" % hpath) sys.exit(1) ## Make empty output histos if needed -for hpath,hsets in inhistos_mass.iteritems(): +for hpath,hsets in inhistos_mass.items(): if(hpath.find("1268975")>0 or hpath.find("1634970")>0) : title="" path="" - histo = hsets.values()[0].values()[0] + histo = list(list(hsets.values())[0].values())[0] if hasattr(histo, 'title'): title=histo.title() if hasattr(histo, 'path'): path=histo.path() if(type(histo)==yoda.core.Counter) : outhistos[hpath] = yoda.core.Counter(path,title) elif(type(histo)==yoda.core.Scatter2D) : outhistos[hpath] = yoda.core.Scatter2D(path,title) elif(type(histo)==yoda.core.Profile1D) : outhistos[hpath] = yoda.core.Profile1D(path,title) for i in range(0,histo.numBins()) : outhistos[hpath].addBin(histo.bins()[i].xMin(), histo.bins()[i].xMax()) elif(type(histo)==yoda.core.Histo1D) : outhistos[hpath] = yoda.core.Histo1D(path,title) for i in range(0,histo.numBins()) : outhistos[hpath].addBin(histo.bins()[i].xMin(), histo.bins()[i].xMax()) else : logging.error("Histogram %s is of unknown type" % hpath) sys.exit(1) logging.info("Processing CMS_2011_S8957746") useOnePt("/CMS_2011_S8957746/d01-x01-y01", "7000", "80" ) useOnePt("/CMS_2011_S8957746/d02-x01-y01", "7000", "80" ) useOnePt("/CMS_2011_S8957746/d03-x01-y01", "7000", "110" ) useOnePt("/CMS_2011_S8957746/d04-x01-y01", "7000", "110" ) useOnePt("/CMS_2011_S8957746/d05-x01-y01", "7000", "210" ) useOnePt("/CMS_2011_S8957746/d06-x01-y01", "7000", "210" ) logging.info("Processing ATLAS_2010_S8894728") useOnePt("/ATLAS_2010_S8894728/d01-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d01-x01-y02", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d01-x01-y03", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d02-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d02-x01-y02", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d02-x01-y03", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d03-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d03-x01-y02", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d03-x01-y03", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d04-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d04-x01-y02", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d04-x01-y03", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d05-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d06-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d07-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d08-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d09-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d09-x01-y02", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d09-x01-y03", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d10-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d10-x01-y02", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d10-x01-y03", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d11-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d11-x01-y02", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d11-x01-y03", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d12-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d12-x01-y02", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d12-x01-y03", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d13-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d13-x01-y02", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d13-x01-y03", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d13-x01-y04", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d14-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d14-x01-y02", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d14-x01-y03", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d14-x01-y04", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d15-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d15-x01-y02", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d15-x01-y03", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d15-x01-y04", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d16-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d16-x01-y02", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d16-x01-y03", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d16-x01-y04", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d17-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d17-x01-y02", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d17-x01-y03", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d18-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d18-x01-y02", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d18-x01-y03", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d19-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d19-x01-y02", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d19-x01-y03", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d20-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d20-x01-y02", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d20-x01-y03", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d21-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d22-x01-y01", "7000", "0" ) logging.info("Processing ATLAS_2011_S8994773") useOnePt("/ATLAS_2011_S8994773/d01-x01-y01", "900", "0" ) useOnePt("/ATLAS_2011_S8994773/d02-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2011_S8994773/d03-x01-y01", "900", "0" ) useOnePt("/ATLAS_2011_S8994773/d04-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2011_S8994773/d13-x01-y01", "900", "0" ) useOnePt("/ATLAS_2011_S8994773/d13-x01-y02", "900", "0" ) useOnePt("/ATLAS_2011_S8994773/d13-x01-y03", "900", "0" ) useOnePt("/ATLAS_2011_S8994773/d14-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2011_S8994773/d14-x01-y02", "7000", "0" ) useOnePt("/ATLAS_2011_S8994773/d14-x01-y03", "7000", "0" ) logging.info("Processing ALICE_2010_S8624100") useOnePt("/ALICE_2010_S8624100/d11-x01-y01", "900", "0" ) useOnePt("/ALICE_2010_S8624100/d12-x01-y01", "900", "0" ) useOnePt("/ALICE_2010_S8624100/d13-x01-y01", "900", "0" ) useOnePt("/ALICE_2010_S8624100/d17-x01-y01","2360", "0" ) useOnePt("/ALICE_2010_S8624100/d18-x01-y01","2360", "0" ) useOnePt("/ALICE_2010_S8624100/d19-x01-y01","2360", "0" ) logging.info("Processing ALICE_2010_S8625980") useOnePt("/ALICE_2010_S8625980/d03-x01-y01", "7000", "0" ) useOnePt("/ALICE_2010_S8625980/d04-x01-y01", "900", "0" ) useOnePt("/ALICE_2010_S8625980/d05-x01-y01", "2360", "0" ) useOnePt("/ALICE_2010_S8625980/d06-x01-y01", "7000", "0" ) logging.info("Processing ATLAS_2010_S8918562") useOnePt("/ATLAS_2010_S8918562/d01-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8918562/d02-x01-y01", "2360", "0" ) useOnePt("/ATLAS_2010_S8918562/d03-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8918562/d04-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8918562/d05-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8918562/d06-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8918562/d07-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8918562/d08-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8918562/d09-x01-y01", "2360", "0" ) useOnePt("/ATLAS_2010_S8918562/d10-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8918562/d11-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8918562/d12-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8918562/d13-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8918562/d14-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8918562/d15-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8918562/d16-x01-y01", "2360", "0" ) useOnePt("/ATLAS_2010_S8918562/d17-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8918562/d18-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8918562/d19-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8918562/d20-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8918562/d21-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8918562/d22-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8918562/d23-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8918562/d24-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8918562/d25-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8918562/d26-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8918562/d27-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8918562/d28-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8918562/d29-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8918562/d30-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8918562/d31-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8918562/d32-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8918562/d33-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8918562/d34-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8918562/d35-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8918562/d36-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8918562/d37-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8918562/d38-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8918562/d39-x01-y01", "7000", "0" ) logging.info("Processing ATLAS_2011_S8971293") useOnePt("/ATLAS_2011_S8971293/d01-x01-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S8971293/d01-x01-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S8971293/d01-x01-y03", "7000", "210" ) useOnePt("/ATLAS_2011_S8971293/d01-x01-y04", "7000", "260" ) useOnePt("/ATLAS_2011_S8971293/d01-x01-y05", "7000", "260" ) useOnePt("/ATLAS_2011_S8971293/d01-x01-y06", "7000", "400" ) useOnePt("/ATLAS_2011_S8971293/d01-x01-y07", "7000", "400" ) useOnePt("/ATLAS_2011_S8971293/d01-x01-y08", "7000", "600" ) useOnePt("/ATLAS_2011_S8971293/d01-x01-y09", "7000", "600" ) logging.info("Processing ATLAS_2011_S8924791") if( not opts.ue) : useOnePt("/ATLAS_2011_S8924791/d01-x01-y01", "7000", "10" ) useOnePt("/ATLAS_2011_S8924791/d01-x01-y02", "7000", "10" ) useOnePt("/ATLAS_2011_S8924791/d01-x02-y01", "7000", "10" ) useOnePt("/ATLAS_2011_S8924791/d01-x02-y02", "7000", "10" ) useOnePt("/ATLAS_2011_S8924791/d01-x03-y01", "7000", "10" ) useOnePt("/ATLAS_2011_S8924791/d01-x03-y02", "7000", "10" ) useOnePt("/ATLAS_2011_S8924791/d01-x04-y01", "7000", "10" ) useOnePt("/ATLAS_2011_S8924791/d01-x04-y02", "7000", "10" ) useOnePt("/ATLAS_2011_S8924791/d01-x05-y01", "7000", "10" ) useOnePt("/ATLAS_2011_S8924791/d01-x05-y02", "7000", "10" ) useOnePt("/ATLAS_2011_S8924791/d01-x06-y01", "7000", "10" ) useOnePt("/ATLAS_2011_S8924791/d01-x06-y02", "7000", "10" ) else : useOnePt("/ATLAS_2011_S8924791/d01-x01-y01", "7000", "20" ) useOnePt("/ATLAS_2011_S8924791/d01-x01-y02", "7000", "20" ) useOnePt("/ATLAS_2011_S8924791/d01-x02-y01", "7000", "20" ) useOnePt("/ATLAS_2011_S8924791/d01-x02-y02", "7000", "20" ) useOnePt("/ATLAS_2011_S8924791/d01-x03-y01", "7000", "20" ) useOnePt("/ATLAS_2011_S8924791/d01-x03-y02", "7000", "20" ) useOnePt("/ATLAS_2011_S8924791/d01-x04-y01", "7000", "20" ) useOnePt("/ATLAS_2011_S8924791/d01-x04-y02", "7000", "20" ) useOnePt("/ATLAS_2011_S8924791/d01-x05-y01", "7000", "20" ) useOnePt("/ATLAS_2011_S8924791/d01-x05-y02", "7000", "20" ) useOnePt("/ATLAS_2011_S8924791/d01-x06-y01", "7000", "20" ) useOnePt("/ATLAS_2011_S8924791/d01-x06-y02", "7000", "20" ) useOnePt("/ATLAS_2011_S8924791/d02-x01-y01", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d02-x01-y02", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d02-x02-y01", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d02-x02-y02", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d02-x03-y01", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d02-x03-y02", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d02-x04-y01", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d02-x04-y02", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d02-x05-y01", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d02-x05-y02", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d02-x06-y01", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d02-x06-y02", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d03-x01-y01", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d03-x01-y02", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d03-x02-y01", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d03-x02-y02", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d03-x03-y01", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d03-x03-y02", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d03-x04-y01", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d03-x04-y02", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d03-x05-y01", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d03-x05-y02", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d03-x06-y01", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d03-x06-y02", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d04-x01-y01", "7000", "80" ) useOnePt("/ATLAS_2011_S8924791/d04-x01-y02", "7000", "80" ) useOnePt("/ATLAS_2011_S8924791/d04-x02-y01", "7000", "80" ) useOnePt("/ATLAS_2011_S8924791/d04-x02-y02", "7000", "80" ) useOnePt("/ATLAS_2011_S8924791/d04-x03-y01", "7000", "80" ) useOnePt("/ATLAS_2011_S8924791/d04-x03-y02", "7000", "80" ) useOnePt("/ATLAS_2011_S8924791/d04-x04-y01", "7000", "80" ) useOnePt("/ATLAS_2011_S8924791/d04-x04-y02", "7000", "80" ) useOnePt("/ATLAS_2011_S8924791/d04-x05-y01", "7000", "80" ) useOnePt("/ATLAS_2011_S8924791/d04-x05-y02", "7000", "80" ) useOnePt("/ATLAS_2011_S8924791/d04-x06-y01", "7000", "80" ) useOnePt("/ATLAS_2011_S8924791/d04-x06-y02", "7000", "80" ) useOnePt("/ATLAS_2011_S8924791/d05-x01-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d05-x01-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d05-x02-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d05-x02-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d05-x03-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d05-x03-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d05-x04-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d05-x04-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d05-x05-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d05-x05-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d05-x06-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d05-x06-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d06-x01-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d06-x01-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d06-x02-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d06-x02-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d06-x03-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d06-x03-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d06-x04-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d06-x04-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d06-x05-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d06-x05-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d06-x06-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d06-x06-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d07-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2011_S8924791/d07-x01-y02", "7000", "210" ) useOnePt("/ATLAS_2011_S8924791/d07-x02-y01", "7000", "210" ) useOnePt("/ATLAS_2011_S8924791/d07-x02-y02", "7000", "210" ) useOnePt("/ATLAS_2011_S8924791/d07-x03-y01", "7000", "210" ) useOnePt("/ATLAS_2011_S8924791/d07-x03-y02", "7000", "210" ) useOnePt("/ATLAS_2011_S8924791/d07-x04-y01", "7000", "210" ) useOnePt("/ATLAS_2011_S8924791/d07-x04-y02", "7000", "210" ) useOnePt("/ATLAS_2011_S8924791/d07-x05-y01", "7000", "210" ) useOnePt("/ATLAS_2011_S8924791/d07-x05-y02", "7000", "210" ) useOnePt("/ATLAS_2011_S8924791/d07-x06-y01", "7000", "210" ) useOnePt("/ATLAS_2011_S8924791/d07-x06-y02", "7000", "210" ) useOnePt("/ATLAS_2011_S8924791/d08-x01-y01", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d08-x01-y02", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d08-x02-y01", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d08-x02-y02", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d08-x03-y01", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d08-x03-y02", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d08-x04-y01", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d08-x04-y02", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d08-x05-y01", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d08-x05-y02", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d08-x06-y01", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d08-x06-y02", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d09-x01-y01", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d09-x01-y02", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d09-x02-y01", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d09-x02-y02", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d09-x03-y01", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d09-x03-y02", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d09-x04-y01", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d09-x04-y02", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d09-x05-y01", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d09-x05-y02", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d09-x06-y01", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d09-x06-y02", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d10-x01-y01", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d10-x01-y02", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d10-x02-y01", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d10-x02-y02", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d10-x03-y01", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d10-x03-y02", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d10-x04-y01", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d10-x04-y02", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d10-x05-y01", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d10-x05-y02", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d10-x06-y01", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d10-x06-y02", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d11-x01-y01", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d11-x01-y02", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d11-x02-y01", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d11-x02-y02", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d11-x03-y01", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d11-x03-y02", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d11-x04-y01", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d11-x04-y02", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d11-x05-y01", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d11-x05-y02", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d11-x06-y01", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d11-x06-y02", "7000", "400" ) logging.info("Processing ATLAS_2010_S8817804") mergeByPt("/ATLAS_2010_S8817804/d01-x01-y01", "7000") mergeByPt("/ATLAS_2010_S8817804/d02-x01-y01", "7000") mergeByPt("/ATLAS_2010_S8817804/d03-x01-y01", "7000") mergeByPt("/ATLAS_2010_S8817804/d04-x01-y01", "7000") mergeByPt("/ATLAS_2010_S8817804/d05-x01-y01", "7000") mergeByPt("/ATLAS_2010_S8817804/d06-x01-y01", "7000") mergeByPt("/ATLAS_2010_S8817804/d07-x01-y01", "7000") mergeByPt("/ATLAS_2010_S8817804/d08-x01-y01", "7000") mergeByPt("/ATLAS_2010_S8817804/d09-x01-y01", "7000") mergeByPt("/ATLAS_2010_S8817804/d10-x01-y01", "7000") mergeByMass("/ATLAS_2010_S8817804/d11-x01-y01", "7000") mergeByMass("/ATLAS_2010_S8817804/d12-x01-y01", "7000") mergeByMass("/ATLAS_2010_S8817804/d13-x01-y01", "7000") mergeByMass("/ATLAS_2010_S8817804/d14-x01-y01", "7000") mergeByMass("/ATLAS_2010_S8817804/d15-x01-y01", "7000") mergeByMass("/ATLAS_2010_S8817804/d16-x01-y01", "7000") mergeByMass("/ATLAS_2010_S8817804/d17-x01-y01", "7000") mergeByMass("/ATLAS_2010_S8817804/d18-x01-y01", "7000") mergeByMass("/ATLAS_2010_S8817804/d19-x01-y01", "7000") mergeByMass("/ATLAS_2010_S8817804/d20-x01-y01", "7000") useOneMass("/ATLAS_2010_S8817804/d21-x01-y01", "7000", "250" ) useOneMass("/ATLAS_2010_S8817804/d22-x01-y01", "7000", "250" ) useOneMass("/ATLAS_2010_S8817804/d23-x01-y01", "7000", "650" ) useOneMass("/ATLAS_2010_S8817804/d24-x01-y01", "7000", "250" ) useOneMass("/ATLAS_2010_S8817804/d25-x01-y01", "7000", "250" ) useOneMass("/ATLAS_2010_S8817804/d26-x01-y01", "7000", "650" ) logging.info("Processing ATLAS_2011_I930220") mergeByPt("/ATLAS_2011_I930220/d01-x01-y01", "7000" ) mergeByPt("/ATLAS_2011_I930220/d02-x01-y01", "7000" ) mergeByPt("/ATLAS_2011_I930220/d03-x01-y01", "7000" ) mergeByPt("/ATLAS_2011_I930220/d04-x01-y01", "7000" ) mergeByPt("/ATLAS_2011_I930220/d05-x01-y01", "7000" ) mergeByPt("/ATLAS_2011_I930220/d06-x01-y01", "7000" ) mergeByMass("/ATLAS_2011_I930220/d07-x01-y01", "7000") useOneMass("/ATLAS_2011_I930220/d08-x01-y01", "7000", "110" ) useOneMass("/ATLAS_2011_I930220/d09-x01-y01", "7000", "110" ) useOneMass("/ATLAS_2011_I930220/d10-x01-y01", "7000", "370" ) logging.info("Processing ATLAS_2012_I1082936") mergeByPt("/ATLAS_2012_I1082936/d01-x01-y01", "7000") mergeByPt("/ATLAS_2012_I1082936/d01-x01-y02", "7000") mergeByPt("/ATLAS_2012_I1082936/d01-x01-y03", "7000") mergeByPt("/ATLAS_2012_I1082936/d01-x01-y04", "7000") mergeByPt("/ATLAS_2012_I1082936/d01-x01-y05", "7000") mergeByPt("/ATLAS_2012_I1082936/d01-x01-y06", "7000") mergeByPt("/ATLAS_2012_I1082936/d01-x01-y07", "7000") mergeByPt("/ATLAS_2012_I1082936/d02-x01-y01", "7000") mergeByPt("/ATLAS_2012_I1082936/d02-x01-y02", "7000") mergeByPt("/ATLAS_2012_I1082936/d02-x01-y03", "7000") mergeByPt("/ATLAS_2012_I1082936/d02-x01-y04", "7000") mergeByPt("/ATLAS_2012_I1082936/d02-x01-y05", "7000") mergeByPt("/ATLAS_2012_I1082936/d02-x01-y06", "7000") mergeByPt("/ATLAS_2012_I1082936/d02-x01-y07", "7000") mergeByMass("/ATLAS_2012_I1082936/d03-x01-y01", "7000", 1000.) mergeByMass("/ATLAS_2012_I1082936/d03-x01-y02", "7000", 1000.) mergeByMass("/ATLAS_2012_I1082936/d03-x01-y03", "7000", 1000.) mergeByMass("/ATLAS_2012_I1082936/d03-x01-y04", "7000", 1000.) mergeByMass("/ATLAS_2012_I1082936/d03-x01-y05", "7000", 1000.) mergeByMass("/ATLAS_2012_I1082936/d03-x01-y06", "7000", 1000.) mergeByMass("/ATLAS_2012_I1082936/d03-x01-y07", "7000", 1000.) mergeByMass("/ATLAS_2012_I1082936/d03-x01-y08", "7000", 1000.) mergeByMass("/ATLAS_2012_I1082936/d03-x01-y09", "7000", 1000.) mergeByMass("/ATLAS_2012_I1082936/d04-x01-y01", "7000", 1000.) mergeByMass("/ATLAS_2012_I1082936/d04-x01-y02", "7000", 1000.) mergeByMass("/ATLAS_2012_I1082936/d04-x01-y03", "7000", 1000.) mergeByMass("/ATLAS_2012_I1082936/d04-x01-y04", "7000", 1000.) mergeByMass("/ATLAS_2012_I1082936/d04-x01-y05", "7000", 1000.) mergeByMass("/ATLAS_2012_I1082936/d04-x01-y06", "7000", 1000.) mergeByMass("/ATLAS_2012_I1082936/d04-x01-y07", "7000", 1000.) mergeByMass("/ATLAS_2012_I1082936/d04-x01-y08", "7000", 1000.) mergeByMass("/ATLAS_2012_I1082936/d04-x01-y09", "7000", 1000.) logging.info("Processing CMS_2011_S8968497") useOneMass("/CMS_2011_S8968497/d01-x01-y01", "7000", "1700" ) useOneMass("/CMS_2011_S8968497/d02-x01-y01", "7000", "1700" ) useOneMass("/CMS_2011_S8968497/d03-x01-y01", "7000", "1100" ) useOneMass("/CMS_2011_S8968497/d04-x01-y01", "7000", "1100" ) useOneMass("/CMS_2011_S8968497/d05-x01-y01", "7000", "650" ) useOneMass("/CMS_2011_S8968497/d06-x01-y01", "7000", "650" ) useOneMass("/CMS_2011_S8968497/d07-x01-y01", "7000", "250" ) useOneMass("/CMS_2011_S8968497/d08-x01-y01", "7000", "250" ) useOneMass("/CMS_2011_S8968497/d09-x01-y01", "7000", "250" ) logging.info("Processing ATLAS_2011_S9126244") mergeByPt("/ATLAS_2011_S9126244/d01-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9126244/d01-x01-y02", "7000") mergeByPt("/ATLAS_2011_S9126244/d02-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9126244/d02-x01-y02", "7000") mergeByPt("/ATLAS_2011_S9126244/d03-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9126244/d03-x01-y02", "7000") mergeByPt("/ATLAS_2011_S9126244/d04-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9126244/d04-x01-y02", "7000") mergeByPt("/ATLAS_2011_S9126244/d05-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9126244/d05-x01-y02", "7000") useOnePt("/ATLAS_2011_S9126244/d06-x01-y01", "7000", "40" ) useOnePt("/ATLAS_2011_S9126244/d06-x01-y02", "7000", "40" ) useOnePt("/ATLAS_2011_S9126244/d07-x01-y01", "7000", "80" ) useOnePt("/ATLAS_2011_S9126244/d07-x01-y02", "7000", "80" ) useOnePt("/ATLAS_2011_S9126244/d08-x01-y01", "7000", "80" ) useOnePt("/ATLAS_2011_S9126244/d08-x01-y02", "7000", "80" ) useOnePt("/ATLAS_2011_S9126244/d09-x01-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d09-x01-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d10-x01-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d10-x01-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d11-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2011_S9126244/d11-x01-y02", "7000", "210" ) useOnePt("/ATLAS_2011_S9126244/d12-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2011_S9126244/d12-x01-y02", "7000", "210" ) useOnePt("/ATLAS_2011_S9126244/d13-x01-y01", "7000", "40" ) useOnePt("/ATLAS_2011_S9126244/d13-x01-y02", "7000", "40" ) useOnePt("/ATLAS_2011_S9126244/d14-x01-y01", "7000", "40" ) useOnePt("/ATLAS_2011_S9126244/d14-x01-y02", "7000", "40" ) useOnePt("/ATLAS_2011_S9126244/d15-x01-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d15-x01-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d16-x01-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d16-x01-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d17-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2011_S9126244/d17-x01-y02", "7000", "210" ) useOnePt("/ATLAS_2011_S9126244/d18-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2011_S9126244/d18-x01-y02", "7000", "210" ) useOnePt("/ATLAS_2011_S9126244/d19-x01-y01", "7000", "40" ) useOnePt("/ATLAS_2011_S9126244/d20-x01-y01", "7000", "80" ) useOnePt("/ATLAS_2011_S9126244/d21-x01-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d22-x01-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d23-x01-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d24-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2011_S9126244/d25-x01-y01", "7000", "210" ) mergeByPt("/ATLAS_2011_S9126244/d26-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9126244/d26-x01-y02", "7000") mergeByPt("/ATLAS_2011_S9126244/d27-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9126244/d27-x01-y02", "7000") mergeByPt("/ATLAS_2011_S9126244/d28-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9126244/d28-x01-y02", "7000") mergeByPt("/ATLAS_2011_S9126244/d29-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9126244/d29-x01-y02", "7000") useOnePt("/ATLAS_2011_S9126244/d30-x01-y01", "7000", "40" ) useOnePt("/ATLAS_2011_S9126244/d31-x01-y01", "7000", "80" ) useOnePt("/ATLAS_2011_S9126244/d32-x01-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d33-x01-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d34-x01-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d35-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2011_S9126244/d36-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2011_S9126244/d37-x01-y01", "7000", "40" ) useOnePt("/ATLAS_2011_S9126244/d37-x01-y02", "7000", "40" ) useOnePt("/ATLAS_2011_S9126244/d38-x01-y01", "7000", "80" ) useOnePt("/ATLAS_2011_S9126244/d38-x01-y02", "7000", "80" ) useOnePt("/ATLAS_2011_S9126244/d39-x01-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d39-x01-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d40-x01-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d40-x01-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d41-x01-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d41-x01-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d42-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2011_S9126244/d42-x01-y02", "7000", "210" ) useOnePt("/ATLAS_2011_S9126244/d43-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2011_S9126244/d43-x01-y02", "7000", "210" ) # CMS_2011_S9120041 UE analysis logging.info("Processing CMS_2011_S9120041") mergeByPt("/CMS_2011_S9120041/d01-x01-y01", "7000") mergeByPt("/CMS_2011_S9120041/d02-x01-y01", "7000") if(opts.ue) : useOnePt("/CMS_2011_S9120041/d03-x01-y01", "900", "0" ) useOnePt("/CMS_2011_S9120041/d04-x01-y01", "900", "0" ) useOnePt("/CMS_2011_S9120041/d05-x01-y01", "7000", "0" ) useOnePt("/CMS_2011_S9120041/d06-x01-y01", "7000", "0" ) useOnePt("/CMS_2011_S9120041/d07-x01-y01", "7000", "0" ) useOnePt("/CMS_2011_S9120041/d11-x01-y01", "900", "0" ) useOnePt("/CMS_2011_S9120041/d12-x01-y01", "900", "0" ) useOnePt("/CMS_2011_S9120041/d13-x01-y01", "900", "0" ) useOnePt("/CMS_2011_S9120041/d08-x01-y01", "7000", "20" ) useOnePt("/CMS_2011_S9120041/d09-x01-y01", "7000", "20" ) useOnePt("/CMS_2011_S9120041/d10-x01-y01", "7000", "20" ) else : useOnePt("/CMS_2011_S9120041/d08-x01-y01", "7000", "10" ) useOnePt("/CMS_2011_S9120041/d09-x01-y01", "7000", "10" ) useOnePt("/CMS_2011_S9120041/d10-x01-y01", "7000", "10" ) # CMS dijet decorrelation logging.info("Processing CMS_2011_S8950903") useOnePt("/CMS_2011_S8950903/d01-x01-y01", "7000", "80" ) useOnePt("/CMS_2011_S8950903/d02-x01-y01", "7000", "110" ) useOnePt("/CMS_2011_S8950903/d03-x01-y01", "7000", "110" ) useOnePt("/CMS_2011_S8950903/d04-x01-y01", "7000", "210" ) useOnePt("/CMS_2011_S8950903/d05-x01-y01", "7000", "260" ) # CMS jet cross section logging.info("Processing CMS_2011_S9086218") mergeByPt("/CMS_2011_S9086218/d01-x01-y01", "7000") mergeByPt("/CMS_2011_S9086218/d02-x01-y01", "7000") mergeByPt("/CMS_2011_S9086218/d03-x01-y01", "7000") mergeByPt("/CMS_2011_S9086218/d04-x01-y01", "7000") mergeByPt("/CMS_2011_S9086218/d05-x01-y01", "7000") mergeByPt("/CMS_2011_S9086218/d06-x01-y01", "7000") # CMS 2/3 jet cross section ratio logging.info("Processing CMS_2011_S9086218") mergeByPt("/CMS_2011_S9088458/d01-x01-y01", "7000",500.) # ATLAS track jet logging.info("Processing ATLAS_2011_I919017") for d in range(1,3) : for y in range(1,5) : mergeByPt("/ATLAS_2011_I919017/d0%s-x01-y0%s" % (d,y), "7000") if( opts.ue) : for x in range(2,6) : for y in ["01","02","06","07","11","12","16","17","21","22"] : useOnePt("/ATLAS_2011_I919017/d0%s-x0%s-y%s" % (d,x,y), "7000", "0" ) for y in ["03","04","08","09","13","14","18","19","23","24"] : useOnePt("/ATLAS_2011_I919017/d0%s-x0%s-y%s" % (d,x,y), "7000", "4" ) for y in range(5,30,5) : useOnePt("/ATLAS_2011_I919017/d0%s-x%02d-y%02d" % (d,x,y) , "7000", "20" ) else : for x in range(2,6) : for y in range(5,30,5) : useOnePt("/ATLAS_2011_I919017/d0%s-x%02d-y%02d" % (d,x,y) , "7000", "10" ) logging.info("Processing ATLAS_2011_I926145") mergeByPt("/ATLAS_2011_I926145/d01-x01-y01", "7000",1.5) mergeByPt("/ATLAS_2011_I926145/d02-x01-y01", "7000",1.5) mergeByPt("/ATLAS_2011_I926145/d03-x01-y01", "7000",1.5) logging.info("Processing CMS_2011_S8941262") useOnePt("/CMS_2011_S8941262/d01-x01-y01", "7000", "10" ) useOnePt("/CMS_2011_S8941262/d03-x01-y01", "7000", "10" ) mergeByPt("/CMS_2011_S8941262/d02-x01-y01", "7000",1.5) logging.info("Processing CMS_2011_S8973270") useOnePt("/CMS_2011_S8973270/d01-x01-y01", "7000", "70" ) useOnePt("/CMS_2011_S8973270/d02-x01-y01", "7000", "100" ) useOnePt("/CMS_2011_S8973270/d03-x01-y01", "7000", "130" ) useOnePt("/CMS_2011_S8973270/d04-x01-y01", "7000", "70" ) useOnePt("/CMS_2011_S8973270/d05-x01-y01", "7000", "100" ) useOnePt("/CMS_2011_S8973270/d06-x01-y01", "7000", "130" ) logging.info("Processing ATLAS_2012_I1082009") useOnePt("/ATLAS_2012_I1082009/d08-x01-y01", "7000", "40" ) useOnePt("/ATLAS_2012_I1082009/d09-x01-y01", "7000", "40" ) useOnePt("/ATLAS_2012_I1082009/d10-x01-y01", "7000", "40" ) useOnePt("/ATLAS_2012_I1082009/d11-x01-y01", "7000", "80" ) useOnePt("/ATLAS_2012_I1082009/d12-x01-y01", "7000", "80" ) useOnePt("/ATLAS_2012_I1082009/d13-x01-y01", "7000", "40" ) logging.info("Processing ATLAS_2012_I1118269") mergeByPt("/ATLAS_2012_I1118269/d01-x01-y01", "7000") useOnePt("/ATLAS_2012_I1118269/d02-x01-y01", "7000", "10" ) logging.info("Processing ATLAS_2012_I1188891") mergeByPt("/ATLAS_2012_I1188891/d01-x01-y01", "7000") mergeByPt("/ATLAS_2012_I1188891/d02-x01-y01", "7000") mergeByPt("/ATLAS_2012_I1188891/d03-x01-y01", "7000") mergeByPt("/ATLAS_2012_I1188891/d04-x01-y01", "7000") mergeByPt("/ATLAS_2012_I1188891/d05-x01-y01", "7000") mergeByPt("/ATLAS_2012_I1188891/d06-x01-y01", "7000") logging.info("Processing CMS_2012_I1087342") mergeByPt("/CMS_2012_I1087342/d01-x01-y01", "7000") mergeByPt("/CMS_2012_I1087342/d02-x01-y01", "7000") mergeByPt("/CMS_2012_I1087342/d03-x01-y01", "7000") logging.info("Processing CMS_2012_PAS_QCD_11_010") mergeByPt("/CMS_2012_PAS_QCD_11_010/d01-x01-y01", "7000") mergeByPt("/CMS_2012_PAS_QCD_11_010/d02-x01-y01", "7000") mergeByPt("/CMS_2012_PAS_QCD_11_010/d03-x01-y01", "7000") mergeByPt("/CMS_2012_PAS_QCD_11_010/d04-x01-y01", "7000") logging.info("Processing ATLAS_2011_S9035664") mergeByPt("/ATLAS_2011_S9035664/d11-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9035664/d12-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9035664/d13-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9035664/d14-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9035664/d15-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9035664/d16-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9035664/d17-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9035664/d18-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9035664/d20-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9035664/d21-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9035664/d22-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9035664/d23-x01-y01", "7000") logging.info("Processing ATLAS_2012_I1125575") mergeByPt("/ATLAS_2012_I1125575/d01-x01-y01", "7000") mergeByPt("/ATLAS_2012_I1125575/d01-x01-y02", "7000") mergeByPt("/ATLAS_2012_I1125575/d01-x02-y01", "7000") mergeByPt("/ATLAS_2012_I1125575/d01-x02-y02", "7000") mergeByPt("/ATLAS_2012_I1125575/d01-x03-y01", "7000") mergeByPt("/ATLAS_2012_I1125575/d01-x03-y02", "7000") mergeByPt("/ATLAS_2012_I1125575/d01-x04-y01", "7000") mergeByPt("/ATLAS_2012_I1125575/d01-x04-y02", "7000") mergeByPt("/ATLAS_2012_I1125575/d01-x05-y01", "7000") mergeByPt("/ATLAS_2012_I1125575/d01-x05-y02", "7000") mergeByPt("/ATLAS_2012_I1125575/d02-x01-y01", "7000") mergeByPt("/ATLAS_2012_I1125575/d02-x01-y02", "7000") mergeByPt("/ATLAS_2012_I1125575/d02-x02-y01", "7000") mergeByPt("/ATLAS_2012_I1125575/d02-x02-y02", "7000") mergeByPt("/ATLAS_2012_I1125575/d02-x03-y01", "7000") mergeByPt("/ATLAS_2012_I1125575/d02-x03-y02", "7000") mergeByPt("/ATLAS_2012_I1125575/d02-x04-y01", "7000") mergeByPt("/ATLAS_2012_I1125575/d02-x04-y02", "7000") mergeByPt("/ATLAS_2012_I1125575/d02-x05-y01", "7000") mergeByPt("/ATLAS_2012_I1125575/d02-x05-y02", "7000") mergeByPt("/ATLAS_2012_I1125575/d03-x01-y01", "7000") mergeByPt("/ATLAS_2012_I1125575/d03-x01-y02", "7000") mergeByPt("/ATLAS_2012_I1125575/d03-x02-y01", "7000") mergeByPt("/ATLAS_2012_I1125575/d03-x02-y02", "7000") mergeByPt("/ATLAS_2012_I1125575/d03-x03-y01", "7000") mergeByPt("/ATLAS_2012_I1125575/d03-x03-y02", "7000") mergeByPt("/ATLAS_2012_I1125575/d03-x04-y01", "7000") mergeByPt("/ATLAS_2012_I1125575/d03-x04-y02", "7000") mergeByPt("/ATLAS_2012_I1125575/d03-x05-y01", "7000") mergeByPt("/ATLAS_2012_I1125575/d03-x05-y02", "7000") for d in range(4,7) : for x in range(1,6) : if(opts.ue) : for y in range(1,9) : useOnePt("/ATLAS_2012_I1125575/d0%s-x0%s-y0%s" % (d,x,y), "7000", "0" ) for y in ["09","10","11","12","13","14","15","16"] : useOnePt("/ATLAS_2012_I1125575/d0%s-x0%s-y%s" % (d,x,y), "7000", "0" ) for y in range(17,19) : useOnePt("/ATLAS_2012_I1125575/d0%s-x0%s-y%s" % (d,x,y), "7000", "20" ) else : for y in range(17,19) : useOnePt("/ATLAS_2012_I1125575/d0%s-x0%s-y%s" % (d,x,y), "7000", "10" ) for y in range(19,21) : useOnePt("/ATLAS_2012_I1125575/d0%s-x0%s-y%s" % (d,x,y), "7000", "40" ) # ATLAS_2012_I1094564 useOnePt("/ATLAS_2012_I1094564/d01-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2012_I1094564/d02-x01-y01", "7000", "260" ) useOnePt("/ATLAS_2012_I1094564/d03-x01-y01", "7000", "400" ) useOnePt("/ATLAS_2012_I1094564/d04-x01-y01", "7000", "400" ) useOnePt("/ATLAS_2012_I1094564/d05-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2012_I1094564/d06-x01-y01", "7000", "260" ) useOnePt("/ATLAS_2012_I1094564/d07-x01-y01", "7000", "400" ) useOnePt("/ATLAS_2012_I1094564/d08-x01-y01", "7000", "400" ) useOnePt("/ATLAS_2012_I1094564/d09-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2012_I1094564/d10-x01-y01", "7000", "260" ) useOnePt("/ATLAS_2012_I1094564/d11-x01-y01", "7000", "400" ) useOnePt("/ATLAS_2012_I1094564/d12-x01-y01", "7000", "400" ) useOnePt("/ATLAS_2012_I1094564/d13-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2012_I1094564/d14-x01-y01", "7000", "260" ) useOnePt("/ATLAS_2012_I1094564/d15-x01-y01", "7000", "400" ) useOnePt("/ATLAS_2012_I1094564/d16-x01-y01", "7000", "400" ) useOnePt("/ATLAS_2012_I1094564/d17-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2012_I1094564/d18-x01-y01", "7000", "260" ) useOnePt("/ATLAS_2012_I1094564/d19-x01-y01", "7000", "400" ) useOnePt("/ATLAS_2012_I1094564/d20-x01-y01", "7000", "400" ) useOnePt("/ATLAS_2012_I1094564/d21-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2012_I1094564/d22-x01-y01", "7000", "260" ) useOnePt("/ATLAS_2012_I1094564/d23-x01-y01", "7000", "400" ) useOnePt("/ATLAS_2012_I1094564/d24-x01-y01", "7000", "400" ) useOnePt("/ATLAS_2012_I1094564/d25-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2012_I1094564/d26-x01-y01", "7000", "260" ) useOnePt("/ATLAS_2012_I1094564/d27-x01-y01", "7000", "400" ) useOnePt("/ATLAS_2012_I1094564/d28-x01-y01", "7000", "400" ) useOnePt("/ATLAS_2012_I1094564/d29-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2012_I1094564/d30-x01-y01", "7000", "260" ) useOnePt("/ATLAS_2012_I1094564/d31-x01-y01", "7000", "400" ) useOnePt("/ATLAS_2012_I1094564/d32-x01-y01", "7000", "400" ) useOnePt("/ATLAS_2012_I1094564/d33-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2012_I1094564/d34-x01-y01", "7000", "260" ) useOnePt("/ATLAS_2012_I1094564/d35-x01-y01", "7000", "400" ) useOnePt("/ATLAS_2012_I1094564/d36-x01-y01", "7000", "400" ) logging.info("Processing CMS_2013_I1224539_DIJET") useOnePt("/CMS_2013_I1224539_DIJET/d01-x01-y01", "7000", "210" ) useOnePt("/CMS_2013_I1224539_DIJET/d02-x01-y01", "7000", "260" ) useOnePt("/CMS_2013_I1224539_DIJET/d03-x01-y01", "7000", "400" ) useOnePt("/CMS_2013_I1224539_DIJET/d04-x01-y01", "7000", "400" ) useOnePt("/CMS_2013_I1224539_DIJET/d05-x01-y01", "7000", "600" ) useOnePt("/CMS_2013_I1224539_DIJET/d06-x01-y01", "7000", "600" ) useOnePt("/CMS_2013_I1224539_DIJET/d07-x01-y01", "7000", "600" ) useOnePt("/CMS_2013_I1224539_DIJET/d08-x01-y01", "7000", "210" ) useOnePt("/CMS_2013_I1224539_DIJET/d09-x01-y01", "7000", "260" ) useOnePt("/CMS_2013_I1224539_DIJET/d10-x01-y01", "7000", "400" ) useOnePt("/CMS_2013_I1224539_DIJET/d11-x01-y01", "7000", "400" ) useOnePt("/CMS_2013_I1224539_DIJET/d12-x01-y01", "7000", "600" ) useOnePt("/CMS_2013_I1224539_DIJET/d13-x01-y01", "7000", "600" ) useOnePt("/CMS_2013_I1224539_DIJET/d14-x01-y01", "7000", "600" ) useOnePt("/CMS_2013_I1224539_DIJET/d15-x01-y01", "7000", "210" ) useOnePt("/CMS_2013_I1224539_DIJET/d16-x01-y01", "7000", "260" ) useOnePt("/CMS_2013_I1224539_DIJET/d17-x01-y01", "7000", "400" ) useOnePt("/CMS_2013_I1224539_DIJET/d18-x01-y01", "7000", "400" ) useOnePt("/CMS_2013_I1224539_DIJET/d19-x01-y01", "7000", "600" ) useOnePt("/CMS_2013_I1224539_DIJET/d20-x01-y01", "7000", "600" ) useOnePt("/CMS_2013_I1224539_DIJET/d21-x01-y01", "7000", "600" ) useOnePt("/CMS_2013_I1224539_DIJET/d22-x01-y01", "7000", "210" ) useOnePt("/CMS_2013_I1224539_DIJET/d23-x01-y01", "7000", "260" ) useOnePt("/CMS_2013_I1224539_DIJET/d24-x01-y01", "7000", "400" ) useOnePt("/CMS_2013_I1224539_DIJET/d25-x01-y01", "7000", "600" ) useOnePt("/CMS_2013_I1224539_DIJET/d26-x01-y01", "7000", "600" ) useOnePt("/CMS_2013_I1224539_DIJET/d27-x01-y01", "7000", "600" ) useOnePt("/CMS_2013_I1224539_DIJET/d28-x01-y01", "7000", "600" ) useOnePt("/CMS_2013_I1273574/d01-x01-y01", "7000", "80" ) mergeByPt("/CMS_2013_I1273574/d02-x01-y01", "7000",1.) useOnePt("/CMS_2013_I1273574/d03-x01-y01", "7000", "80" ) useOnePt("/CMS_2013_I1273574/d04-x01-y01", "7000", "80" ) useOnePt("/CMS_2013_I1273574/d05-x01-y01", "7000", "80" ) useOnePt("/CMS_2013_I1273574/d06-x01-y01", "7000", "80" ) mergeByPt("/CMS_2013_I1273574/d07-x01-y01", "7000",1.) useOnePt("/CMS_2013_I1273574/d08-x01-y01", "7000", "80" ) mergeByPt("/CMS_2013_I1273574/d09-x01-y01", "7000",1.) useOnePt("/CMS_2013_I1273574/d10-x01-y01", "7000", "80" ) mergeByPt("/CMS_2013_I1273574/d11-x01-y01", "7000",1.) useOnePt("/CMS_2013_I1261026/d01-x01-y01", "7000", "0" ) useOnePt("/CMS_2013_I1261026/d02-x01-y01", "7000", "0" ) useOnePt("/CMS_2013_I1261026/d03-x01-y01", "7000", "0" ) useOnePt("/CMS_2013_I1261026/d04-x01-y01", "7000", "0" ) useOnePt("/CMS_2013_I1261026/d05-x01-y01", "7000", "0" ) useOnePt("/CMS_2013_I1261026/d06-x01-y01", "7000", "0" ) useOnePt("/CMS_2013_I1261026/d07-x01-y01", "7000", "0" ) useOnePt("/CMS_2013_I1261026/d08-x01-y01", "7000", "0" ) useOnePt("/CMS_2013_I1261026/d09-x01-y01", "7000", "0" ) useOnePt("/CMS_2013_I1261026/d10-x01-y01", "7000", "0" ) useOnePt("/CMS_2013_I1261026/d11-x01-y01", "7000", "0" ) useOnePt("/CMS_2013_I1261026/d12-x01-y01", "7000", "0" ) useOnePt("/CMS_2013_I1261026/d13-x01-y01", "7000", "0" ) useOnePt("/CMS_2013_I1261026/d14-x01-y01", "7000", "0" ) useOnePt("/CMS_2013_I1261026/d15-x01-y01", "7000", "0" ) useOnePt("/CMS_2013_I1261026/d16-x01-y01", "7000", "0" ) useOnePt("/CMS_2013_I1261026/d17-x01-y01", "7000", "0" ) logging.info("Processing CMS_2012_I1090423") useOneMass("/CMS_2012_I1090423/d01-x01-y01", "7000", "2900" ) useOneMass("/CMS_2012_I1090423/d02-x01-y01", "7000", "2300" ) useOneMass("/CMS_2012_I1090423/d03-x01-y01", "7000", "1700" ) useOneMass("/CMS_2012_I1090423/d04-x01-y01", "7000", "1100" ) useOneMass("/CMS_2012_I1090423/d05-x01-y01", "7000", "1100" ) useOneMass("/CMS_2012_I1090423/d06-x01-y01", "7000", "650" ) useOneMass("/CMS_2012_I1090423/d07-x01-y01", "7000", "650" ) useOneMass("/CMS_2012_I1090423/d08-x01-y01", "7000", "250" ) useOneMass("/CMS_2012_I1090423/d09-x01-y01", "7000", "250" ) logging.info("Processing ATLAS_2014_I1298811") mergeByPt("/ATLAS_2014_I1298811/d01-x01-y01", "7000") mergeByPt("/ATLAS_2014_I1298811/d01-x01-y02", "7000") mergeByPt("/ATLAS_2014_I1298811/d02-x01-y01", "7000") mergeByPt("/ATLAS_2014_I1298811/d02-x01-y02", "7000") mergeByPt("/ATLAS_2014_I1298811/d03-x01-y01", "7000") mergeByPt("/ATLAS_2014_I1298811/d03-x01-y02", "7000") mergeByPt("/ATLAS_2014_I1298811/d04-x01-y01", "7000") mergeByPt("/ATLAS_2014_I1298811/d04-x01-y02", "7000") mergeByPt("/ATLAS_2014_I1298811/d05-x01-y01", "7000") mergeByPt("/ATLAS_2014_I1298811/d05-x01-y02", "7000") mergeByPt("/ATLAS_2014_I1298811/d06-x01-y01", "7000") mergeByPt("/ATLAS_2014_I1298811/d06-x01-y02", "7000") mergeByPt("/ATLAS_2014_I1298811/d07-x01-y01", "7000") mergeByPt("/ATLAS_2014_I1298811/d07-x01-y02", "7000") mergeByPt("/ATLAS_2014_I1298811/d08-x01-y01", "7000") mergeByPt("/ATLAS_2014_I1298811/d08-x01-y02", "7000") mergeByPt("/ATLAS_2014_I1298811/d09-x01-y01", "7000") mergeByPt("/ATLAS_2014_I1298811/d09-x01-y02", "7000") mergeByPt("/ATLAS_2014_I1298811/d10-x01-y01", "7000") mergeByPt("/ATLAS_2014_I1298811/d10-x01-y02", "7000") useOnePt("/ATLAS_2014_I1298811/d11-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2014_I1298811/d12-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2014_I1298811/d13-x01-y01", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d13-x01-y02", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d14-x01-y01", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d14-x01-y02", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d15-x01-y01", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d15-x01-y02", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d25-x01-y01", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d25-x01-y02", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d26-x01-y01", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d26-x01-y02", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d27-x01-y01", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d27-x01-y02", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d16-x01-y01", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d16-x01-y02", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d17-x01-y01", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d17-x01-y02", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d18-x01-y01", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d18-x01-y02", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d28-x01-y01", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d28-x01-y02", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d29-x01-y01", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d29-x01-y02", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d30-x01-y01", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d30-x01-y02", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d19-x01-y01", "7000", "40" ) useOnePt("/ATLAS_2014_I1298811/d19-x01-y02", "7000", "40" ) useOnePt("/ATLAS_2014_I1298811/d20-x01-y01", "7000", "40" ) useOnePt("/ATLAS_2014_I1298811/d20-x01-y02", "7000", "40" ) useOnePt("/ATLAS_2014_I1298811/d21-x01-y01", "7000", "40" ) useOnePt("/ATLAS_2014_I1298811/d21-x01-y02", "7000", "40" ) useOnePt("/ATLAS_2014_I1298811/d31-x01-y01", "7000", "40" ) useOnePt("/ATLAS_2014_I1298811/d31-x01-y02", "7000", "40" ) useOnePt("/ATLAS_2014_I1298811/d32-x01-y01", "7000", "40" ) useOnePt("/ATLAS_2014_I1298811/d32-x01-y02", "7000", "40" ) useOnePt("/ATLAS_2014_I1298811/d33-x01-y01", "7000", "40" ) useOnePt("/ATLAS_2014_I1298811/d33-x01-y02", "7000", "40" ) useOnePt("/ATLAS_2014_I1298811/d22-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2014_I1298811/d22-x01-y02", "7000", "210" ) useOnePt("/ATLAS_2014_I1298811/d23-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2014_I1298811/d23-x01-y02", "7000", "210" ) useOnePt("/ATLAS_2014_I1298811/d24-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2014_I1298811/d24-x01-y02", "7000", "210" ) useOnePt("/ATLAS_2014_I1298811/d34-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2014_I1298811/d34-x01-y02", "7000", "210" ) useOnePt("/ATLAS_2014_I1298811/d35-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2014_I1298811/d35-x01-y02", "7000", "210" ) useOnePt("/ATLAS_2014_I1298811/d36-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2014_I1298811/d36-x01-y02", "7000", "210" ) logging.info("Processing ATLAS_2014_I1268975") mergeByMass("/ATLAS_2014_I1268975/d01-x01-y01", "7000", 1000.) mergeByMass("/ATLAS_2014_I1268975/d01-x01-y02", "7000", 1000.) mergeByMass("/ATLAS_2014_I1268975/d01-x01-y03", "7000", 1000.) mergeByMass("/ATLAS_2014_I1268975/d01-x01-y04", "7000", 1000.) mergeByMass("/ATLAS_2014_I1268975/d01-x01-y05", "7000", 1000.) mergeByMass("/ATLAS_2014_I1268975/d01-x01-y06", "7000", 1000.) mergeByMass("/ATLAS_2014_I1268975/d02-x01-y01", "7000", 1000.) mergeByMass("/ATLAS_2014_I1268975/d02-x01-y02", "7000", 1000.) mergeByMass("/ATLAS_2014_I1268975/d02-x01-y03", "7000", 1000.) mergeByMass("/ATLAS_2014_I1268975/d02-x01-y04", "7000", 1000.) mergeByMass("/ATLAS_2014_I1268975/d02-x01-y05", "7000", 1000.) mergeByMass("/ATLAS_2014_I1268975/d02-x01-y06", "7000", 1000.) logging.info("Processing ATLAS_2014_I1307243") useOnePt( "/ATLAS_2014_I1307243/d01-x01-y01", "7000", "80" ) mergeByPt("/ATLAS_2014_I1307243/d02-x01-y01", "7000") useOnePt( "/ATLAS_2014_I1307243/d03-x01-y01", "7000", "80" ) mergeByPt("/ATLAS_2014_I1307243/d04-x01-y01", "7000") useOnePt( "/ATLAS_2014_I1307243/d05-x01-y01", "7000", "80" ) mergeByPt("/ATLAS_2014_I1307243/d06-x01-y01", "7000") useOnePt( "/ATLAS_2014_I1307243/d07-x01-y01", "7000", "80" ) mergeByPt("/ATLAS_2014_I1307243/d08-x01-y01", "7000") useOnePt( "/ATLAS_2014_I1307243/d09-x01-y01", "7000", "80" ) mergeByPt("/ATLAS_2014_I1307243/d10-x01-y01", "7000") useOnePt( "/ATLAS_2014_I1307243/d11-x01-y01", "7000", "80" ) mergeByPt("/ATLAS_2014_I1307243/d12-x01-y01", "7000") useOnePt( "/ATLAS_2014_I1307243/d13-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d14-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d15-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d16-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d17-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d18-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d19-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d20-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d21-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d22-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d23-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d24-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d25-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d26-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d27-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d28-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d29-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d30-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d31-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d32-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d33-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d34-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d35-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d36-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d37-x01-y01", "7000", "80" ) mergeByPt("/ATLAS_2014_I1307243/d38-x01-y01", "7000") useOnePt( "/ATLAS_2014_I1307243/d39-x01-y01", "7000", "80" ) mergeByPt("/ATLAS_2014_I1307243/d40-x01-y01", "7000") logging.info("Processing ATLAS_2014_I1325553") mergeByPt("/ATLAS_2014_I1325553/d01-x01-y01", "7000") mergeByPt("/ATLAS_2014_I1325553/d02-x01-y01", "7000") mergeByPt("/ATLAS_2014_I1325553/d03-x01-y01", "7000") mergeByPt("/ATLAS_2014_I1325553/d04-x01-y01", "7000") mergeByPt("/ATLAS_2014_I1325553/d05-x01-y01", "7000") mergeByPt("/ATLAS_2014_I1325553/d06-x01-y01", "7000") mergeByPt("/ATLAS_2014_I1325553/d07-x01-y01", "7000") mergeByPt("/ATLAS_2014_I1325553/d08-x01-y01", "7000") mergeByPt("/ATLAS_2014_I1325553/d09-x01-y01", "7000") mergeByPt("/ATLAS_2014_I1325553/d10-x01-y01", "7000") mergeByPt("/ATLAS_2014_I1325553/d11-x01-y01", "7000") mergeByPt("/ATLAS_2014_I1325553/d12-x01-y01", "7000") logging.info("Processing ATLAS_2016_I1419070") for i in range(1,13) : if(i<10) : mergeByPt("/ATLAS_2016_I1419070/d0%s-x01-y01" % i, "8000") else : mergeByPt("/ATLAS_2016_I1419070/d%s-x01-y01" % i, "8000") # remake differences and sums for ihist in range(1,4) : if not ("/ATLAS_2016_I1419070/d0%s-x01-y01" % ihist) in outhistos : continue h1 = outhistos["/ATLAS_2016_I1419070/d0%s-x01-y01" % ihist ] h2 = outhistos["/ATLAS_2016_I1419070/d0%s-x01-y01" % (ihist+3)] sstring = "/ATLAS_2016_I1419070/d%s-x01-y01" % (9+ihist) dstring = "/ATLAS_2016_I1419070/d0%s-x01-y01" % (6+ihist) hdiff = yoda.Scatter2D(dstring,dstring) hsum = yoda.Scatter2D(sstring,sstring) outhistos[dstring]= hdiff outhistos[sstring]= hsum for nbin in range(0,h2.numBins()) : bsum = h1.bins()[nbin]+h2.bins()[nbin] try: ydiff = h2.bins()[nbin].mean()-h1.bins()[nbin].mean() except: ydiff = 0 try: ysum = bsum.mean() bstderr = bsum.stdErr() except: ysum = 0 bstderr = 0 try: yerr = math.sqrt(h1.bins()[nbin].stdErr()**2+h2.bins()[nbin].stdErr()**2) except: yerr = 0 x = h1.bins()[nbin].xMid() xerr = 0.5*h1.bins()[nbin].xWidth() hdiff.addPoint(x,ydiff,xerr,yerr) hsum.addPoint(x,ysum ,xerr,bstderr) logging.info("Processing ATLAS_2015_I1394679") for i in range(1,5) : mergeByPt("/ATLAS_2015_I1394679/d0%s-x01-y01" % i, "8000") for i in range(5,11) : if(i<10) : useOnePt( "/ATLAS_2015_I1394679/d0%s-x01-y01" % i, "8000", "110" ) else : useOnePt( "/ATLAS_2015_I1394679/d%s-x01-y01" % i, "8000", "110" ) for i in range(0,4) : useOnePt( "/ATLAS_2015_I1394679/d%s-x01-y01" % (11+4*i), "8000", "110" ) useOnePt( "/ATLAS_2015_I1394679/d%s-x01-y01" % (12+4*i), "8000", "260" ) useOnePt( "/ATLAS_2015_I1394679/d%s-x01-y01" % (13+4*i), "8000", "600" ) useOnePt( "/ATLAS_2015_I1394679/d%s-x01-y01" % (14+4*i), "8000", "900" ) for i in range(0,5) : useOnePt( "/ATLAS_2015_I1394679/d%s-x01-y01" % (27+4*i), "8000", "110" ) useOnePt( "/ATLAS_2015_I1394679/d%s-x01-y01" % (28+4*i), "8000", "260" ) useOnePt( "/ATLAS_2015_I1394679/d%s-x01-y01" % (29+4*i), "8000", "400" ) useOnePt( "/ATLAS_2015_I1394679/d%s-x01-y01" % (30+4*i), "8000", "400" ) logging.info("Processing CMS_2013_I1208923") for i in range(1,6) : mergeByPt ("/CMS_2013_I1208923/d01-x01-y0%s" % i, "7000") mergeByMass("/CMS_2013_I1208923/d02-x01-y0%s" % i, "7000", 1.) logging.info("Processing CMS_2014_I1298810") for i in range(1,19) : if(i<10) : mergeByPt("/CMS_2014_I1298810/d0"+str(i)+"-x01-y01", "7000") else : mergeByPt("/CMS_2014_I1298810/d"+str(i)+"-x01-y01", "7000") logging.info("Processing CMS_2014_I1305624") for x in range(1,6) : useOnePt( "/CMS_2014_I1305624/d01-x%02d-y01" % x, "7000", "110" ) useOnePt( "/CMS_2014_I1305624/d01-x%02d-y02" % x, "7000", "110" ) useOnePt( "/CMS_2014_I1305624/d01-x%02d-y03" % x, "7000", "260" ) useOnePt( "/CMS_2014_I1305624/d01-x%02d-y04" % x, "7000", "260" ) useOnePt( "/CMS_2014_I1305624/d01-x%02d-y05" % x, "7000", "400" ) logging.info("Processing ATLAS_2011_I929691") for x in range(0,3) : useOnePt( "/ATLAS_2011_I929691/d%02d-x01-y01" % (10*x+ 1), "7000", "20" ) useOnePt( "/ATLAS_2011_I929691/d%02d-x01-y01" % (10*x+ 2), "7000", "40" ) useOnePt( "/ATLAS_2011_I929691/d%02d-x01-y01" % (10*x+ 3), "7000", "40" ) useOnePt( "/ATLAS_2011_I929691/d%02d-x01-y01" % (10*x+ 4), "7000", "80" ) useOnePt( "/ATLAS_2011_I929691/d%02d-x01-y01" % (10*x+ 5), "7000", "110" ) useOnePt( "/ATLAS_2011_I929691/d%02d-x01-y01" % (10*x+ 6), "7000", "110" ) useOnePt( "/ATLAS_2011_I929691/d%02d-x01-y01" % (10*x+ 7), "7000", "210" ) useOnePt( "/ATLAS_2011_I929691/d%02d-x01-y01" % (10*x+ 8), "7000", "260" ) useOnePt( "/ATLAS_2011_I929691/d%02d-x01-y01" % (10*x+ 9), "7000", "260" ) useOnePt( "/ATLAS_2011_I929691/d%02d-x01-y01" % (10*x+10), "7000", "400" ) logging.info("Processing ATLAS_2015_I1393758") for i in range(1,13) : mergeByPt("/ATLAS_2015_I1393758/d%02d-x01-y01" % i, "8000") logging.info("Processing CMS_2016_I1459051") for i in range(1,15) : mergeByPt("/CMS_2016_I1459051/d%02d-x01-y01" % i, "13000") logging.info("Processing ATLAS_2016_CONF_2016_092") for i in range(1,7) : mergeByPt("/ATLAS_2016_CONF_2016_092/d%02d-x01-y01" % i, "13000") logging.info("Processing ATLAS_2017_I1609253") useOnePt( "/ATLAS_2017_I1609253/d01-x01-y01", "8000", "260" ) useOnePt( "/ATLAS_2017_I1609253/d02-x01-y01", "8000", "260" ) useOnePt( "/ATLAS_2017_I1609253/d03-x01-y01", "8000", "260" ) useOnePt( "/ATLAS_2017_I1609253/d04-x01-y01", "8000", "260" ) useOnePt( "/ATLAS_2017_I1609253/d05-x01-y01", "8000", "400" ) useOnePt( "/ATLAS_2017_I1609253/d06-x01-y01", "8000", "400" ) useOnePt( "/ATLAS_2017_I1609253/d07-x01-y01", "8000", "400" ) useOnePt( "/ATLAS_2017_I1609253/d08-x01-y01", "8000", "400" ) useOnePt( "/ATLAS_2017_I1609253/d09-x01-y01", "8000", "400" ) useOnePt( "/ATLAS_2017_I1609253/d10-x01-y01", "8000", "400" ) useOnePt( "/ATLAS_2017_I1609253/d11-x01-y01", "8000", "600" ) useOnePt( "/ATLAS_2017_I1609253/d12-x01-y01", "8000", "600" ) logging.info("Processing CMS_2016_I1487277") mergeByPt("/CMS_2016_I1487277/d01-x01-y01", "8000") mergeByPt("/CMS_2016_I1487277/d02-x01-y01", "8000") mergeByPt("/CMS_2016_I1487277/d03-x01-y01", "8000") mergeByPt("/CMS_2016_I1487277/d04-x01-y01", "8000") mergeByPt("/CMS_2016_I1487277/d05-x01-y01", "8000") mergeByPt("/CMS_2016_I1487277/d06-x01-y01", "8000") mergeByPt("/CMS_2016_I1487277/d07-x01-y01", "8000") logging.info("Processing CMS_2016_I1421646") useOnePt( "/CMS_2016_I1421646/d01-x01-y01", "8000", "210" ) useOnePt( "/CMS_2016_I1421646/d02-x01-y01", "8000", "260" ) useOnePt( "/CMS_2016_I1421646/d03-x01-y01", "8000", "400" ) useOnePt( "/CMS_2016_I1421646/d04-x01-y01", "8000", "400" ) useOnePt( "/CMS_2016_I1421646/d05-x01-y01", "8000", "600" ) useOnePt( "/CMS_2016_I1421646/d06-x01-y01", "8000", "900" ) useOnePt( "/CMS_2016_I1421646/d07-x01-y01", "8000", "900" ) logging.info("Processing CMS_2017_I1605749") for i in [1,2,3,4,5,6,7,8,9,10,13,16] : useOnePt("/CMS_2017_I1605749/d%02d-x01-y01" % i, "8000", "400" ) for i in [11,14,17]: useOnePt("/CMS_2017_I1605749/d%02d-x01-y01" % i, "8000", "600" ) for i in [12,15,18]: useOnePt("/CMS_2017_I1605749/d%02d-x01-y01" % i, "8000", "900" ) def CMS_2012_I1111014_name(i,j) : if(i+j<100) : return "/CMS_2012_I1111014/d%02d-x01-y01" % (i+j) else : return "/CMS_2012_I1111014/d%03d-x01-y01" % (i+j) logging.info("Processing CMS_2012_I1111014") for j in [0,22,44,66,87,106]: for i in [1,2,3] : useOnePt(CMS_2012_I1111014_name(i,j), "7000", "20" ) for i in [4,5,6,7]: useOnePt(CMS_2012_I1111014_name(i,j), "7000", "40" ) for i in [8,9,10]: useOnePt(CMS_2012_I1111014_name(i,j), "7000", "80" ) for i in [11,12,13,14,15,16]: useOnePt(CMS_2012_I1111014_name(i,j), "7000", "110" ) for i in [17,18]: useOnePt(CMS_2012_I1111014_name(i,j), "7000", "210" ) useOnePt(CMS_2012_I1111014_name(19,j), "7000", "260" ) if(j<87) : for i in [20,21]: useOnePt(CMS_2012_I1111014_name(i,j), "7000", "400" ) if(j<66) : useOnePt(CMS_2012_I1111014_name(22,j), "7000", "600" ) for i in [126,127,128] : for j in [1,2] : mergeByPt("/CMS_2012_I1111014/d%03d-x01-y%02d" % (i,j), "7000") logging.info("Processing CMS_2018_I1682495") for i in [0,1,2,3] : useOnePt("/CMS_2018_I1682495/d%02d-x01-y01" % (12*i+ 1), "13000", "110" ) useOnePt("/CMS_2018_I1682495/d%02d-x01-y01" % (12*i+ 2), "13000", "260" ) useOnePt("/CMS_2018_I1682495/d%02d-x01-y01" % (12*i+ 3), "13000", "260" ) useOnePt("/CMS_2018_I1682495/d%02d-x01-y01" % (12*i+ 4), "13000", "400" ) useOnePt("/CMS_2018_I1682495/d%02d-x01-y01" % (12*i+ 5), "13000", "400" ) useOnePt("/CMS_2018_I1682495/d%02d-x01-y01" % (12*i+ 6), "13000", "600" ) useOnePt("/CMS_2018_I1682495/d%02d-x01-y01" % (12*i+ 7), "13000", "600" ) useOnePt("/CMS_2018_I1682495/d%02d-x01-y01" % (12*i+ 8), "13000", "900" ) useOnePt("/CMS_2018_I1682495/d%02d-x01-y01" % (12*i+ 9), "13000", "900" ) useOnePt("/CMS_2018_I1682495/d%02d-x01-y01" % (12*i+10), "13000", "900" ) useOnePt("/CMS_2018_I1682495/d%02d-x01-y01" % (12*i+11), "13000", "900" ) useOnePt("/CMS_2018_I1682495/d%02d-x01-y01" % (12*i+12), "13000", "900" ) logging.info("Processing CMS_2015_I1385107") for i in range(1,9) : mergeByPt("/CMS_2015_I1385107/d%02d-x01-y01" % i, "2760") logging.info("Processing CMS_2018_I1663452") useOneMass("/CMS_2018_I1663452/d01-x01-y01", "13000", "5900" ) useOneMass("/CMS_2018_I1663452/d02-x01-y01", "13000", "4900" ) useOneMass("/CMS_2018_I1663452/d03-x01-y01", "13000", "3900" ) useOneMass("/CMS_2018_I1663452/d04-x01-y01", "13000", "3900" ) useOneMass("/CMS_2018_I1663452/d05-x01-y01", "13000", "2800" ) useOneMass("/CMS_2018_I1663452/d06-x01-y01", "13000", "2800" ) useOneMass("/CMS_2018_I1663452/d07-x01-y01", "13000", "2200" ) logging.info("Processing CMS_2017_I1519995") useOneMass("/CMS_2017_I1519995/d01-x01-y01", "13000", "3900" ) useOneMass("/CMS_2017_I1519995/d02-x01-y01", "13000", "3900" ) useOneMass("/CMS_2017_I1519995/d03-x01-y01", "13000", "2800" ) useOneMass("/CMS_2017_I1519995/d04-x01-y01", "13000", "2800" ) useOneMass("/CMS_2017_I1519995/d05-x01-y01", "13000", "2200" ) useOneMass("/CMS_2017_I1519995/d06-x01-y01", "13000", "1600" ) logging.info("Processing CMS_2016_I1486238") for i in [1,5,9,10,12,13,14,16,17] : useOnePt("/CMS_2016_I1486238/d%02d-x01-y01" % i, "7000", "20" ) mergeByPt("/CMS_2016_I1486238/d11-x01-y01", "7000") mergeByPt("/CMS_2016_I1486238/d15-x01-y01", "7000") logging.info("Processing ATLAS_2018_I1634970") for i in range(1,7) : mergeByPt("/ATLAS_2018_I1634970/d%02d-x01-y01"%i, "13000") for i in range(7,13) : mergeByMass("/ATLAS_2018_I1634970/d%02d-x01-y01"%i, "13000", 1.) logging.info("Processing ATLAS_2017_I1604271") for i in range(1,13) : mergeByPt("/ATLAS_2017_I1604271/d%02d-x01-y01" % i, "8000") logging.info("Processing CMS_2017_I1598460") for i in range(1,7) : mergeByPt("/CMS_2017_I1598460/d%02d-x01-y01" % i, "8000") logging.info("Processing ATLAS_2019_I1724098") for i in range(1,45) : if(i<=6 or (i>=23 and i<=28)) : useOnePt("/ATLAS_2019_I1724098/d%02d-x01-y01" % i, "13000", "400") else : useOnePt("/ATLAS_2019_I1724098/d%02d-x01-y01" % i, "13000", "0") # rescaling for semi-leptonic top decays (we only simulate 1 charge combination) for i in range(96,116,2) : rescale("/ATLAS_2018_I1656578/d%s-x01-y01" % i,2.) for i in range(15,29,2) : rescale("/ATLAS_2017_I1614149/d%s-x01-y01" % i,2.) for i in range(1,23,2) : rescale("/ATLAS_2015_I1404878/d%02d-x01-y01" % i,2.) rescale("/ATLAS_2015_I1397637/d01-x01-y01",2.) for i in range(1,22,1) : rescale("/ATLAS_2015_I1345452/d%02d-x01-y01" % i,2.) for i in range(1,10,1) : rescale("/ATLAS_2014_I1304688/d%02d-x01-y01" % i,2.) for i in range(1,82) : rescale("/CMS_2018_I1663958/d%02d-x01-y01" % i,2.) for i in range(169,173,1) : rescale("/CMS_2018_I1663958/d%02d-x01-y01" % i,2.) for i in range(8,15) : rescale("/CMS_2018_I1662081/d%02d-x01-y01" % i,2.) for i in range(1,41) : rescale("/CMS_2016_I1491950/d%02d-x02-y01" % i,2.) for i in range(1,13) : rescale("/CMS_2016_I1454211/d%02d-x01-y01" % i,2.) rescale("/CMS_2017_I1518399/d01-x01-y01",2.) # Choose output file name = args[0]+"-Jets.yoda" yoda.writeYODA(outhistos,name) sys.exit(0) diff --git a/Tests/python/merge-LHC-Photon b/Tests/python/merge-LHC-Photon --- a/Tests/python/merge-LHC-Photon +++ b/Tests/python/merge-LHC-Photon @@ -1,302 +1,301 @@ #! /usr/bin/env python -import logging -import sys -import os, yoda +from __future__ import print_function +import logging, sys, os, yoda """%prog Script for merging aida files """ def fillAbove(scale,desthisto, sourcehistosbyptmin): pthigh= 1e100 ptlow =-1e100 - for pt, h in sorted(sourcehistosbyptmin.iteritems(),reverse=True): + for pt, h in sorted(sourcehistosbyptmin.items(),reverse=True): ptlow=pt if(type(desthisto)==yoda.core.Scatter2D) : for i in range(0,h.numPoints) : xMin = h.points[i].x-h.points[i].xErrs.minus if( xMin*scale >= ptlow and xMin*scale < pthigh ) : desthisto.addPoint(h.points[i]) elif(type(desthisto)==yoda.core.Profile1D) : for i in range(0,h.numBins()) : if(h.bins()[i].xMin()*scale >= ptlow and h.bins()[i].xMin()*scale < pthigh ) : desthisto.bins()[i] += h.bins()[i] elif(type(desthisto)==yoda.core.Histo1D) : for i in range(0,h.numBins()) : if(h.bins()[i].xMin()*scale >= ptlow and h.bins()[i].xMin()*scale < pthigh ) : desthisto.bins()[i] += h.bins()[i] else : logging.error("Can't merge %s, unknown type" % desthisto.path()) sys.exit(1) pthigh=pt def mergeByPt(hpath, scale=1.): global inhistos global outhistos try: fillAbove(scale,outhistos[hpath], inhistos[hpath]) except: pass def useOnePt(hpath, ptmin): global inhistos global outhistos try: ## Find best pT_min match ptmins = inhistos[hpath].keys() closest_ptmin = None for ptm in ptmins: if closest_ptmin is None or \ abs(ptm-float(ptmin)) < abs(closest_ptmin-float(ptmin)): closest_ptmin = ptm if closest_ptmin != float(ptmin): logging.warning("Inexact match for requested pTmin=%s: " % ptmin + \ "using pTmin=%e instead" % closest_ptmin) outhistos[hpath] = inhistos[hpath][closest_ptmin] except: pass if sys.version_info[:3] < (2,4,0): - print "rivet scripts require Python version >= 2.4.0... exiting" + print ("rivet scripts require Python version >= 2.4.0... exiting") sys.exit(1) if __name__ == "__main__": import logging from optparse import OptionParser, OptionGroup parser = OptionParser(usage="%prog base") verbgroup = OptionGroup(parser, "Verbosity control") verbgroup.add_option("-v", "--verbose", action="store_const", const=logging.DEBUG, dest="LOGLEVEL", default=logging.INFO, help="print debug (very verbose) messages") verbgroup.add_option("-q", "--quiet", action="store_const", const=logging.WARNING, dest="LOGLEVEL", default=logging.INFO, help="be very quiet") parser.add_option_group(verbgroup) (opts, args) = parser.parse_args() logging.basicConfig(level=opts.LOGLEVEL, format="%(message)s") ## Check args if len(args) < 1: logging.error("Must specify at least the name of the files") sys.exit(1) files=["-7-DiPhoton-GammaGamma.yoda","-7-DiPhoton-GammaJet.yoda","-GammaGamma-7.yoda", "-8-DiPhoton-GammaGamma.yoda","-8-DiPhoton-GammaJet.yoda"] for i in [7,8,13] : for j in range(1,5) : files.append("-%s-PromptPhoton-%s.yoda" % (i,j)) ## Get histos inhistos = {} outhistos={} for f in files: file='Rivet-'+args[0]+f if not os.access(file, os.R_OK): logging.error("%s can not be read" % file) continue try: aos = yoda.read(file) except: logging.error("%s can not be parsed as XML" % file) continue if(file.find("PromptPhoton")>=0) : if(file.find("PromptPhoton-1")>0) : ptmin=0. elif(file.find("PromptPhoton-2")>0) : ptmin=35. elif(file.find("PromptPhoton-3")>0) : ptmin=90. elif(file.find("PromptPhoton-4")>0) : ptmin=170. ## Get histos from this YODA file - for aopath, ao in aos.iteritems() : + for aopath, ao in aos.items() : if("RAW" in aopath) :continue - if not inhistos.has_key(aopath): + if aopath not in inhistos: inhistos[aopath] = {} if (aopath.find("CMS_2013_I1258128")>0) : if(aopath.find("d05")>0 or aopath.find("d06")>0 or aopath.find("d07")>0 or aopath.find("d08")>0) : inhistos[aopath][ptmin] = ao else : inhistos[aopath][ptmin] = ao else : ## Get histos from this YODA file - for aopath, ao in aos.iteritems() : + for aopath, ao in aos.items() : if("RAW" in aopath) :continue if(aopath.find("XSEC")>=0 or aopath.find("EVTCOUNT")>=0) : continue if ( aopath in outhistos ) : aotype = type(ao) if aotype in (yoda.Counter, yoda.Histo1D, yoda.Histo2D, yoda.Profile1D, yoda.Profile2D): outhistos[aopath] += ao else : quit() else: outhistos[aopath] = ao -for hpath,hsets in inhistos.iteritems(): +for hpath,hsets in inhistos.items(): if( hpath.find("1263495")>0 or hpath.find("1093738")>0 or hpath.find("921594" )>0 or hpath.find("8914702")>0 or hpath.find("1244522")>0 or hpath.find("1457605")>0 or hpath.find("1632756")>0 or hpath.find("1266056")>0 or hpath.find("1645627")>0) : title="" path="" - histo = hsets.values()[0] + histo = list(hsets.values())[0] if hasattr(histo, 'title'): title=histo.title() if hasattr(histo, 'path'): path=histo.path() if(type(histo)==yoda.core.Scatter2D) : outhistos[hpath] = yoda.core.Scatter2D(path,title) elif(type(histo)==yoda.core.Profile1D) : outhistos[hpath] = yoda.core.Profile1D(path,title) for i in range(0,histo.numBins()) : outhistos[hpath].addBin(histo.bins()[i].xMin(), histo.bins()[i].xMax()) elif(type(histo)==yoda.core.Histo1D) : outhistos[hpath] = yoda.core.Histo1D(path,title) for i in range(0,histo.numBins()) : outhistos[hpath].addBin(histo.bins()[i].xMin(), histo.bins()[i].xMax()) else : logging.error("Histogram %s is of unknown type" % hpath) - print hpath,type(histo) + print (hpath,type(histo)) sys.exit(1) logging.info("Processing ATLAS_2013_I1263495") mergeByPt("/ATLAS_2013_I1263495/d01-x01-y01") mergeByPt("/ATLAS_2013_I1263495/d02-x01-y01") useOnePt("/ATLAS_2013_I1263495/d03-x01-y01", "90" ) logging.info("Processing ATLAS_2012_I1093738") mergeByPt("/ATLAS_2012_I1093738/d01-x01-y01") mergeByPt("/ATLAS_2012_I1093738/d02-x01-y01") mergeByPt("/ATLAS_2012_I1093738/d03-x01-y01") mergeByPt("/ATLAS_2012_I1093738/d04-x01-y01") mergeByPt("/ATLAS_2012_I1093738/d05-x01-y01") mergeByPt("/ATLAS_2012_I1093738/d06-x01-y01") logging.info("Processing ATLAS_2011_I921594") mergeByPt("/ATLAS_2011_I921594/d01-x01-y01") mergeByPt("/ATLAS_2011_I921594/d01-x01-y02") mergeByPt("/ATLAS_2011_I921594/d01-x01-y04") mergeByPt("/ATLAS_2011_I921594/d01-x01-y05") logging.info("Processing ATLAS_2010_S8914702") mergeByPt("/ATLAS_2010_S8914702/d01-x01-y01") mergeByPt("/ATLAS_2010_S8914702/d01-x01-y02") mergeByPt("/ATLAS_2010_S8914702/d01-x01-y03") logging.info("Processing CMS_2013_I1258128") useOnePt("/CMS_2013_I1258128/d05-x01-y01", "35" ) useOnePt("/CMS_2013_I1258128/d06-x01-y01", "35" ) useOnePt("/CMS_2013_I1258128/d07-x01-y01", "35" ) useOnePt("/CMS_2013_I1258128/d08-x01-y01", "35" ) logging.info("Processing ATLAS_2013_I1244522") mergeByPt("/ATLAS_2013_I1244522/d01-x01-y01") mergeByPt("/ATLAS_2013_I1244522/d02-x01-y01") useOnePt("/ATLAS_2013_I1244522/d03-x01-y01", "35" ) useOnePt("/ATLAS_2013_I1244522/d04-x01-y01", "35" ) useOnePt("/ATLAS_2013_I1244522/d05-x01-y01", "35" ) useOnePt("/ATLAS_2013_I1244522/d06-x01-y01", "35" ) useOnePt("/ATLAS_2013_I1244522/d07-x01-y01", "35" ) logging.info("Processing ATLAS_2016_I1457605") mergeByPt("/ATLAS_2016_I1457605/d01-x01-y01") mergeByPt("/ATLAS_2016_I1457605/d02-x01-y01") mergeByPt("/ATLAS_2016_I1457605/d03-x01-y01") mergeByPt("/ATLAS_2016_I1457605/d04-x01-y01") logging.info("Processing ATLAS_2017_I1632756") mergeByPt("/ATLAS_2017_I1632756/d02-x01-y01") mergeByPt("/ATLAS_2017_I1632756/d03-x01-y01") mergeByPt("/ATLAS_2017_I1632756/d04-x01-y01") mergeByPt("/ATLAS_2017_I1632756/d05-x01-y01") logging.info("Processing CMS_2014_I1266056") mergeByPt("/CMS_2014_I1266056/d01-x01-y01") mergeByPt("/CMS_2014_I1266056/d01-x01-y02") mergeByPt("/CMS_2014_I1266056/d02-x01-y01") mergeByPt("/CMS_2014_I1266056/d02-x01-y02") mergeByPt("/CMS_2014_I1266056/d03-x01-y01") mergeByPt("/CMS_2014_I1266056/d03-x01-y02") mergeByPt("/CMS_2014_I1266056/d04-x01-y01") mergeByPt("/CMS_2014_I1266056/d04-x01-y02") logging.info("Processing ATLAS_2017_I1645627") mergeByPt("/ATLAS_2017_I1645627/d01-x01-y01") mergeByPt("/ATLAS_2017_I1645627/d02-x01-y01") useOnePt("/ATLAS_2017_I1645627/d03-x01-y01","90") useOnePt("/ATLAS_2017_I1645627/d04-x01-y01","90") useOnePt("/ATLAS_2017_I1645627/d05-x01-y01","90") logging.info("Processing /MC_PHOTONJETS") useOnePt("/MC_PHOTONJETS/jet_HT","0") useOnePt("/MC_PHOTONJETS/jet_eta_1","0") useOnePt("/MC_PHOTONJETS/jet_eta_2","0") useOnePt("/MC_PHOTONJETS/jet_eta_3","0") useOnePt("/MC_PHOTONJETS/jet_eta_4","0") useOnePt("/MC_PHOTONJETS/jet_eta_pmratio_1","0") useOnePt("/MC_PHOTONJETS/jet_eta_pmratio_2","0") useOnePt("/MC_PHOTONJETS/jet_eta_pmratio_3","0") useOnePt("/MC_PHOTONJETS/jet_eta_pmratio_4","0") useOnePt("/MC_PHOTONJETS/jet_mass_1","0") useOnePt("/MC_PHOTONJETS/jet_mass_2","0") useOnePt("/MC_PHOTONJETS/jet_mass_3","0") useOnePt("/MC_PHOTONJETS/jet_mass_4","0") useOnePt("/MC_PHOTONJETS/jet_multi_exclusive","0") useOnePt("/MC_PHOTONJETS/jet_multi_inclusive","0") useOnePt("/MC_PHOTONJETS/jet_multi_ratio","0") useOnePt("/MC_PHOTONJETS/jet_pT_1","0") useOnePt("/MC_PHOTONJETS/jet_pT_2","0") useOnePt("/MC_PHOTONJETS/jet_pT_3","0") useOnePt("/MC_PHOTONJETS/jet_pT_4","0") useOnePt("/MC_PHOTONJETS/jet_y_1","0") useOnePt("/MC_PHOTONJETS/jet_y_2","0") useOnePt("/MC_PHOTONJETS/jet_y_3","0") useOnePt("/MC_PHOTONJETS/jet_y_4","0") useOnePt("/MC_PHOTONJETS/jet_y_pmratio_1","0") useOnePt("/MC_PHOTONJETS/jet_y_pmratio_2","0") useOnePt("/MC_PHOTONJETS/jet_y_pmratio_3","0") useOnePt("/MC_PHOTONJETS/jet_y_pmratio_4","0") useOnePt("/MC_PHOTONJETS/jets_dR_12","0") useOnePt("/MC_PHOTONJETS/jets_dR_13","0") useOnePt("/MC_PHOTONJETS/jets_dR_23","0") useOnePt("/MC_PHOTONJETS/jets_deta_12","0") useOnePt("/MC_PHOTONJETS/jets_deta_13","0") useOnePt("/MC_PHOTONJETS/jets_deta_23","0") useOnePt("/MC_PHOTONJETS/jets_dphi_12","0") useOnePt("/MC_PHOTONJETS/jets_dphi_13","0") useOnePt("/MC_PHOTONJETS/jets_dphi_23","0") useOnePt("/MC_PHOTONJETS/photon_jet1_dR","0") useOnePt("/MC_PHOTONJETS/photon_jet1_deta","0") useOnePt("/MC_PHOTONJETS/photon_jet1_dphi","0") useOnePt("/MC_PHOTONJETUE/gammajet-dR","0") useOnePt("/MC_PHOTONJETUE/gammajet-dphi","0") useOnePt("/MC_PHOTONJETUE/trans-maxnchg-gamma","0") useOnePt("/MC_PHOTONJETUE/trans-maxnchg-jet","0") useOnePt("/MC_PHOTONJETUE/trans-maxptsum-gamma","0") useOnePt("/MC_PHOTONJETUE/trans-maxptsum-jet","0") useOnePt("/MC_PHOTONJETUE/trans-minnchg-gamma","0") useOnePt("/MC_PHOTONJETUE/trans-minnchg-jet","0") useOnePt("/MC_PHOTONJETUE/trans-minptsum-gamma","0") useOnePt("/MC_PHOTONJETUE/trans-minptsum-jet","0") useOnePt("/MC_PHOTONJETUE/trans-nchg-gamma","0") useOnePt("/MC_PHOTONJETUE/trans-nchg-jet","0") useOnePt("/MC_PHOTONJETUE/trans-ptavg-gamma","0") useOnePt("/MC_PHOTONJETUE/trans-ptavg-jet","0") useOnePt("/MC_PHOTONJETUE/trans-ptsum-gamma","0") useOnePt("/MC_PHOTONJETUE/trans-ptsum-jet","0") # Choose output file name = args[0]+"-Photon.yoda" yoda.writeYODA(outhistos,name) sys.exit(0) diff --git a/Tests/python/merge-SppS b/Tests/python/merge-SppS --- a/Tests/python/merge-SppS +++ b/Tests/python/merge-SppS @@ -1,176 +1,174 @@ #! /usr/bin/env python -# import lighthisto -import logging -import sys -import math +from __future__ import print_function +import logging, sys, math if sys.version_info[:3] < (2,4,0): - print "rivet scripts require Python version >= 2.4.0... exiting" + print ("rivet scripts require Python version >= 2.4.0... exiting") sys.exit(1) import os, yoda, copy # # ############################################# def useOne(hpath, sqrts): global inhistos global outhistos try: outhistos[hpath] = inhistos[hpath][float(sqrts)] except: pass if __name__ == "__main__": import logging from optparse import OptionParser, OptionGroup parser = OptionParser(usage="%prog name") verbgroup = OptionGroup(parser, "Verbosity control") verbgroup.add_option("-v", "--verbose", action="store_const", const=logging.DEBUG, dest="LOGLEVEL", default=logging.INFO, help="print debug (very verbose) messages") verbgroup.add_option("-q", "--quiet", action="store_const", const=logging.WARNING, dest="LOGLEVEL", default=logging.INFO, help="be very quiet") parser.add_option_group(verbgroup) (opts, args) = parser.parse_args() logging.basicConfig(level=opts.LOGLEVEL, format="%(message)s") ## Check args if len(args) < 1: logging.error("Must specify at least the name of the files") sys.exit(1) ####################################### name=args[0].replace("SppS","") yodafiles=["ISR%s-44-UE.yoda" %name, "ISR%s-62-UE.yoda" %name, "SppS%s-63-UE.yoda" %name, "ISR%s-30-UE.yoda" %name, "ISR%s-53-UE.yoda" %name, "SppS%s-200-UE.yoda"%name, "SppS%s-500-UE.yoda"%name, "SppS%s-900-UE.yoda"%name, "SppS%s-546-UE.yoda"%name, "SppS%s-53-UE.yoda" %name, "EHS%s-UE.yoda" %name] ## Get histos inhistos = {} outhistos={} for fname in yodafiles: file = 'Rivet-'+fname if(file.find("44")>0) : sqrts=44 elif(file.find("63")>0) : sqrts=63 elif(file.find("30")>0) : sqrts=30 elif(file.find("53")>0) : sqrts=53 elif(file.find("200")>0) : sqrts=200 elif(file.find("500")>0) : sqrts=500 elif(file.find("900")>0) : sqrts=900 elif(file.find("546")>0) : sqrts=546 elif(file.find("53")>0) : sqrts=53 elif(file.find("EHS")>0) : sqrts=math.sqrt(2.*.938*250.) if not os.access(file, os.R_OK): logging.error("%s can not be read" % file) continue try: aos = yoda.read(file) except: logging.error("%s can not be parsed as yoda" % file) continue ## Get histos from this YODA file - for aopath, ao in aos.iteritems() : + for aopath, ao in aos.items() : if("RAW" in aopath) :continue if(aopath.find("1926373")>0 or aopath.find("1867512")>0 or aopath.find("1583476")>0 or aopath.find("2044935")>0 or aopath.find("1178091")>0 ) : - if not inhistos.has_key(aopath): + if aopath not in inhistos: inhistos[aopath] = {} - if not inhistos[aopath].has_key(sqrts): + if sqrts not in inhistos: inhistos[aopath][sqrts] = ao else: raise Exception("A set with sqrts = %s already exists" % ( sqrts)) else : outhistos[aopath] = ao # UA5_1989_S1926373 useOne("/UA5_1989_S1926373/d01-x01-y01","200") useOne("/UA5_1989_S1926373/d02-x01-y01","900") useOne("/UA5_1989_S1926373/d03-x01-y01","200") useOne("/UA5_1989_S1926373/d04-x01-y01","200") useOne("/UA5_1989_S1926373/d05-x01-y01","200") useOne("/UA5_1989_S1926373/d06-x01-y01","200") useOne("/UA5_1989_S1926373/d07-x01-y01","900") useOne("/UA5_1989_S1926373/d08-x01-y01","900") useOne("/UA5_1989_S1926373/d09-x01-y01","900") useOne("/UA5_1989_S1926373/d10-x01-y01","900") useOne("/UA5_1989_S1926373/d11-x01-y01","200") useOne("/UA5_1989_S1926373/d12-x01-y01","900") # UA5_1988_S1867512 useOne("/UA5_1988_S1867512/d02-x01-y01","200") useOne("/UA5_1988_S1867512/d02-x01-y02","546") useOne("/UA5_1988_S1867512/d02-x01-y03","900") useOne("/UA5_1988_S1867512/d03-x01-y01","200") useOne("/UA5_1988_S1867512/d03-x01-y02","546") useOne("/UA5_1988_S1867512/d03-x01-y03","900") # UA5_1986_S1583476 useOne("/UA5_1986_S1583476/d01-x01-y01","200") useOne("/UA5_1986_S1583476/d01-x01-y02","200") useOne("/UA5_1986_S1583476/d01-x01-y03","900") useOne("/UA5_1986_S1583476/d01-x01-y04","900") useOne("/UA5_1986_S1583476/d02-x01-y01","200") useOne("/UA5_1986_S1583476/d02-x01-y02","200") useOne("/UA5_1986_S1583476/d02-x01-y03","200") useOne("/UA5_1986_S1583476/d02-x01-y04","200") useOne("/UA5_1986_S1583476/d02-x01-y05","200") useOne("/UA5_1986_S1583476/d02-x01-y06","200") useOne("/UA5_1986_S1583476/d03-x01-y01","900") useOne("/UA5_1986_S1583476/d03-x01-y02","900") useOne("/UA5_1986_S1583476/d03-x01-y03","900") useOne("/UA5_1986_S1583476/d03-x01-y04","900") useOne("/UA5_1986_S1583476/d03-x01-y05","900") useOne("/UA5_1986_S1583476/d03-x01-y06","900") useOne("/UA5_1986_S1583476/d03-x01-y07","900") useOne("/UA5_1986_S1583476/d03-x01-y08","900") useOne("/UA5_1986_S1583476/d03-x01-y09","900") # UA1_1990_S2044935 useOne("/UA1_1990_S2044935/d01-x01-y01","200") useOne("/UA1_1990_S2044935/d01-x01-y02","500") useOne("/UA1_1990_S2044935/d01-x01-y03","900") useOne("/UA1_1990_S2044935/d02-x01-y01","200") useOne("/UA1_1990_S2044935/d02-x01-y02","500") useOne("/UA1_1990_S2044935/d02-x01-y03","900") useOne("/UA1_1990_S2044935/d03-x01-y01","900") useOne("/UA1_1990_S2044935/d04-x01-y01","900") useOne("/UA1_1990_S2044935/d05-x01-y01","900") useOne("/UA1_1990_S2044935/d06-x01-y01","200") useOne("/UA1_1990_S2044935/d07-x01-y01","900") useOne("/UA1_1990_S2044935/d08-x01-y01","63") useOne("/UA1_1990_S2044935/d09-x01-y01","200") useOne("/UA1_1990_S2044935/d10-x01-y01","500") useOne("/UA1_1990_S2044935/d11-x01-y01","900") useOne("/UA1_1990_S2044935/d12-x01-y01","200") useOne("/UA1_1990_S2044935/d12-x01-y02","500") useOne("/UA1_1990_S2044935/d12-x01-y03","900") # SFM_1984_S1178091 useOne("/SFM_1984_S1178091/d01-x01-y01","30") useOne("/SFM_1984_S1178091/d01-x01-y02","44") useOne("/SFM_1984_S1178091/d01-x01-y03","53") useOne("/SFM_1984_S1178091/d01-x01-y04","63") useOne("/SFM_1984_S1178091/d02-x01-y01","30") useOne("/SFM_1984_S1178091/d02-x01-y02","44") useOne("/SFM_1984_S1178091/d02-x01-y03","53") useOne("/SFM_1984_S1178091/d02-x01-y04","63") # Choose output file name = args[0]+".yoda" # output the yoda file yoda.writeYODA(outhistos,name) sys.exit(0) diff --git a/Tests/python/merge-Star b/Tests/python/merge-Star --- a/Tests/python/merge-Star +++ b/Tests/python/merge-Star @@ -1,171 +1,172 @@ #! /usr/bin/env python +from __future__ import print_function import logging import sys if sys.version_info[:3] < (2,4,0): - print "rivet scripts require Python version >= 2.4.0... exiting" + print ("rivet scripts require Python version >= 2.4.0... exiting") sys.exit(1) import os, yoda # ############################################# def fillAbove(desthisto, sourcehistosbyptmin): pthigh= 1e100 ptlow =-1e100 - for pt, h in sorted(sourcehistosbyptmin.iteritems(),reverse=True): + for pt, h in sorted(sourcehistosbyptmin.items(),reverse=True): ptlow=pt if(type(desthisto)==yoda.core.Scatter2D) : for i in range(0,h.numPoints()) : xMin = h.points()[i].x-h.points()[i].xErrs().minus if( xMin >= ptlow and xMin < pthigh ) : desthisto.addPoint(h.points()[i]) elif(type(desthisto)==yoda.core.Profile1D) : for i in range(0,h.numBins()) : if(h.bins()[i].xMin() >= ptlow and h.bins()[i].xMin() < pthigh ) : desthisto.bins()[i] += h.bins()[i] elif(type(desthisto)==yoda.core.Histo1D) : for i in range(0,h.numBins()) : if(h.bins()[i].xMin() >= ptlow and h.bins()[i].xMin() < pthigh ) : desthisto.bins()[i] += h.bins()[i] else : logging.error("Can't merge %s, unknown type" % desthisto.path) sys.exit(1) pthigh=pt def mergeByPt(hpath, sqrts): global inhistos global outhistos try: fillAbove(outhistos[hpath], inhistos[hpath][float(sqrts)]) except: pass def useOnePt(hpath, sqrts, ptmin): global inhistos global outhistos try: ## Find best pT_min match ptmins = inhistos[hpath][float(sqrts)].keys() closest_ptmin = None for ptm in ptmins: if closest_ptmin is None or \ abs(ptm-float(ptmin)) < abs(closest_ptmin-float(ptmin)): closest_ptmin = ptm if closest_ptmin != float(ptmin): logging.warning("Inexact match for requested pTmin=%s: " % ptmin + \ "using pTmin=%e instead" % closest_ptmin) outhistos[hpath] = inhistos[hpath][float(sqrts)][closest_ptmin] except: pass # ####################################### if __name__ == "__main__": import logging from optparse import OptionParser, OptionGroup parser = OptionParser(usage="%prog name") verbgroup = OptionGroup(parser, "Verbosity control") verbgroup.add_option("-v", "--verbose", action="store_const", const=logging.DEBUG, dest="LOGLEVEL", default=logging.INFO, help="print debug (very verbose) messages") verbgroup.add_option("-q", "--quiet", action="store_const", const=logging.WARNING, dest="LOGLEVEL", default=logging.INFO, help="be very quiet") parser.add_option_group(verbgroup) (opts, args) = parser.parse_args() logging.basicConfig(level=opts.LOGLEVEL, format="%(message)s") ## Check args if len(args) < 1: logging.error("Must specify at least the name of the files") sys.exit(1) yodafiles=["-UE.yoda","-Jets-1.yoda","-Jets-2.yoda","-Jets-3.yoda","-Jets-4.yoda"] ## Get histos inhistos = {} outhistos={} weights = {} for f in yodafiles: file='Rivet-'+args[0]+f if(file.find("-UE")>0) : sqrts=200 ptmin=0. elif(file.find("-Jets-1")>0) : sqrts=200 ptmin=2. elif(file.find("-Jets-2")>0) : sqrts=200 ptmin=5. elif(file.find("-Jets-3")>0) : sqrts=200 ptmin=26. elif(file.find("-Jets-4")>0) : sqrts=200 ptmin=15. if not os.access(file, os.R_OK): logging.error("%s can not be read" % file) continue try: aos = yoda.read(file) except: logging.error("%s can not be parsed as YODA" % file) continue ## Get histos from this YODA file - for aopath, ao in aos.iteritems() : + for aopath, ao in aos.items() : if("RAW" in aopath) :continue if(aopath.find("6870392")>0 or aopath.find("HELEN")>0) : - if not inhistos.has_key(aopath): + if aopath not in inhistos: inhistos[aopath] = {} tmpE = inhistos[aopath] - if not tmpE.has_key(sqrts): + if sqrts not in tmpE: tmpE[sqrts] = {} tmpP = tmpE[sqrts] - if not tmpP.has_key(ptmin): + if ptmin not in tmpP: tmpP[ptmin] = ao else: raise Exception("A set with ptmin = %s already exists" % ( ptmin)) else : outhistos[aopath] = ao ## Make empty output histos if needed -for hpath,hsets in inhistos.iteritems(): +for hpath,hsets in inhistos.items(): if( (hpath.find("6870392")>0 and hpath.find("d02-x01-y01" )>0 ) or hpath.find("HELEN")>0 ) : title="" path="" - histo = hsets.values()[0].values()[0] + histo = list(list(hsets.values())[0].values())[0] if hasattr(histo, 'title'): title=histo.title() if hasattr(histo, 'path'): path=histo.path() if(type(histo)==yoda.core.Scatter2D) : outhistos[hpath] = yoda.core.Scatter2D(path,title) elif(type(histo)==yoda.core.Profile1D) : outhistos[hpath] = yoda.core.Profile1D(path,title) for i in range(0,histo.numBins()) : outhistos[hpath].addBin(histo.bins()[i].xMin(), histo.bins()[i].xMax()) elif(type(histo)==yoda.core.Histo1D) : outhistos[hpath] = yoda.core.Histo1D(path,title) for i in range(0,histo.numBins()) : outhistos[hpath].addBin(histo.bins()[i].xMin(), histo.bins()[i].xMax()) else : logging.error("Histogram %s is of unknown type" % hpath) - print hpath,type(histo) + print (hpath,type(histo)) sys.exit(1) useOnePt("/STAR_2006_S6870392/d01-x01-y01","200","2") mergeByPt("/STAR_2006_S6870392/d02-x01-y01","200") mergeByPt("/STAR_2009_UE_HELEN/d01-x01-y01","200") mergeByPt("/STAR_2009_UE_HELEN/d02-x01-y01","200") mergeByPt("/STAR_2009_UE_HELEN/d03-x01-y01","200") # Choose output file name = args[0]+".yoda" yoda.writeYODA(outhistos,name) sys.exit(0) diff --git a/Tests/python/merge-TVT-EW b/Tests/python/merge-TVT-EW --- a/Tests/python/merge-TVT-EW +++ b/Tests/python/merge-TVT-EW @@ -1,74 +1,73 @@ #! /usr/bin/env python -import logging -import sys -import os, yoda +from __future__ import print_function +import logging,sys, os, yoda """%prog Script for merging yoda files """ import sys if sys.version_info[:3] < (2,4,0): - print "rivet scripts require Python version >= 2.4.0... exiting" + print ("rivet scripts require Python version >= 2.4.0... exiting") sys.exit(1) if __name__ == "__main__": import logging from optparse import OptionParser, OptionGroup parser = OptionParser(usage="%prog base") verbgroup = OptionGroup(parser, "Verbosity control") verbgroup.add_option("-v", "--verbose", action="store_const", const=logging.DEBUG, dest="LOGLEVEL", default=logging.INFO, help="print debug (very verbose) messages") verbgroup.add_option("-q", "--quiet", action="store_const", const=logging.WARNING, dest="LOGLEVEL", default=logging.INFO, help="be very quiet") parser.add_option_group(verbgroup) (opts, args) = parser.parse_args() logging.basicConfig(level=opts.LOGLEVEL, format="%(message)s") ## Check args if len(args) < 1: logging.error("Must specify at least the name of the files") sys.exit(1) yodafiles=["-Run-II-W","-Run-II-Z-e","-Run-II-Z-mu","-Run-II-Z-LowMass-mu","-Run-II-Z-HighMass-mu","-Run-I-W","-Run-I-Z","-Run-I-WZ"] ## Get histos outhistos={} for f in yodafiles: file='Rivet-'+args[0]+f+".yoda" if not os.access(file, os.R_OK): logging.error("%s can not be read" % file) continue try: aos = yoda.read(file) except: logging.error("%s can not be parsed as yoda" % file) continue ## Get histos from this YODA file - for aopath, ao in aos.iteritems() : + for aopath, ao in aos.items() : if("RAW" in aopath) :continue if(aopath.find("D0_2010_S8821313")>0) : if(aopath.find("d01")>0 and file.find("-e")>0) : outhistos[aopath] = ao elif(aopath.find("d02")>0 and file.find("-mu")>0) : outhistos[aopath] = ao elif(aopath.find("D0_2015_I1324946")>0) : if(file.find("LowMass")>0) : if(aopath.find("d03")>0 or aopath.find("d04")>0) : outhistos[aopath] = ao elif(file.find("HighMass")>0) : if(aopath.find("d05")>0 or aopath.find("d06")>0) : outhistos[aopath] = ao else: if(aopath.find("d01")>0 or aopath.find("d02")>0) : outhistos[aopath] = ao else : outhistos[aopath] = ao # output the yoda file name = args[0]+"-EW.yoda" yoda.writeYODA(outhistos,name) sys.exit(0) diff --git a/Tests/python/merge-TVT-Jets b/Tests/python/merge-TVT-Jets --- a/Tests/python/merge-TVT-Jets +++ b/Tests/python/merge-TVT-Jets @@ -1,637 +1,636 @@ #! /usr/bin/env python -import logging -import sys -import math +from __future__ import print_function +import logging, sys, math if sys.version_info[:3] < (2,4,0): - print "rivet scripts require Python version >= 2.4.0... exiting" + print ( "rivet scripts require Python version >= 2.4.0... exiting") sys.exit(1) import os, yoda # Divide two profile histograms with different nos of bins def divide(name,numer,denom) : output = yoda.Scatter2D(name,name) size = min(numer.numBins(),denom.numBins()) for i in range(0,size) : b1 = numer.bin(i) b2 = denom.bin(i) # Assemble the x value and error x = b1.xMid() exminus = x - b1.xMin() explus = b1.xMax() - x # Assemble the y value and error # numerator yupp=0. relerr_1=0. try : yupp = b1.mean() try : if b1.stdErr() != 0 : relerr_1 = b1.stdErr()/b1.mean() except: relerr_1=0. except : yupp = 0. relerr_1 =0. # denominator ylow=0. relerr_2 = 0. try : ylow = b2.mean() try : if b2.stdErr() != 0 : relerr_2 = b2.stdErr()/b2.mean() except: relerr_2=0. except : ylow = 0. relerr_2 = 0. if yupp==0. or ylow== 0. : y=0. ey=0. else : y = yupp / ylow ey = y * math.sqrt(relerr_1**2 + relerr_2**2) output.addPoint(x, y, (exminus,explus), (ey,ey)) return output def fillAbove(desthisto, sourcehistosbyptmin): pthigh= 1e100 ptlow =-1e100 - for pt, h in sorted(sourcehistosbyptmin.iteritems(),reverse=True): + for pt, h in sorted(sourcehistosbyptmin.items(),reverse=True): ptlow=pt if(type(desthisto)==yoda.core.Scatter2D) : for i in range(0,h.numPoints) : xMin = h.points[i].x-h.points[i].xErrs.minus if( xMin >= ptlow and xMin < pthigh ) : desthisto.addPoint(h.points[i]) elif(type(desthisto)==yoda.core.Profile1D) : for i in range(0,h.numBins()) : if(h.bins()[i].xMin() >= ptlow and h.bins()[i].xMin() < pthigh ) : desthisto.bins()[i] += h.bins()[i] elif(type(desthisto)==yoda.core.Histo1D) : for i in range(0,h.numBins()) : if(h.bins()[i].xMin() >= ptlow and h.bins()[i].xMin() < pthigh ) : desthisto.bins()[i] += h.bins()[i] elif(type(desthisto)==yoda.core.Counter) : desthisto += h else : logging.error("Can't merge %s, unknown type" % desthisto.path) sys.exit(1) pthigh=pt def mergeByPt(hpath, sqrts): global inhistos global outhistos try: fillAbove(outhistos[hpath], inhistos[hpath][float(sqrts)]) except: pass def useOnePt(hpath, sqrts, ptmin): global inhistos global outhistos try: ## Find best pT_min match ptmins = inhistos[hpath][float(sqrts)].keys() closest_ptmin = None for ptm in ptmins: if closest_ptmin is None or \ abs(ptm-float(ptmin)) < abs(closest_ptmin-float(ptmin)): closest_ptmin = ptm if closest_ptmin != float(ptmin): logging.warning("Inexact match for requested pTmin=%s: " % ptmin + \ "using pTmin=%e instead" % closest_ptmin) outhistos[hpath] = inhistos[hpath][float(sqrts)][closest_ptmin] except: pass # ####################################### if __name__ == "__main__": import logging from optparse import OptionParser, OptionGroup parser = OptionParser(usage="%progbase") verbgroup = OptionGroup(parser, "Verbosity control") verbgroup.add_option("-v", "--verbose", action="store_const", const=logging.DEBUG, dest="LOGLEVEL", default=logging.INFO, help="print debug (very verbose) messages") verbgroup.add_option("-q", "--quiet", action="store_const", const=logging.WARNING, dest="LOGLEVEL", default=logging.INFO, help="be very quiet") parser.add_option("--with-ue", action='store_true' , dest="ue", default=True, help="Include UE analyses") parser.add_option("--without-ue", action='store_false', dest="ue", default=True, help="Don\'t include UE analyses") parser.add_option_group(verbgroup) (opts, args) = parser.parse_args() logging.basicConfig(level=opts.LOGLEVEL, format="%(message)s") ## Check args if len(args) < 1: logging.error("Must specify at least the name of the files") sys.exit(1) yodafiles=["-Run-II-Jets-0.yoda","-Run-II-Jets-1.yoda",\ "-Run-II-Jets-2.yoda",\ "-Run-II-Jets-3.yoda","-Run-II-Jets-4.yoda","-Run-II-Jets-5.yoda",\ "-Run-II-Jets-6.yoda","-Run-II-Jets-7.yoda",\ "-Run-I-Jets-1.yoda","-Run-I-Jets-2.yoda",\ "-Run-I-Jets-3.yoda","-Run-I-Jets-4.yoda","-Run-I-Jets-5.yoda",\ "-630-Jets-1.yoda" ,"-630-Jets-2.yoda" ,\ "-630-Jets-3.yoda"] if(opts.ue) : yodafiles += ["-Run-II-UE.yoda" ,"-Run-I-UE.yoda" ,"-630-UE.yoda" ,\ "-300-Jets-1.yoda", "-900-Jets-1.yoda", "-300-UE.yoda", "-900-UE.yoda"] ## Get histos inhistos = {} outhistos={} for f in yodafiles: file='Rivet-'+args[0]+f if(file.find("Run-II-UE")>0) : sqrts=1960 ptmin=0. elif(file.find("Run-II-Jets-0")>0) : sqrts=1960 ptmin=20. elif(file.find("Run-II-Jets-1")>0) : sqrts=1960 ptmin=36. elif(file.find("Run-II-Jets-2")>0) : sqrts=1960 ptmin=55. elif(file.find("Run-II-Jets-3")>0) : sqrts=1960 ptmin=75. elif(file.find("Run-II-Jets-4")>0) : sqrts=1960 ptmin=100. elif(file.find("Run-II-Jets-5")>0) : sqrts=1960 ptmin=125. elif(file.find("Run-II-Jets-6")>0) : ptmin=175. sqrts=1960 elif(file.find("Run-II-Jets-7")>0) : sqrts=1960 ptmin=265. elif(file.find("300-UE")>0) : sqrts=300 ptmin=0. elif(file.find("300-Jets-1")>0) : sqrts=300 ptmin=6. elif(file.find("900-UE")>0) : sqrts=900 ptmin=0. elif(file.find("900-Jets-1")>0) : sqrts=900 ptmin=10. elif(file.find("630-UE")>0) : sqrts=630 ptmin=0. elif(file.find("630-Jets-1")>0) : sqrts=630 ptmin=30. elif(file.find("630-Jets-2")>0) : sqrts=630 ptmin=55. elif(file.find("630-Jets-3")>0) : sqrts=630 ptmin=90. elif(file.find("Run-I-UE")>0) : sqrts=1800 ptmin=0. elif(file.find("Run-I-Jets-1")>0) : sqrts=1800 ptmin=30. elif(file.find("Run-I-Jets-2")>0) : sqrts=1800 ptmin=55. elif(file.find("Run-I-Jets-3")>0) : sqrts=1800 ptmin=80. elif(file.find("Run-I-Jets-4")>0) : sqrts=1800 ptmin=105. elif(file.find("Run-I-Jets-5")>0) : sqrts=1800 ptmin=175. if not os.access(file, os.R_OK): logging.error("%s can not be read" % file) continue try: aos = yoda.read(file) except: logging.error("%s can not be parsed as YODA" % file) continue ## Get histos from this YODA file - for aopath, ao in aos.iteritems() : + for aopath, ao in aos.items() : if("RAW" in aopath) :continue # di-jet decorrelations # jet shapes if(aopath.find("5992206")>0 or aopath.find("6217184")>0 or aopath.find("LEADINGJETS")>0 or aopath.find("7662670")>0 or aopath.find("7057202")>0 or aopath.find("6450792")>0 or aopath.find("7828950")>0 or aopath.find("4751469")>0 or aopath.find("5839831")>0 or aopath.find("4563131")>0 or aopath.find("4517016")>0 or aopath.find("3618439")>0 or aopath.find("8591881")>0 or aopath.find("1388868")>0 or aopath.find("NOTE10874")>0 or aopath.find("398175")>0) : - if not inhistos.has_key(aopath): + if aopath not in inhistos: inhistos[aopath] = {} tmpE = inhistos[aopath] - if not tmpE.has_key(sqrts): + if sqrts not in tmpE: tmpE[sqrts] = {} tmpP = tmpE[sqrts] - if not tmpP.has_key(ptmin): + if ptmin not in tmpP: tmpP[ptmin] = ao else: raise Exception("A set with ptmin = %s already exists" % ( ptmin)) elif(aopath.find("8233977")>0 or aopath.find("NOTE_9936")>0 or aopath.find("3905616")>0 or aopath.find("3324664")>0 or aopath.find("4796047")>0 or aopath.find("1865951")>0 or aopath.find("2089246")>0 or aopath.find("3108457")>0 or aopath.find("3349578")>0 or aopath.find("3541940")>0 or aopath.find("3214044")>0 or aopath.find("2952106")>0 or aopath.find("895662")>0 ) : outhistos[aopath] = ao else : if(aopath.find("/_EVTCOUNT")>=0 or aopath.find("/_XSEC" )>=0 ) : continue - print aopath + print (aopath) quit() yodafiles=["-Run-II-Jets-8.yoda","-Run-II-Jets-9.yoda","-Run-II-Jets-10.yoda","-Run-II-Jets-11.yoda",\ "-Run-I-Jets-6.yoda","-Run-I-Jets-7.yoda","-Run-I-Jets-8.yoda"] for f in yodafiles: file='Rivet-'+args[0]+f if(file.find("Run-II-Jets-8")>0) : sqrts=1960 ptmin=0.150 elif(file.find("Run-II-Jets-9")>0) : sqrts=1960 ptmin=0.400 elif(file.find("Run-II-Jets-10")>0) : sqrts=1960 ptmin=0.600 elif(file.find("Run-II-Jets-11")>0) : sqrts=1960 ptmin=1.000 elif(file.find("Run-I-Jets-6")>0) : sqrts=1800 ptmin=0.150 elif(file.find("Run-I-Jets-7")>0) : sqrts=1800 ptmin=0.5 elif(file.find("Run-I-Jets-8")>0) : sqrts=1800 ptmin=0.8 if not os.access(file, os.R_OK): logging.error("%s can not be read" % file) continue try: aos = yoda.read(file) except: logging.error("%s can not be parsed as YODA" % file) continue ## Get histos from this yoda file - for aopath, ao in aos.iteritems() : + for aopath, ao in aos.items() : if("RAW" in aopath) :continue if(aopath.find("8566488")>0 or aopath.find("8320160")>0) : - if not inhistos.has_key(aopath): + if aopath not in inhistos: inhistos[aopath] = {} tmpE = inhistos[aopath] - if not tmpE.has_key(sqrts): + if sqrts not in tmpE: tmpE[sqrts] = {} tmpP = tmpE[sqrts] - if not tmpP.has_key(ptmin): + if ptmin not in tmpP: tmpP[ptmin] = ao else: raise Exception("A set with ptmin = %s already exists" % ( ptmin)) elif(aopath.find("8093652")>0 or aopath.find("3418421")>0 or aopath.find("4266730")>0) : - if not inhistos.has_key(aopath): + if aopath not in inhistos: inhistos[aopath] = {} tmpE = inhistos[aopath] - if not tmpE.has_key(sqrts): + if sqrts not in tmpE: tmpE[sqrts] = {} tmpP = tmpE[sqrts] - if not tmpP.has_key(1000.*ptmin): + if 1000.*ptmin not in tmpP: tmpP[1000.*ptmin] = ao else: raise Exception("A set with ptmin = %s already exists" % ( 1000.*ptmin)) ## Make empty output histos if needed -for hpath,hsets in inhistos.iteritems(): +for hpath,hsets in inhistos.items(): if( (hpath.find("6217184")>0 and hpath.find("d13-x01-y01")>0 ) or hpath.find("LEADINGJETS")>0 or hpath.find("7662670")>0 or hpath.find("7057202")>0 or hpath.find("6450792")>0 or hpath.find("7828950")>0 or hpath.find("8566488")>0 or hpath.find("8320160")>0 or hpath.find("8093652")>0 or hpath.find("4751469")>0 or hpath.find("5839831")>0 or hpath.find("4563131")>0 or hpath.find("4517016")>0 or hpath.find("3618439")>0 or hpath.find("4266730")>0 or hpath.find("3418421")>0 or hpath.find("8591881")>0 or hpath.find("1388868")>0 or hpath.find("NOTE10874")>0) : title="" path="" - histo = hsets.values()[0].values()[0] + histo = list(list(hsets.values())[0].values())[0] if hasattr(histo, 'title'): title=histo.title() if hasattr(histo, 'path'): path=histo.path() if(type(histo)==yoda.core.Counter) : outhistos[hpath] = yoda.core.Counter(path,title) elif(type(histo)==yoda.core.Scatter2D) : outhistos[hpath] = yoda.core.Scatter2D(path,title) elif(type(histo)==yoda.core.Profile1D) : outhistos[hpath] = yoda.core.Profile1D(path,title) for i in range(0,histo.numBins()) : outhistos[hpath].addBin(histo.bins()[i].xMin(), histo.bins()[i].xMax()) elif(type(histo)==yoda.core.Histo1D) : outhistos[hpath] = yoda.core.Histo1D(path,title) for i in range(0,histo.numBins()) : outhistos[hpath].addBin(histo.bins()[i].xMin(), histo.bins()[i].xMax()) else : logging.error("Histogram %s is of unknown type" % hpath) - print hpath,type(histo) + print (hpath,type(histo)) sys.exit(1) ## Field analysis logging.info("Processing CDF_2001_S4751469") ## Angular distributions in different pT bins if(opts.ue) : useOnePt("/CDF_2001_S4751469/d01-x01-y01", "1800", "0") useOnePt("/CDF_2001_S4751469/d01-x01-y02", "1800", "0") useOnePt("/CDF_2001_S4751469/d02-x01-y01", "1800", "0") useOnePt("/CDF_2001_S4751469/d02-x01-y02", "1800", "0") useOnePt("/CDF_2001_S4751469/d01-x01-y03", "1800", "30") useOnePt("/CDF_2001_S4751469/d02-x01-y03", "1800", "30") ## Number, profile in pT_lead (True?) if(opts.ue) : useOnePt("/CDF_2001_S4751469/d03-x01-y01", "1800", "0") useOnePt("/CDF_2001_S4751469/d03-x01-y02", "1800", "0") useOnePt("/CDF_2001_S4751469/d03-x01-y03", "1800", "0") useOnePt("/CDF_2001_S4751469/d04-x01-y01", "1800", "30") useOnePt("/CDF_2001_S4751469/d04-x01-y02", "1800", "30") useOnePt("/CDF_2001_S4751469/d04-x01-y03", "1800", "30") ## pT sums, profile in pT_lead (True?) if(opts.ue) : useOnePt("/CDF_2001_S4751469/d05-x01-y01", "1800", "0") useOnePt("/CDF_2001_S4751469/d05-x01-y02", "1800", "0") useOnePt("/CDF_2001_S4751469/d05-x01-y03", "1800", "0") useOnePt("/CDF_2001_S4751469/d06-x01-y01", "1800", "30") useOnePt("/CDF_2001_S4751469/d06-x01-y02", "1800", "30") useOnePt("/CDF_2001_S4751469/d06-x01-y03", "1800", "30") ## pT distributions (use a specific pT cut run) if(opts.ue) : useOnePt("/CDF_2001_S4751469/d07-x01-y01", "1800", "0") useOnePt("/CDF_2001_S4751469/d07-x01-y02", "1800", "0") useOnePt("/CDF_2001_S4751469/d07-x01-y03", "1800", "30") ## Acosta analysis logging.info("Processing CDF_2004_S5839831") ## Mean pT, profile in ET_lead mergeByPt("/CDF_2004_S5839831/d01-x01-y01", "1800") mergeByPt("/CDF_2004_S5839831/d01-x01-y02", "1800") ## pT_max,min, profiles in ET_lead mergeByPt("/CDF_2004_S5839831/d02-x01-y01", "1800") mergeByPt("/CDF_2004_S5839831/d02-x01-y02", "1800") mergeByPt("/CDF_2004_S5839831/d02-x01-y03", "1800") ## pT distributions (want to use a specific pT cut run) useOnePt("/CDF_2004_S5839831/d03-x01-y01", "1800", "30") useOnePt("/CDF_2004_S5839831/d03-x01-y02", "1800", "80") useOnePt("/CDF_2004_S5839831/d03-x01-y03", "1800", "105") useOnePt("/CDF_2004_S5839831/d03-x01-y04", "1800", "105") useOnePt("/CDF_2004_S5839831/d03-x01-y05", "1800", "175") ## N_max,min, profiles in ET_lead mergeByPt("/CDF_2004_S5839831/d04-x01-y01", "1800") mergeByPt("/CDF_2004_S5839831/d04-x01-y02", "1800") ## Min bias dbs (want to use min bias pT cut) if(opts.ue) : useOnePt("/CDF_2004_S5839831/d05-x01-y01", "1800", "0") useOnePt("/CDF_2004_S5839831/d06-x01-y01", "1800", "0") ## Swiss Cheese, profile in ET_lead mergeByPt("/CDF_2004_S5839831/d07-x01-y01", "1800") mergeByPt("/CDF_2004_S5839831/d07-x01-y02", "1800") ## pT_max,min, profiles in ET_lead mergeByPt("/CDF_2004_S5839831/d08-x01-y01", "630") mergeByPt("/CDF_2004_S5839831/d08-x01-y02", "630") mergeByPt("/CDF_2004_S5839831/d08-x01-y03", "630") ## Swiss Cheese, profile in ET_lead mergeByPt("/CDF_2004_S5839831/d09-x01-y01", "630") mergeByPt("/CDF_2004_S5839831/d09-x01-y02", "630") ## Min bias dbs (want to use min bias pT cut) if(opts.ue) : useOnePt("/CDF_2004_S5839831/d10-x01-y01", "630", "0") useOnePt("/CDF_2004_S5839831/d11-x01-y01", "630", "0") ## CDF jet shape analysis logging.info("Processing CDF_2005_S6217184") useOnePt("/CDF_2005_S6217184/d01-x01-y01", "1960", "36" ) useOnePt("/CDF_2005_S6217184/d01-x01-y02", "1960", "36" ) useOnePt("/CDF_2005_S6217184/d01-x01-y03", "1960", "55" ) useOnePt("/CDF_2005_S6217184/d02-x01-y01", "1960", "55" ) useOnePt("/CDF_2005_S6217184/d02-x01-y02", "1960", "55" ) useOnePt("/CDF_2005_S6217184/d02-x01-y03", "1960", "75" ) useOnePt("/CDF_2005_S6217184/d03-x01-y01", "1960", "75" ) useOnePt("/CDF_2005_S6217184/d03-x01-y02", "1960", "100") useOnePt("/CDF_2005_S6217184/d03-x01-y03", "1960", "100") useOnePt("/CDF_2005_S6217184/d04-x01-y01", "1960", "125") useOnePt("/CDF_2005_S6217184/d04-x01-y02", "1960", "125") useOnePt("/CDF_2005_S6217184/d04-x01-y03", "1960", "175") useOnePt("/CDF_2005_S6217184/d05-x01-y01", "1960", "175") useOnePt("/CDF_2005_S6217184/d05-x01-y02", "1960", "175") useOnePt("/CDF_2005_S6217184/d05-x01-y03", "1960", "175") useOnePt("/CDF_2005_S6217184/d06-x01-y01", "1960", "265") useOnePt("/CDF_2005_S6217184/d06-x01-y02", "1960", "265") useOnePt("/CDF_2005_S6217184/d06-x01-y03", "1960", "265") useOnePt("/CDF_2005_S6217184/d07-x01-y01", "1960", "36" ) useOnePt("/CDF_2005_S6217184/d07-x01-y02", "1960", "36" ) useOnePt("/CDF_2005_S6217184/d07-x01-y03", "1960", "55" ) useOnePt("/CDF_2005_S6217184/d08-x01-y01", "1960", "55" ) useOnePt("/CDF_2005_S6217184/d08-x01-y02", "1960", "55" ) useOnePt("/CDF_2005_S6217184/d08-x01-y03", "1960", "75" ) useOnePt("/CDF_2005_S6217184/d09-x01-y01", "1960", "75" ) useOnePt("/CDF_2005_S6217184/d09-x01-y02", "1960", "100") useOnePt("/CDF_2005_S6217184/d09-x01-y03", "1960", "100") useOnePt("/CDF_2005_S6217184/d10-x01-y01", "1960", "125") useOnePt("/CDF_2005_S6217184/d10-x01-y02", "1960", "125") useOnePt("/CDF_2005_S6217184/d10-x01-y03", "1960", "175") useOnePt("/CDF_2005_S6217184/d11-x01-y01", "1960", "175") useOnePt("/CDF_2005_S6217184/d11-x01-y02", "1960", "175") useOnePt("/CDF_2005_S6217184/d11-x01-y03", "1960", "175") useOnePt("/CDF_2005_S6217184/d12-x01-y01", "1960", "265") useOnePt("/CDF_2005_S6217184/d12-x01-y02", "1960", "265") useOnePt("/CDF_2005_S6217184/d12-x01-y03", "1960", "265") mergeByPt("/CDF_2005_S6217184/d13-x01-y01", "1960") # CDF dijet mass spectrum mergeByPt("/CDF_2008_S8093652/d01-x01-y01", "1960") # ## Rick Field Run-II Leading Jets analysis # logging.info("Processing CDF_2008_LEADINGJETS") # ## charged particle density # mergeByPt("/CDF_2008_LEADINGJETS/d01-x01-y01", "1960") # mergeByPt("/CDF_2008_LEADINGJETS/d02-x01-y01", "1960") # mergeByPt("/CDF_2008_LEADINGJETS/d03-x01-y01", "1960") # mergeByPt("/CDF_2008_LEADINGJETS/d04-x01-y01", "1960") # ## pT sum density # mergeByPt("/CDF_2008_LEADINGJETS/d05-x01-y01", "1960") # mergeByPt("/CDF_2008_LEADINGJETS/d06-x01-y01", "1960") # mergeByPt("/CDF_2008_LEADINGJETS/d07-x01-y01", "1960") # mergeByPt("/CDF_2008_LEADINGJETS/d08-x01-y01", "1960") # ## mean pT # mergeByPt("/CDF_2008_LEADINGJETS/d09-x01-y01", "1960") ## newer version logging.info("Processing CDF_2010_S8591881_QCD") mergeByPt("/CDF_2010_S8591881_QCD/d10-x01-y01", "1960") mergeByPt("/CDF_2010_S8591881_QCD/d10-x01-y02", "1960") mergeByPt("/CDF_2010_S8591881_QCD/d10-x01-y03", "1960") mergeByPt("/CDF_2010_S8591881_QCD/d11-x01-y01", "1960") mergeByPt("/CDF_2010_S8591881_QCD/d11-x01-y02", "1960") mergeByPt("/CDF_2010_S8591881_QCD/d11-x01-y03", "1960") mergeByPt("/CDF_2010_S8591881_QCD/d12-x01-y01", "1960") mergeByPt("/CDF_2010_S8591881_QCD/d12-x01-y02", "1960") mergeByPt("/CDF_2010_S8591881_QCD/d12-x01-y03", "1960") mergeByPt("/CDF_2010_S8591881_QCD/d13-x01-y01", "1960") mergeByPt("/CDF_2010_S8591881_QCD/d13-x01-y02", "1960") mergeByPt("/CDF_2010_S8591881_QCD/d13-x01-y03", "1960") mergeByPt("/CDF_2010_S8591881_QCD/d14-x01-y01", "1960") mergeByPt("/CDF_2010_S8591881_QCD/d15-x01-y01", "1960") ## D0 dijet correlation analysis logging.info("Processing D0_2004_S5992206") useOnePt("/D0_2004_S5992206/d01-x02-y01", "1960", "75") useOnePt("/D0_2004_S5992206/d02-x02-y01", "1960", "100") useOnePt("/D0_2004_S5992206/d03-x02-y01", "1960", "125") useOnePt("/D0_2004_S5992206/d04-x02-y01", "1960", "175") ## D0 incl jet cross-section analysis logging.info("Processing D0_2008_S7662670") mergeByPt("/D0_2008_S7662670/d01-x01-y01", "1960") mergeByPt("/D0_2008_S7662670/d02-x01-y01", "1960") mergeByPt("/D0_2008_S7662670/d03-x01-y01", "1960") mergeByPt("/D0_2008_S7662670/d04-x01-y01", "1960") mergeByPt("/D0_2008_S7662670/d05-x01-y01", "1960") mergeByPt("/D0_2008_S7662670/d06-x01-y01", "1960") mergeByPt("/D0_2010_S8566488/d01-x01-y01", "1960") mergeByPt("/D0_2010_S8566488/d02-x01-y01", "1960") mergeByPt("/D0_2010_S8566488/d03-x01-y01", "1960") mergeByPt("/D0_2010_S8566488/d04-x01-y01", "1960") mergeByPt("/D0_2010_S8566488/d05-x01-y01", "1960") mergeByPt("/D0_2010_S8566488/d06-x01-y01", "1960") # CDF jet cross section mergeByPt("/CDF_2001_S4563131/d01-x01-y01", "1800") mergeByPt("/CDF_2001_S4517016/d01-x01-y01", "1800") mergeByPt("/CDF_2001_S4517016/d02-x01-y01", "1800") mergeByPt("/CDF_2001_S4517016/d03-x01-y01", "1800") mergeByPt("/CDF_2001_S4517016/d04-x01-y01", "1800") useOnePt("/CDF_1998_S3618439/d01-x01-y01", "1800","105") useOnePt("/CDF_1998_S3618439/d01-x01-y02", "1800","105") mergeByPt("/CDF_2008_S7828950/d01-x01-y01", "1960") mergeByPt("/CDF_2008_S7828950/d02-x01-y01", "1960") mergeByPt("/CDF_2008_S7828950/d03-x01-y01", "1960") mergeByPt("/CDF_2008_S7828950/d04-x01-y01", "1960") mergeByPt("/CDF_2008_S7828950/d05-x01-y01", "1960") mergeByPt("/CDF_2007_S7057202/d01-x01-y01", "1960") mergeByPt("/CDF_2007_S7057202/d02-x01-y01", "1960") mergeByPt("/CDF_2007_S7057202/d03-x01-y01", "1960") mergeByPt("/CDF_2007_S7057202/d04-x01-y01", "1960") mergeByPt("/CDF_2007_S7057202/d05-x01-y01", "1960") mergeByPt("/CDF_2007_S7057202/d06-x01-y01", "1960") mergeByPt("/CDF_2007_S7057202/d07-x01-y01", "1960") mergeByPt("/CDF_2006_S6450792/d01-x01-y01", "1960") mergeByPt("/CDF_2000_S4266730/d01-x01-y01", "1800") useOnePt("/CDF_1996_S3418421/d01-x01-y01","1800","150") useOnePt("/CDF_1996_S3418421/d01-x01-y02","1800","150") useOnePt("/CDF_1996_S3418421/d01-x01-y03","1800","150") useOnePt("/CDF_1996_S3418421/d01-x01-y04","1800","500") useOnePt("/CDF_1996_S3418421/d01-x01-y05","1800","500") mergeByPt("/CDF_1996_S3418421/d02-x01-y01","1800") useOnePt("/D0_2009_S8320160/d01-x01-y01", "1960", "0.15" ) useOnePt("/D0_2009_S8320160/d02-x01-y01", "1960", "0.15" ) useOnePt("/D0_2009_S8320160/d03-x01-y01", "1960", "0.4" ) useOnePt("/D0_2009_S8320160/d04-x01-y01", "1960", "0.4" ) useOnePt("/D0_2009_S8320160/d05-x01-y01", "1960", "0.6" ) useOnePt("/D0_2009_S8320160/d06-x01-y01", "1960", "0.6" ) useOnePt("/D0_2009_S8320160/d07-x01-y01", "1960", "0.6" ) useOnePt("/D0_2009_S8320160/d08-x01-y01", "1960", "0.6" ) useOnePt("/D0_2009_S8320160/d09-x01-y01", "1960", "1.0" ) useOnePt("/D0_2009_S8320160/d10-x01-y01", "1960", "1.0" ) logging.info("Processing CDF_2015_I1388868") for d in range(1,25) : if d <=8 : energy="1960" elif d <=16 : energy = "900" else : energy = "300" useOnePt("/CDF_2015_I1388868/d%02d-x01-y01" % d , energy, "0" ) # D0 jet shape logging.info("Processing D0_1995_I398175") useOnePt("/D0_1995_I398175/d01-x01-y01", "1800", "30" ) useOnePt("/D0_1995_I398175/d02-x01-y01", "1800", "55" ) useOnePt("/D0_1995_I398175/d03-x01-y01", "1800", "105" ) useOnePt("/D0_1995_I398175/d04-x01-y01", "1800", "105" ) useOnePt("/D0_1995_I398175/d05-x01-y01", "1800", "30" ) useOnePt("/D0_1995_I398175/d06-x01-y01", "1800", "55" ) logging.info("CDF_2012_NOTE10874") mergeByPt("/CDF_2012_NOTE10874/d01-x01-y01", "300") mergeByPt("/CDF_2012_NOTE10874/d01-x01-y02", "900") mergeByPt("/CDF_2012_NOTE10874/d01-x01-y03","1960") mergeByPt("/CDF_2012_NOTE10874/d02-x01-y01", "300") mergeByPt("/CDF_2012_NOTE10874/d02-x01-y02", "900") mergeByPt("/CDF_2012_NOTE10874/d02-x01-y03","1960") mergeByPt("/CDF_2012_NOTE10874/d03-x01-y01", "300") mergeByPt("/CDF_2012_NOTE10874/d03-x01-y02", "900") mergeByPt("/CDF_2012_NOTE10874/d03-x01-y03","1960") for i in range(1,4) : names = ["/CDF_2012_NOTE10874/d0%s-x01-y01" % i, "/CDF_2012_NOTE10874/d0%s-x01-y02" % i, "/CDF_2012_NOTE10874/d0%s-x01-y03" % i] # ratio 1960/300 if names[0] in outhistos and names[2] in outhistos : outhistos["/CDF_2012_NOTE10874/d0%s-x01-y04" % i] = \ divide("/CDF_2012_NOTE10874/d0%s-x01-y04" % i,outhistos[names[2]],outhistos[names[0]]) # ratio 900/300 if names[0] in outhistos and names[1] in outhistos : outhistos["/CDF_2012_NOTE10874/d0%s-x01-y05" % i]= \ divide("/CDF_2012_NOTE10874/d0%s-x01-y05" % i,outhistos[names[1]],outhistos[names[0]]) # ratio 1960/900 if names[1] in outhistos and names[2] in outhistos : outhistos["/CDF_2012_NOTE10874/d0%s-x01-y06" % i]= \ divide("/CDF_2012_NOTE10874/d0%s-x01-y06" %i,outhistos[names[2]],outhistos[names[1]]) # Choose output file name = args[0]+"-Jets.yoda" yoda.writeYODA(outhistos,name) sys.exit(0) diff --git a/Tests/python/merge-TVT-Photon b/Tests/python/merge-TVT-Photon --- a/Tests/python/merge-TVT-Photon +++ b/Tests/python/merge-TVT-Photon @@ -1,66 +1,65 @@ #! /usr/bin/env python -import logging -import sys -import os, yoda +from __future__ import print_function +import logging, sys, os, yoda """%prog -Script for merging aida files +Script for merging yoda files """ if sys.version_info[:3] < (2,4,0): - print "rivet scripts require Python version >= 2.4.0... exiting" + print ("rivet scripts require Python version >= 2.4.0... exiting") sys.exit(1) if __name__ == "__main__": import logging from optparse import OptionParser, OptionGroup parser = OptionParser(usage="%prog base") verbgroup = OptionGroup(parser, "Verbosity control") verbgroup.add_option("-v", "--verbose", action="store_const", const=logging.DEBUG, dest="LOGLEVEL", default=logging.INFO, help="print debug (very verbose) messages") verbgroup.add_option("-q", "--quiet", action="store_const", const=logging.WARNING, dest="LOGLEVEL", default=logging.INFO, help="be very quiet") parser.add_option_group(verbgroup) (opts, args) = parser.parse_args() logging.basicConfig(level=opts.LOGLEVEL, format="%(message)s") ## Check args if len(args) < 1: logging.error("Must specify at least the name of the files") sys.exit(1) files=["-Run-II-PromptPhoton.yoda", "-Run-II-DiPhoton-GammaGamma.yoda","-Run-II-DiPhoton-GammaJet.yoda"] ## Get histos inhistos = {} outhistos={} for f in files: file='Rivet-'+args[0]+f if not os.access(file, os.R_OK): logging.error("%s can not be read" % file) continue try: aos = yoda.read(file) except: logging.error("%s can not be parsed as yoda" % file) continue ## Get histos from this YODA file - for aopath, ao in aos.iteritems() : + for aopath, ao in aos.items() : if("RAW" in aopath) :continue if(aopath.find("XSEC")>=0 or aopath.find("EVTCOUNT")>=0) : continue if ( aopath in outhistos ) : aotype = type(ao) if aotype in (yoda.Counter, yoda.Histo1D, yoda.Histo2D, yoda.Profile1D, yoda.Profile2D): outhistos[aopath] += ao else : quit() else: outhistos[aopath] = ao # Choose output file name = args[0]+"-Photon.yoda" yoda.writeYODA(outhistos,name) sys.exit(0) diff --git a/Tests/python/mergeLowEnergy.py b/Tests/python/mergeLowEnergy.py --- a/Tests/python/mergeLowEnergy.py +++ b/Tests/python/mergeLowEnergy.py @@ -1,122 +1,124 @@ #! /usr/bin/env python +from __future__ import print_function import yoda,glob,math,optparse import subprocess,os op = optparse.OptionParser(usage=__doc__) op.add_option("-m" , dest="plots" , default=[], action="append") opts, args = op.parse_args() if(len(args)!=1) : - print 'Must be one and only 1 name' + print ('Must be one and only 1 name') quit() cmd3_weights = { 2007. : [0.5 ,4259], 1980 : [1 , 2368], 1951 : [11,5230], 1907.5: [17.5,5497], 1877 : [7 ,16803], 1830 : [30,8287], 1740. : [40 ,8728], 1640 : [40, 7299] } wSum=0. for key in cmd3_weights.keys() : wSum+= cmd3_weights[key][1] for key in cmd3_weights.keys() : cmd3_weights[key][1] /= wSum for runType in ["NonPerturbative","Perturbative"]: outhistos={} for fileName in glob.glob("Rivet-LowEnergy-EE-%s-*.yoda" % runType): energy = float(fileName.split("-")[-1].strip(".yoda")) energyMeV = energy*1000. aos = yoda.read(fileName) - for hpath,histo in aos.iteritems(): + for hpath,histo in aos.items(): if("/_" in hpath or "TMP" in hpath or "RAW" in hpath) : continue if(len(opts.plots)>0 and hpath not in opts.plots) : continue if(type(histo)==yoda.core.Histo1D or (type(histo)==yoda.core.Scatter2D and hpath=="/BESIII_2019_I1726357/d03-x01-y01") ) : if( "CMD3_2019_I1770428" in hpath ) : val=0. for key in cmd3_weights.keys() : if(abs(energyMeV-val)>abs(energyMeV-key)) : val=key histo.scaleW(cmd3_weights[val][1]) if(hpath in outhistos) : outhistos[hpath] += histo else : outhistos[hpath] = histo else : outhistos[hpath] = histo continue # create histo if it doesn't exist elif(hpath not in outhistos) : title="" path="" if hasattr(histo, 'title'): title=histo.title() if hasattr(histo, 'path'): path=histo.path() outhistos[hpath] = yoda.core.Scatter2D(path,title) matched = False for i in range(0,aos[hpath].numPoints()) : x = aos[hpath].points()[i].x() delta=1e-5 if("KLOE_2009_I797438" in hpath or "KLOE_2005_I655225" in hpath or "KLOE2_2017_I1634981" in hpath or "FENICE_1994_I377833" in hpath or "FENICE_1996_I426675" in hpath): x=math.sqrt(x) delta=1e-3 if(abs(x-energy)<1e-3*delta or abs(x-energyMeV) xmin and energy < xmax) or (energyMeV > xmin and energyMeV < xmax) ) : duplicate = False for j in range(0,outhistos[hpath].numPoints()) : if(outhistos[hpath].points()[j].x()==aos[hpath].points()[i].x()) : duplicate = True break if(not duplicate) : outhistos[hpath].addPoint(aos[hpath].points()[i]) break if len(outhistos) == 0: continue p = subprocess.Popen(["rivet-config", "--datadir"],stdout=subprocess.PIPE) - path=p.communicate()[0].strip() - for val in outhistos.keys() : + path=p.communicate()[0].encode("UTF-8").strip() + temp = list(outhistos.keys()) + for val in temp : if type(outhistos[val]) is yoda.core.Scatter2D : if(outhistos[val].numPoints()==0) : del outhistos[val] continue analysis = val.split("/")[1] aos=yoda.read(os.path.join(os.path.join(os.getcwd(),path),analysis+".yoda")) ref = aos["/REF"+val] for point in ref.points() : matched=False for point2 in outhistos[val].points() : if(point2.x()==point.x()) : matched=True break if(matched) : continue outhistos[val].addPoint(point.x(),0,point.xErrs(),(0.,0.)) elif (type(outhistos[val]) is yoda.core.Histo1D or type(outhistos[val]) is yoda.core.Profile1D) : if(outhistos[val].numBins()==0) : del outhistos[val] continue else : - print type(outhistos[val]) + print (type(outhistos[val]) ) yoda.writeYODA(outhistos,"LowEnergy-EE-%s-%s.yoda" % (runType,args[0])) diff --git a/Tests/python/plot-EE b/Tests/python/plot-EE --- a/Tests/python/plot-EE +++ b/Tests/python/plot-EE @@ -1,4564 +1,4565 @@ #! /usr/bin/env python +from __future__ import print_function import glob,os,sys if __name__ == "__main__": import logging from optparse import OptionParser, OptionGroup parser = OptionParser(usage="%prog name") verbgroup = OptionGroup(parser, "Verbosity control") verbgroup.add_option("-v", "--verbose", action="store_const", const=logging.DEBUG, dest="LOGLEVEL", default=logging.INFO, help="print debug (very verbose) messages") verbgroup.add_option("-q", "--quiet", action="store_const", const=logging.WARNING, dest="LOGLEVEL", default=logging.INFO, help="be very quiet") parser.add_option_group(verbgroup) parser.add_option("--with-gg", action='store_true' , dest="gg", default=False, help="Include gg analyese") parser.add_option("--without-gg", action='store_false', dest="gg", default=False, help="Don\'t include gg analyses") (opts, args) = parser.parse_args() logging.basicConfig(level=opts.LOGLEVEL, format="%(message)s") ## Check args if len(args) < 1: logging.error("Must specify at least the name of the files") sys.exit(1) directory=args[0] header=""" {title}

{title}

""" analyses={ "HadronDecays" : { }, "TauDecays" : { "1pi" : {}, "2pi" : {}, "Kpi" : {}, "KK" : {}, "lnu" : {}, "Keta" : {}, "3pi" : {}, "Kpipi" : {}, "KKpi" : {}, "2pieta" : {}, "2pigamma" : {}, "3K" : {}, "4pi" : {}, "5pi" : {}, "6pi" : {},}, "Charged" : {"TotalChargedMult" : { 0 : {}, 1 : {}, 4 : {}, 5 : {}, 51 : {}, 41 : {} , "C" : {} }, "ChargedSpectrum" : { 0 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}}, 1 : { "x" : {}, "p" : {}, "xi" : {}}, 2 : { "x" : {}, "p" : {}, "xi" : {}}, 4 : { "x" : {}, "p" : {}, "xi" : {}}, 5 : { "x" : {}, "p" : {}, "xi" : {}}, 21 : { "x" : {}, "p" : {}, "xi" : {}}, "C" : { "x" : {}, "p" : {}, "xi" : {}}}, "ChargedRapidityThrust" : { }, "ChargedpTInThrust" : { }, "ChargedpTOutThrust" : { }, "ChargedpTThrust" : { }, "ChargedpTvsxpThrust" : { }, "ChargedpTOutvsxpThrust" : { }, "ChargedxFThrust" : { }, "ChargedRapiditySphericity" : { }, "ChargedpTInSphericity" : { }, "ChargedpTOutSphericity" : { }, "ChargedpLSphericity" : { }, "ChargedpTSphericity" : { }, "ChargedpT2Sphericity" : { }, "ChargedFlowSphericity" : { }, "ChargedEnergyFlowSphericity" : { }, "ChargedAveragepT2inSphericity" : { }, "ChargedAveragepT2outSphericity" : { }, "ChargedAveragepTThrust" : { }, "ChargedAveragepT2Thrust" : { }, "ChargedSumpTThrust" : { }, "ChargedSumpT2Thrust" : { }, "ChargedAveragepTSphericity" : { }, "ChargedAveragepT2Sphericity" : { }, "ChargedSumpTSphericity" : { }, "ChargedSumpT2Sphericity" : { }, "DistChargedMult" : {0 : {}, 1 : {}, 2 : {}, 4 : {}, 5 : {} , 21 : {}, "C" :{}}}, "IdentifiedParticle" : { 22 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 111 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 211 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 221 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 331 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 223 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 333 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 321 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 311 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 313 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 323 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 2212 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 413 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 423 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 10413 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 10423 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 3122 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 3212 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 2224 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 3312 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 3222 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, "3224B" : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 431 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 433 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 435 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 10433 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 20433 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 10431 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 3112 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 3224 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 3114 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 3324 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 3124 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 443 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 100443 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 9010221 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 9000211 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 225 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 335 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 113 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 213 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 421 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 411 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 415 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 425 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 511 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 513 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 4122 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 3334 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 4332 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 4132 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 4232 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 4112 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 4222 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 4114 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 4124 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 4224 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 4312 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 4322 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 4314 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 4324 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, 14122 : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}, "321/2212" : { "x" : {}, "p" : {}, "xi" : {}, "Other" : {}, "Ratio" : {}}}, "IdentifiedParticleFlavour" : {111 : { 1 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 4 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 5 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 41 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 51 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} } }, 211 : { 1 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 4 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 5 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 41 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 51 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} } }, 321 : { 1 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 4 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 5 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 41 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 51 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} } }, 311 : { 1 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 4 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 5 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 41 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 51 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} } }, 313 : { 1 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 4 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 5 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 41 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 51 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} } }, 333 : { 1 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 4 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 5 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 41 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 51 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} } }, 2212 : { 1 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 4 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 5 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 41 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 51 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} } }, 3122 : { 1 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 4 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 5 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 41 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 51 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} } }, 413 : { 1 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 4 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 5 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 41 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 51 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} } }, "321/2212" : { 1 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 4 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 5 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 41 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} }, 51 : {"x" : {}, "xi" : {}, "p" : {}, "Ratio" : {}, "Other" : {} } },}, "MultiplicityFlavour" : {111 : { 1 : {}, 4 : {}, 5 : {}, 41 : {}, 51 : {} }, 211 : { 1 : {}, 4 : {}, 5 : {}, 41 : {}, 51 : {} }, 321 : { 1 : {}, 4 : {}, 5 : {}, 41 : {}, 51 : {} }, 2212 : { 1 : {}, 4 : {}, 5 : {}, 41 : {}, 51 : {} }, 413 : { 1 : {}, 4 : {}, 5 : {}, 41 : {}, 51 : {} }, 3122 : { 1 : {}, 4 : {}, 5 : {}, 41 : {}, 51 : {} }, 313 : { 1 : {}, 4 : {}, 5 : {}, 41 : {}, 51 : {} }, 333 : { 1 : {}, 4 : {}, 5 : {}, 41 : {}, 51 : {} }, 311 : { 1 : {}, 4 : {}, 5 : {}, 41 : {}, 51 : {} }, "321/2212" : { 1 : {}, 4 : {}, 5 : {}, 41 : {}, 51 : {} }, }, "Multiplicity" : { 22: {}, 111 : {}, 211 : {}, 221 : {}, 331 : {}, 113 : {},9010221 : {},9000211 : {}, 213 : {}, 223 : {}, 333 : {}, 321 : {}, 311 : {}, 411 : {}, 421 : {}, 431 : {}, 10431 : {}, 521 : {}, "511B" : {}, 531 : {}, 511 : {}, 313 : {}, 323 : {}, 2212 : {}, 413 : {}, 423 : {}, 425 : {}, 10423 : {}, 433 : {}, 10413 : {}, 415 : {}, 10433 : {}, 513 : {}, 515 : {}, 3122 : {}, 3312 : {}, 3212 : {}, 3112 : {}, 3114 : {}, 3324: {}, 3334 : {}, "321/2212" : {}, 4132 : {}, 4232 : {}, 4124 : {}, 14122 : {}, 4212 : {}, 4214 : {}, 443 : {}, 100443 : {}, 553 : {}, 20223 : {}, 20333 : {}, 20443 : {}, 225 :{}, 335 : {}, 20433 : {}, 435 : {}, 315 : {}, 325 : {}, 3222 : {}, 2224 : {}, 3224 : {}, 3114 : {}, 4122 : {}, 5122 :{}, 3124 :{}, 4222 : {}, "3222B" : {}, "3224B" : {}, 4332 : {}, 4334 : {}, 4324 : {}, 4224 : {}, 4314 : {} }, "EventShapes" : { "T" : {}, "S" : {}, "D" : {}, "O" : {}, "Minor" : {}, "Major" : {}, "y12_dur" : {}, "y23_dur" : {}, "y34_dur" : {}, "y45_dur" : {}, "y56_dur" : {}, "y12_jade" : {}, "y23_jade" : {}, "y34_jade" : {}, "y45_jade" : {}, "y56_jade" : {}, "HeavyJetMass" : {} , "JetMassDifference" : {} , "LightJetMass" : {}, "TotalJetMass" : {} , "EEC" : {}, "AEEC" : {} , "P" : {}, "A" : {} , "Qx" : {}, "Q21" : {}, "BW" : {}, "BT" : {}, "BN" : {}, "Bdiff" : {}, "C" : {}, "1jet_dur" : {}, "2jet_dur" : {}, "3jet_dur" : {}, "4jet_dur" : {}, "5jet_dur" : {}, "6jet_dur" : {}, "1jet_jade" : {}, "2jet_jade" : {}, "3jet_jade" : {}, "4jet_jade" : {}, "5jet_jade" : {}, "6jet_jade" : {}, "Moment_T":{}, "Moment_H":{},"Moment_C":{},"Moment_S":{},"Moment_L":{},"Moment_y":{},"Moment_BW":{}, "Moment_BN":{},"Moment_BT":{},"Moment_O":{},"Moment_M":{},"Moment_m":{},}, "FourJet" : {"BZ" : {}, "KSW" : {}, "NR" : {}, "alpha34" : {} }, "EventShapesFlavour" : { "T" : { 1 : {}, 2 : {}, 4 : {}, 5 : {}}, "S" : { 1 : {}, 2 : {}, 4 : {}, 5 : {}}, "D" : { 1 : {}, 2 : {}, 4 : {}, 5 : {}}, "O" : { 1 : {}, 2 : {}, 4 : {}, 5 : {}}, "Minor" : { 1 : {}, 2 : {}, 4 : {}, 5 : {}}, "Major" : { 1 : {}, 2 : {}, 4 : {}, 5 : {}}, "y12" : { 1 : {}, 2 : {}, 4 : {}, 5 : {}},"y23" : { 1 : {}, 2 : {}, 4 : {}, 5 : {}},"y34" : { 1 : {}, 2 : {}, 4 : {}, 5 : {}},"y45" : { 1 : {}, 2 : {}, 4 : {}, 5 : {}},"y56" : { 1 : {}, 2 : {}, 4 : {}, 5 : {}}, "HeavyJetMass" : { 1 : {}, 2 : {}, 4 : {}, 5 : {}} , "JetMassDifference" : { 1 : {}, 2 : {}, 4 : {}, 5 : {}} , "LightJetMass" : { 1 : {}, 2 : {}, 4 : {}, 5 : {}}, "TotalJetMass" : { 1 : {}, 2 : {}, 4 : {}, 5 : {}} , "EEC" : { 1 : {}, 2 : {}, 4 : {}, 5 : {}}, "AEEC" : { 1 : {}, 2 : {}, 4 : {}, 5 : {}} , "P" : { 1 : {}, 2 : {}, 4 : {}, 5 : {}}, "A" : { 1 : {}, 2 : {}, 4 : {}, 5 : {}} , "BW" : { 1 : {}, 2 : {}, 4 : {}, 5 : {}}, "BT" : { 1 : {}, 2 : {}, 4 : {}, 5 : {}}, "BN" : { 1 : {}, 2 : {}, 4 : {}, 5 : {}}, "Bdiff" : { 1 : {}, 2 : {}, 4 : {}, 5 : {}}, "C" : { 1 : {}, 2 : {}, 4 : {}, 5 : {}}, "1jet" : { 1 : {}, 2 : {}, 4 : {}, 5 : {}},"2jet" : { 1 : {}, 2 : {}, 4 : {}, 5 : {}},"3jet" : { 1 : {}, 2 : {}, 4 : {}, 5 : {}},"4jet" : { 1 : {}, 2 : {}, 4 : {}, 5 : {}},"5jet" : { 1 : {}, 2 : {}, 4 : {}, 5 : {}},"6jet" : { 1 : {}, 2 : {}, 4 : {}, 5 : {}},}, "QED" : {}, "Polarization" : { 213 : { "alpha" : {}, "rho00" : {}, "cos" : {}, "rho10" : {}, "rho11" : {}, "phi" : {}, "Other" : {}}, 223 : { "alpha" : {}, "rho00" : {}, "cos" : {}, "rho10" : {}, "rho11" : {}, "phi" : {}, "Other" : {}}, 413 : { "alpha" : {}, "rho00" : {}, "cos" : {}, "rho10" : {}, "rho11" : {}, "phi" : {}, "Other" : {}}, 513 : { "alpha" : {}, "rho00" : {}, "cos" : {}, "rho10" : {}, "rho11" : {}, "phi" : {}, "Other" : {}}, 3122 : { "alpha" : {}, "rho00" : {}, "cos" : {}, "rho10" : {}, "rho11" : {}, "phi" : {}, "Other" : {}}, 333 : { "alpha" : {}, "rho00" : {}, "cos" : {}, "rho10" : {}, "rho11" : {}, "phi" : {}, "Other" : {}}, 313 : { "alpha" : {}, "rho00" : {}, "cos" : {}, "rho10" : {}, "rho11" : {}, "phi" : {}, "Other" : {}}, 5122 : { "alpha" : {}, "rho00" : {}, "cos" : {}, "rho10" : {}, "rho11" : {}, "phi" : {}, "Other" : {}}, } } particleNames = { 11 : "$e^-$", 13 : "$\\mu^-$", 22 : "$\\gamma$", 111 : "$\\pi^0$", 211 : "$\\pi^\\pm$", 221 : "$\\eta$", 331 : "$\\eta^\\prime$", 113 : "$\\rho^0$", 213 : "$\\rho^\\pm$", 223 : "$\\omega$", 333 : "$\\phi$", 115 : "$a_2^0$", 215 : "$a_2^\pm$", 225 : "$f_2$", 335 : "$f^\\prime_2$", 20223 : "$f_1$", 20333 : "$f^\\prime_1$", 20113 : "$a^0_1$", 20213 : "$a^\\pm_1$", 9010221 : "$f_0(980)$", 9000211 : "$a^\\pm_0(980)$", 311 : "$K^0,\\bar{K}^0$", 321 : "$K^\\pm$", 313 : "$K^{*0},\\bar{K}^{*0}$", 323 : "$K^{*\\pm}$", 315 : "$K^0_2,\\bar{K}^0_2$", 325 : "$K^\\pm_2$", 411 : "$D^\\pm$", 421 : "$D^0,\\bar{D}^0$", 413: "$D^{*\\pm}$", 415 : "$D^\\pm_2$", 425 : "$D^0_2, \\bar{D}^0_2$", 423: "$D^{*0},\\bar{D}^{*0}$", 10423: "$D^0_1,\\bar{D}_1^0$",10413: "$D^\\pm_1$", 431 : "$D_s^\\pm$", 435 : "$D^\\pm_{s2}$", 20433 : "$D^\\pm_{s1}$", 433 : "$D_s^{*\\pm}$", 10433 : "$D_{s1}(2536)^+$", 10431 : "$D_{s0}(2319)^+$", 511 : "$B^0,\\bar{B}^0$", "511B" : "$B^0,\\bar{B}^0, B^\\pm$", 521 : "$B^\\pm$", 531 : "$B^0_s,\\bar{B}^0_s$", 513 : "$B^*$",515 : "$B^{**}$", - 443 : "$J/\\psi$" , 100443 : "$\\psi(2S)$", 553 : "$\Upsilon(1S)$", 20443 : "$\\chi_{c1}(1P)$", - 441 : "$\\eta_c$", 100553 : "$\Upsilon(2S)$", 200553 : "$\Upsilon(3S)$", 300553 : "$\Upsilon(4S)$", 400553 : "$\Upsilon(5S)$", 445 : "$\\chi_{c2}(1P)$", + 443 : "$J/\\psi$" , 100443 : "$\\psi(2S)$", 553 : "$\\Upsilon(1S)$", 20443 : "$\\chi_{c1}(1P)$", + 441 : "$\\eta_c$", 100553 : "$\\Upsilon(2S)$", 200553 : "$\\Upsilon(3S)$", 300553 : "$\\Upsilon(4S)$", 400553 : "$\\Upsilon(5S)$", 445 : "$\\chi_{c2}(1P)$", 120553 : "$\chi_{b1}(2S)$", 110551 : "$\chi_{b0}(2S)$", 100555 : "$\chi_{b2}(2S)$", 30443 : "$\\psi(3770)$", 2212 : "$p,\\bar{p}$", 2224 : "$\\Delta^{++},\\bar{\\Delta}^{--}$", 3122 : "$\\Lambda^0,\\bar{\\Lambda}^0$", 3222 : "$\\Sigma^+,\\bar{\Sigma}^-$", "3222B" : "$\\Sigma^\\pm,\\bar{\Sigma}^\\pm$", 3212 : "$\\Sigma^0,\\bar{\Sigma}^0$", 3112 : "$\\Sigma^-,\\bar{\Sigma}^+$", 3224 : "$\\Sigma^{*+},\\bar{\Sigma}^{*-}$", "3224B" : "$\\Sigma^{*\\pm},\\bar{\Sigma}^{*\\pm}$", 3214 : "$\\Sigma^{*0},\\bar{\Sigma}^{*0}$", 3114 : "$\\Sigma^{*-},\\bar{\Sigma}^{*+}$", 3322 : "$\\Xi^0,\\bar{\\Xi}^0$", 3312 : "$\\Xi^-,\\bar{\\Xi}^+$", 3324 : "$\\Xi^{*0},\\bar{\\Xi}^{*0}$", 3314 : "$\\Xi^{*-},\\bar{\\Xi}^{*+}$", 3334 : "$\\Omega^-,\\bar{\\Omega}^+$", 3124 : "$\\Lambda^0(1520),\\bar{\\Lambda}^0(1520)$", 4122 : "$\\Lambda_c^+,\\bar{\\Lambda}^+_c$", 4222 : "$\\Sigma_c^{++}, \\Sigma_c^{0}, \\bar{\\Sigma}_c^{++}, \\bar{\\Sigma}_c^{0}$", 4224 : "$\\Sigma_c^{*++}, \\Sigma_c^{*0}, \\bar{\\Sigma}_c^{*++}, \\bar{\\Sigma}_c^{*0}$", 14122 : "$\\Lambda_c(2595)^+,\\bar{\\Lambda}(2595)_c^+$", 4314 : "$\\Xi^{*0}_c$", 4324 : "$\\Xi^{*+}_c$", 4322 : "$\\Xi_c^{\\prime+}$", 4212 : "$\\Sigma_c^0$", 4214 : "$\\Sigma_c^{*0}$", 4312 : "$\\Xi_c^{\\prime0}$", 5122 : "$\\Lambda_b^0,\\bar{\\Lambda}^0_b$", 4124 : "$\\Lambda_c(2625)^+,\\bar{\\Lambda}(2625)_c^+$", 4112 : "$\\Sigma_c^0,\\bar{\\Sigma}_c^0$", 4114 : "$\\Sigma_c^{*0},\\bar{\\Sigma}_c^{*0}$", 4332 : "$\\Omega_c^0,\\bar{\\Omega}_c^0$", 4334 : "$\\Omega_c^{*0},\\bar{\\Omega}_{c}^{*0}$", 4132 : "$\\Xi_c^0,\\bar{\\Xi}_c^0$", 4232 : "$\\Xi_c^+,\\bar{\\Xi}_c^-$", "321/2212" : "$K^\\pm,p,\\bar{p}$" } # hadron species mLight = [211,111,221,331,213,113,223,333,225,335,20213,20113,20223,20333,9010221, 9000111, 9000211] mStrange = [311,321,313,323,315,325] mCharm = [411,421,413,423,415,425,10413,10423,431,433,435,10431,10433,20433] mBottom = [511,"511B",521,531,513,515] mccbar = [441,443,100443,20443,30443] mbbbar = [553,100553,200553,300553,400553,110551,120553,100555] bLight = [2212,2224] bStrange = [3122,3222,"3222B",3212,3112,3114,3224,"3224B",3312,3322,3324,3334,3124] bCharm = [4122,4112,4212,4222,4214,4114,4332,4132,4232,4312,4322,14122,4124,4224,4314,4324,4334] bBottom = [5122] # hadron decays modes = {} # neutral pion analyses["HadronDecays"][111] = { "Modes" : {"$\\pi^0\\to\\gamma e^+e^-$" : {} } } analyses["HadronDecays"][111]["Modes"]["$\\pi^0\\to\\gamma e^+e^-$"]["MC"] = ["/MC_Meson_Meson_Leptons_Decay/h2_111p_22p_11_mVf", "/MC_Meson_Meson_Leptons_Decay/h2_111p_22p_11_mVfbar", "/MC_Meson_Meson_Leptons_Decay/h2_111p_22p_11_mff"] # eta analyses["HadronDecays"][221] = { "Modes" : {"$\\eta\\to\\pi^0\\pi^0\\pi^0$" : {}, "$\\eta\\to\\pi^+\\pi^-\\pi^0$" : {}, "$\\eta\\to\\gamma e^+e^-$" : {}, "$\\eta\\to\\gamma \\mu^+\\mu^-$" : {}, "$\\eta\\to\\gamma \\pi^+\\pi^-$" : {}, "$\\eta\\to\\gamma\\gamma\\pi^0$" : {} } } analyses["HadronDecays"][221]["Modes"]["$\\eta\\to\\pi^0\\pi^0\\pi^0$"]["MC" ] = ["/MC_Eta_Decay/dpi0pi0_0"] analyses["HadronDecays"][221]["Modes"]["$\\eta\\to\\pi^+\\pi^-\\pi^0$"]["MC" ] = ["/MC_Eta_Decay/dpi0pim_0","/MC_Eta_Decay/dpi0pip_0", "/MC_Eta_Decay/dpippim_0"] analyses["HadronDecays"][221]["Modes"]["$\\eta\\to\\pi^+\\pi^-\\pi^0$"]["data"] = ["/KLOE2_2016_I1416990/d01-x01-y01","/KLOE2_2016_I1416990/d02-x01-y01", "/KLOE2_2016_I1416990/d02-x01-y02","/KLOE2_2016_I1416990/d02-x01-y03", "/KLOE2_2016_I1416990/d02-x01-y04","/KLOE2_2016_I1416990/d02-x01-y05", "/KLOE2_2016_I1416990/d02-x01-y06","/KLOE2_2016_I1416990/d02-x01-y07", "/KLOE2_2016_I1416990/d02-x01-y08","/KLOE2_2016_I1416990/d02-x01-y09", "/KLOE2_2016_I1416990/d02-x01-y10","/KLOE2_2016_I1416990/d02-x01-y11", "/KLOE2_2016_I1416990/d02-x01-y12","/KLOE2_2016_I1416990/d02-x01-y13", "/KLOE2_2016_I1416990/d02-x01-y14","/KLOE2_2016_I1416990/d02-x01-y15", "/KLOE2_2016_I1416990/d02-x01-y16","/KLOE2_2016_I1416990/d02-x01-y17"] analyses["HadronDecays"][221]["Modes"]["$\\eta\\to\\gamma e^+e^-$"]["MC" ] = ["/MC_Meson_Meson_Leptons_Decay/h2_221p_22p_11_mVf", "/MC_Meson_Meson_Leptons_Decay/h2_221p_22p_11_mVfbar", "/MC_Meson_Meson_Leptons_Decay/h2_221p_22p_11_mff"] analyses["HadronDecays"][221]["Modes"]["$\\eta\\to\\gamma e^+e^-$"]["data"] = ["/A2_2017_I1486671/d01-x01-y01"] analyses["HadronDecays"][221]["Modes"]["$\\eta\\to\\gamma \\mu^+\\mu^-$"]["MC" ] = ["/MC_Meson_Meson_Leptons_Decay/h2_221p_22p_13_mVf", "/MC_Meson_Meson_Leptons_Decay/h2_221p_22p_13_mVfbar", "/MC_Meson_Meson_Leptons_Decay/h2_221p_22p_13_mff"] analyses["HadronDecays"][221]["Modes"]["$\\eta\\to\\gamma \\pi^+\\pi^-$"]["MC" ] = ["/MC_Eta_Decay/mpimgamma_0","/MC_Eta_Decay/mpipgamma_0", "/MC_Eta_Decay/mpippim_0" ,"/MC_Eta_Decay/photonenergy_0"] analyses["HadronDecays"][221]["Modes"]["$\\eta\\to\\gamma\\gamma\\pi^0$" ]["MC" ] = ["/MC_Eta_Decay/mgammagamma_0","/MC_Eta_Decay/mpi0gamma_0"] # eta' analyses["HadronDecays"][331] = { "Modes" : {"$\\eta^\\prime\\to\\pi^0\\pi^0\\pi^0$" : {}, "$\\eta^\\prime\\to\\pi^+\\pi^-\\pi^0$" : {}, "$\\eta^\\prime\\to\\eta\\pi^0\\pi^0$" : {}, "$\\eta^\\prime\\to\\eta\\pi^+\\pi^-$" : {}, "$\\eta^\\prime\\to\\gamma e^+e^-$" : {}, "$\\eta^\\prime\\to\\gamma \\mu^+\\mu^-$" : {}, "$\\eta^\\prime\\to\\gamma \\pi^+\\pi^-$" : {}, "$\\eta^\\prime\\to\\gamma\\gamma\\pi^0$" : {} } } analyses["HadronDecays"][331]["Modes"]["$\\eta^\\prime\\to\\gamma e^+e^-$"]["MC" ] = ["/MC_Meson_Meson_Leptons_Decay/h2_331p_22p_11_mVf", "/MC_Meson_Meson_Leptons_Decay/h2_331p_22p_11_mVfbar", "/MC_Meson_Meson_Leptons_Decay/h2_331p_22p_11_mff"] analyses["HadronDecays"][331]["Modes"]["$\\eta^\\prime\\to\\gamma e^+e^-$"]["data"] = ["/BESIII_2015_I1364494/d01-x01-y03"] analyses["HadronDecays"][331]["Modes"]["$\\eta^\\prime\\to\\gamma \\mu^+\\mu^-$"]["MC"] = ["/MC_Meson_Meson_Leptons_Decay/h2_331p_22p_13_mff", "/MC_Meson_Meson_Leptons_Decay/h2_331p_22p_13_mVfbar", "/MC_Meson_Meson_Leptons_Decay/h2_331p_22p_13_mVf"] analyses["HadronDecays"][331]["Modes"]["$\\eta^\\prime\\to\\pi^+\\pi^-\\pi^0$"]["MC"] = ["/MC_Eta_Decay/dpi0pim_1","/MC_Eta_Decay/dpippim_1", "/MC_Eta_Decay/dpi0pip_1"] analyses["HadronDecays"][331]["Modes"]["$\\eta^\\prime\\to\\gamma \\pi^+\\pi^-$"]["MC" ] =["/MC_Eta_Decay/mpimgamma_1","/MC_Eta_Decay/mpipgamma_1", "/MC_Eta_Decay/mpippim_1","/MC_Eta_Decay/photonenergy_1"] analyses["HadronDecays"][331]["Modes"]["$\\eta^\\prime\\to\\gamma \\pi^+\\pi^-$"]["data"] = ["/BESIII_2018_I1641075/d01-x01-y05"] analyses["HadronDecays"][331]["Modes"]["$\\eta^\\prime\\to\\gamma\\gamma\\pi^0$"]["MC" ] = ["/MC_Eta_Decay/mgammagamma_1","/MC_Eta_Decay/mpi0gamma_1"] analyses["HadronDecays"][331]["Modes"]["$\\eta^\\prime\\to\\pi^0\\pi^0\\pi^0$"]["MC" ] = ["/MC_Eta_Decay/dpi0pi0_1"] analyses["HadronDecays"][331]["Modes"]["$\\eta^\\prime\\to\\eta\\pi^0\\pi^0$"]["MC" ] = ["/MC_Eta_Decay/dpi0eta","/MC_Eta_Decay/dpi0pi0_2"] analyses["HadronDecays"][331]["Modes"]["$\\eta^\\prime\\to\\eta\\pi^+\\pi^-$"]["MC" ] = ["/MC_Eta_Decay/dpimeta","/MC_Eta_Decay/dpipeta", "/MC_Eta_Decay/dpippim_2"] # omega analyses["HadronDecays"][223] = { "Modes" : {"$\\omega\\to\\pi^+\\pi^-\\pi^0$" : {}, "$\\omega\\to e^+e^-\\pi^0$" : {}, "$\\omega\\to \\mu^+\\mu^-\\pi^0$" : {},}} analyses["HadronDecays"][223]["Modes"]["$\\omega\\to\\pi^+\\pi^-\\pi^0$"]["MC"] = ["/MC_OmegaPhia1_3Pion_Decay/dalitz_1","/MC_OmegaPhia1_3Pion_Decay/m0_1", "/MC_OmegaPhia1_3Pion_Decay/mminus_1","/MC_OmegaPhia1_3Pion_Decay/mplus_1", "/MC_OmegaPhia1_3Pion_Decay/xhist_1","/MC_OmegaPhia1_3Pion_Decay/yhist_1"] analyses["HadronDecays"][223]["Modes"]["$\\omega\\to e^+e^-\\pi^0$"]["MC"] = ["/MC_Meson_Meson_Leptons_Decay/h_223p_111p_11_mPf", "/MC_Meson_Meson_Leptons_Decay/h_223p_111p_11_mPfbar", "/MC_Meson_Meson_Leptons_Decay/h_223p_111p_11_mff"] analyses["HadronDecays"][223]["Modes"]["$\\omega\\to \\mu^+\\mu^-\\pi^0$"]["MC"] = ["/MC_Meson_Meson_Leptons_Decay/h_223p_111p_13_mPf", "/MC_Meson_Meson_Leptons_Decay/h_223p_111p_13_mPfbar", "/MC_Meson_Meson_Leptons_Decay/h_223p_111p_13_mff"] analyses["HadronDecays"][223]["Modes"]["$\\omega\\to e^+e^-\\pi^0$"]["data"] = ["/A2_2017_I1486671/d02-x01-y01"] # phi analyses["HadronDecays"][333] = { "Modes" : {"$\\phi\\to\\pi^+\\pi^-\\pi^0$" : {}, "$\\phi\\to e^+e^-\\pi^0$" : {}, "$\\phi\\to e^+e^-\\eta$" : {}, "$\\phi\\to \\mu^+\\mu-\\gamma$" : {}, "$\\phi\\to \\pi^0\\pi^0\\gamma$" : {}, "$\\phi\\to \\eta\\pi^0\\gamma$" : {}, "$\\phi\\to \\mu^+\\mu^-\\pi^0$" : {}, "$\\phi\\to \\mu^+\\mu^-\\eta$" : {},}} analyses["HadronDecays"][333]["Modes"]["$\\phi\\to\\pi^+\\pi^-\\pi^0$"]["MC"] = ["/MC_OmegaPhia1_3Pion_Decay/dalitz_2","/MC_OmegaPhia1_3Pion_Decay/m0_2", "/MC_OmegaPhia1_3Pion_Decay/mminus_2","/MC_OmegaPhia1_3Pion_Decay/mplus_2", "/MC_OmegaPhia1_3Pion_Decay/xhist_2","/MC_OmegaPhia1_3Pion_Decay/yhist_2"] analyses["HadronDecays"][333]["Modes"]["$\\phi\\to\\pi^+\\pi^-\\pi^0$"]["data"] = ["/SND_2001_I558279/d01-x01-y01","/SND_2001_I558279/d02-x01-y01"] analyses["HadronDecays"][333]["Modes"]["$\\phi\\to e^+e^-\\pi^0$"]["MC"] = ["/MC_Meson_Meson_Leptons_Decay/h_333p_111p_11_mPf", "/MC_Meson_Meson_Leptons_Decay/h_333p_111p_11_mPfbar", "/MC_Meson_Meson_Leptons_Decay/h_333p_111p_11_mff"] analyses["HadronDecays"][333]["Modes"]["$\\phi\\to e^+e^-\\pi^0$"]["data"] = ["/KLOE2_2016_I1416825/d01-x01-y01"] analyses["HadronDecays"][333]["Modes"]["$\\phi\\to \\mu^+\\mu^-\\pi^0$"]["MC"] = ["/MC_Meson_Meson_Leptons_Decay/h_333p_111p_13_mPf", "/MC_Meson_Meson_Leptons_Decay/h_333p_111p_13_mPfbar", "/MC_Meson_Meson_Leptons_Decay/h_333p_111p_13_mff"] analyses["HadronDecays"][333]["Modes"]["$\\phi\\to e^+e^-\\eta$"]["MC"] = ["/MC_Meson_Meson_Leptons_Decay/h_333p_221p_11_mPf", "/MC_Meson_Meson_Leptons_Decay/h_333p_221p_11_mPfbar", "/MC_Meson_Meson_Leptons_Decay/h_333p_221p_11_mff"] analyses["HadronDecays"][333]["Modes"]["$\\phi\\to e^+e^-\\eta$"]["data"] = ["/KLOE2_2014_I1317236/d01-x01-y01"] analyses["HadronDecays"][333]["Modes"]["$\\phi\\to \\mu^+\\mu^-\\eta$"]["MC"] = ["/MC_Meson_Meson_Leptons_Decay/h_333p_221p_13_mPf", "/MC_Meson_Meson_Leptons_Decay/h_333p_221p_13_mPfbar", "/MC_Meson_Meson_Leptons_Decay/h_333p_221p_13_mff"] analyses["HadronDecays"][333]["Modes"]["$\\phi\\to \\pi^0\\pi^0\\gamma$"]["data"] = ["/KLOE_2002_I585183/d01-x01-y01","/SND_2000_I525398/d01-x01-y01"] analyses["HadronDecays"][333]["Modes"]["$\\phi\\to \\eta\\pi^0\\gamma$" ]["data"] = ["/KLOE_2009_I818106/d01-x01-y01","/SND_2000_I527094/d01-x01-y01"] analyses["HadronDecays"][333]["Modes"]["$\\phi\\to \\mu^+\\mu-\\gamma$"]["MC"]=["/MC_Meson_Meson_Leptons_Decay/h2_333p_22p_13_mff","/MC_Meson_Meson_Leptons_Decay/h2_333p_22p_13_mVfbar", "/MC_Meson_Meson_Leptons_Decay/h2_333p_22p_13_mVf"] # a_1+ analyses["HadronDecays"][20213] = { "Modes" : { "$a_1^+\\to\\pi^+\\pi^0\\pi^0$" : {}, "$a_1^+\\to\\pi^+\\pi^-\\pi^+$" : {},}} analyses["HadronDecays"][20213]["Modes"]["$a_1^+\\to\\pi^+\\pi^0\\pi^0$"]["MC"] = ["/MC_OmegaPhia1_3Pion_Decay/dalitz1","/MC_OmegaPhia1_3Pion_Decay/hist1A", "/MC_OmegaPhia1_3Pion_Decay/hist1B"] analyses["HadronDecays"][20213]["Modes"]["$a_1^+\\to\\pi^+\\pi^-\\pi^+$"]["MC"] = ["/MC_OmegaPhia1_3Pion_Decay/dalitz3","/MC_OmegaPhia1_3Pion_Decay/hist3A", "/MC_OmegaPhia1_3Pion_Decay/hist3B"] # a_10 analyses["HadronDecays"][20113] = { "Modes" : { "$a_1^0\\to\\pi^0\\pi^0\\pi^0$" : {}, "$a_1^0\\to\\pi^+\\pi^-\\pi^0$" : {},}} analyses["HadronDecays"][20113]["Modes"]["$a_1^0\\to\\pi^0\\pi^0\\pi^0$"]["MC"] = ["/MC_OmegaPhia1_3Pion_Decay/dalitz0","/MC_OmegaPhia1_3Pion_Decay/hist0"] analyses["HadronDecays"][20113]["Modes"]["$a_1^0\\to\\pi^+\\pi^-\\pi^0$"]["MC"] = ["/MC_OmegaPhia1_3Pion_Decay/dalitz2","/MC_OmegaPhia1_3Pion_Decay/hist2A", "/MC_OmegaPhia1_3Pion_Decay/hist2B" ,"/MC_OmegaPhia1_3Pion_Decay/hist2C"] # charm decays # D+ analyses["HadronDecays"][411] = { "Mult" : {}, "Spectrum" : {}, "Modes" : { "$D^+\\to\\bar{K}^0e^+\\nu_e$" : {}, "$D^+\\to\\pi^0e^+\\nu_e$" : {}, "$D^+\\to \\bar{K}_1(1270)^0e^+\\nu_e$" : {}, "$D^+\\to\\bar{K}^0\\mu^+\\nu_\\mu$" : {}, "$D^+\\to\\pi^0\\mu^+\\nu_\\mu$" : {}, "$D^+\\to \\bar{K}_1(1270)^0\\mu^+\\nu_\\mu$" : {}, "$D^+\\to\\eta e^+\\nu_e$" : {}, "$D^+\\to\\eta\\mu^+\\nu_\\mu$" : {}, "$D^+\\to\\eta^\\prime e^+\\nu_e$" : {}, "$D^+\\to\\eta^\\prime\\mu^+\\nu_\\mu$" : {}, "$D^+\\to\\rho^0 e^+\\nu_e$" : {}, "$D^+\\to\\rho^0\\mu^+\\nu_\\mu$" : {}, "$D^+\\to\\omega e^+\\nu_e$" : {}, "$D^+\\to\\omega\\mu^+\\nu_\\mu$" : {}, "$D^+\\to\\bar{K}^{*0}e^+\\nu_e$" : {}, "$D^+\\to\\bar{K}^{*0}\\mu^+\\nu_\\mu$" : {}, "$D^+\\to\\bar{K}_2^{*0}e^+\\nu_e$" : {}, "$D^+\\to\\bar{K}_2^{*0}\\mu^+\\nu_\\mu$" : {}, "$D^+\\to K^-\\pi^+\\pi^+$" : {}, "$D^+\\to K^+\\pi^-\\pi^+$" : {}, "$D^+\\to\\bar{K}^0\\pi^+\\pi^0$" : {}, }} analyses["HadronDecays"][411]["Mult"][221] = ["/CLEOC_2006_I728043/d01-x01-y01"] analyses["HadronDecays"][411]["Mult"][331] = ["/CLEOC_2006_I728043/d02-x01-y01"] analyses["HadronDecays"][411]["Mult"][333] = ["/CLEOC_2006_I728043/d03-x01-y01"] analyses["HadronDecays"][411]["Spectrum"][221] = ["/CLEOC_2006_I728043/d04-x01-y01"] analyses["HadronDecays"][411]["Spectrum"][333] = ["/CLEOC_2006_I728043/d05-x01-y01"] analyses["HadronDecays"][411]["Spectrum"][11] = ["/CLEOC_2006_I715096/d01-x01-y01"] analyses["HadronDecays"][411]["Modes"]["$D^+\\to\\bar{K}^0e^+\\nu_e$" ]["data"] = ["/BESIII_2017_I1519425/d01-x01-y01","/CLEOC_2009_I823313/d01-x01-y04", "/CLEOC_2008_I769777/d01-x01-y04"] analyses["HadronDecays"][411]["Modes"]["$D^+\\to\\bar{K}^0e^+\\nu_e$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_411p_311m_11m_energy", "/MC_Semi_Leptonic_Decay/h_411p_311m_11m_scale", "/MC_Semi_Leptonic_Decay/h_411m_311p_11p_energy", "/MC_Semi_Leptonic_Decay/h_411m_311p_11p_scale"] analyses["HadronDecays"][411]["Modes"]["$D^+\\to\\bar{K}^0\\mu^+\\nu_\\mu$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_411p_311m_13m_energy", "/MC_Semi_Leptonic_Decay/h_411p_311m_13m_scale", "/MC_Semi_Leptonic_Decay/h_411m_311p_13p_energy", "/MC_Semi_Leptonic_Decay/h_411m_311p_13p_scale"] analyses["HadronDecays"][411]["Modes"]["$D^+\\to\\pi^0e^+\\nu_e$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_411p_111p_11m_energy", "/MC_Semi_Leptonic_Decay/h_411p_111p_11m_scale", "/MC_Semi_Leptonic_Decay/h_411m_111p_11p_energy", "/MC_Semi_Leptonic_Decay/h_411m_111p_11p_scale"] analyses["HadronDecays"][411]["Modes"]["$D^+\\to\\pi^0\\mu^+\\nu_\\mu$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_411p_111p_13m_energy", "/MC_Semi_Leptonic_Decay/h_411p_111p_13m_scale", "/MC_Semi_Leptonic_Decay/h_411m_111p_13p_energy", "/MC_Semi_Leptonic_Decay/h_411m_111p_13p_scale"] analyses["HadronDecays"][411]["Modes"]["$D^+\\to\\pi^0e^+\\nu_e$" ]["data"] = ["/BESIII_2017_I1519425/d02-x01-y01","/CLEOC_2009_I823313/d01-x01-y03", "/CLEOC_2008_I769777/d01-x01-y02"] analyses["HadronDecays"][411]["Modes"]["$D^+\\to\\pi^0\\mu^+\\nu_\\mu$" ]["data"] = ["/BESIII_2018_I1655158/d01-x01-y01"] analyses["HadronDecays"][411]["Modes"]["$D^+\\to \\bar{K}_1(1270)^0e^+\\nu_e$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_411p_10313m_11m_energy", "/MC_Semi_Leptonic_Decay/h_411p_10313m_11m_scale", "/MC_Semi_Leptonic_Decay/h_411m_10313p_11p_energy", "/MC_Semi_Leptonic_Decay/h_411m_10313p_11p_scale"] analyses["HadronDecays"][411]["Modes"]["$D^+\\to \\bar{K}_1(1270)^0\\mu^+\\nu_\\mu$"]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_411p_10313m_13m_energy", "/MC_Semi_Leptonic_Decay/h_411p_10313m_13m_scale", "/MC_Semi_Leptonic_Decay/h_411m_10313p_13p_energy", "/MC_Semi_Leptonic_Decay/h_411m_10313p_13p_scale"] analyses["HadronDecays"][411]["Modes"]["$D^+\\to K^-\\pi^+\\pi^+$" ]["MC" ] = ["/MC_D_Dalitz/dalitz3","/MC_D_Dalitz/h_Kpiall3", "/MC_D_Dalitz/h_Kpihigh3","/MC_D_Dalitz/h_Kpilow3", "/MC_D_Dalitz/h_pipi3"] analyses["HadronDecays"][411]["Modes"]["$D^+\\to K^+\\pi^-\\pi^+$" ]["MC" ] = ["/MC_D_Dalitz/dalitz5","/MC_D_Dalitz/h_kppim5", "/MC_D_Dalitz/h_kppip5","/MC_D_Dalitz/h_pippim5",] analyses["HadronDecays"][411]["Modes"]["$D^+\\to\\bar{K}^0\\pi^+\\pi^0$" ]["MC" ] = ["/MC_D_Dalitz/dalitz4","/MC_D_Dalitz/h_Kpi04", "/MC_D_Dalitz/h_Kpip4","/MC_D_Dalitz/h_pipi4"] analyses["HadronDecays"][411]["Modes"]["$D^+\\to\\eta e^+\\nu_e$" ]["data" ] = ["/CLEOC_2011_I875526/d01-x01-y01","/CLEOC_2011_I875526/d01-x01-y02","/BESIII_2018_I1662660/d01-x01-y01"] analyses["HadronDecays"][411]["Modes"]["$D^+\\to\\eta e^+\\nu_e$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_411p_221p_11m_energy", "/MC_Semi_Leptonic_Decay/h_411p_221p_11m_scale", "/MC_Semi_Leptonic_Decay/h_411m_221p_11p_energy", "/MC_Semi_Leptonic_Decay/h_411m_221p_11p_scale"] analyses["HadronDecays"][411]["Modes"]["$D^+\\to\\eta\\mu^+\\nu_\\mu$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_411p_221p_13m_energy", "/MC_Semi_Leptonic_Decay/h_411p_221p_13m_scale", "/MC_Semi_Leptonic_Decay/h_411m_221p_13p_energy", "/MC_Semi_Leptonic_Decay/h_411m_221p_13p_scale"] analyses["HadronDecays"][411]["Modes"]["$D^+\\to\\eta^\\prime e^+\\nu_e$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_411p_331p_11m_energy", "/MC_Semi_Leptonic_Decay/h_411p_331p_11m_scale", "/MC_Semi_Leptonic_Decay/h_411m_331p_11p_energy", "/MC_Semi_Leptonic_Decay/h_411m_331p_11p_scale"] analyses["HadronDecays"][411]["Modes"]["$D^+\\to\\eta^\\prime\\mu^+\\nu_\\mu$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_411p_331p_13m_energy", "/MC_Semi_Leptonic_Decay/h_411p_331p_13m_scale", "/MC_Semi_Leptonic_Decay/h_411m_331p_13p_energy", "/MC_Semi_Leptonic_Decay/h_411m_331p_13p_scale"] analyses["HadronDecays"][411]["Modes"]["$D^+\\to\\rho^0 e^+\\nu_e$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_411p_113p_11m_energy", "/MC_Semi_Leptonic_Decay/h_411p_113p_11m_scale", "/MC_Semi_Leptonic_Decay/h_411m_113p_11p_energy", "/MC_Semi_Leptonic_Decay/h_411m_113p_11p_scale"] analyses["HadronDecays"][411]["Modes"]["$D^+\\to\\rho^0\\mu^+\\nu_\\mu$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_411p_113p_13m_energy", "/MC_Semi_Leptonic_Decay/h_411p_113p_13m_scale", "/MC_Semi_Leptonic_Decay/h_411m_113p_13p_energy", "/MC_Semi_Leptonic_Decay/h_411m_113p_13p_scale"] analyses["HadronDecays"][411]["Modes"]["$D^+\\to\\omega e^+\\nu_e$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_411p_223p_11m_energy", "/MC_Semi_Leptonic_Decay/h_411p_223p_11m_scale", "/MC_Semi_Leptonic_Decay/h_411m_223p_11p_energy", "/MC_Semi_Leptonic_Decay/h_411m_223p_11p_scale"] analyses["HadronDecays"][411]["Modes"]["$D^+\\to\\omega\\mu^+\\nu_\\mu$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_411p_223p_13m_energy", "/MC_Semi_Leptonic_Decay/h_411p_223p_13m_scale", "/MC_Semi_Leptonic_Decay/h_411m_223p_13p_energy", "/MC_Semi_Leptonic_Decay/h_411m_223p_13p_scale"] analyses["HadronDecays"][411]["Modes"]["$D^+\\to\\bar{K}^{*0}e^+\\nu_e$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_411p_313m_11m_energy", "/MC_Semi_Leptonic_Decay/h_411p_313m_11m_scale", "/MC_Semi_Leptonic_Decay/h_411m_313p_11p_energy", "/MC_Semi_Leptonic_Decay/h_411m_313p_11p_scale"] analyses["HadronDecays"][411]["Modes"]["$D^+\\to\\bar{K}^{*0}\\mu^+\\nu_\\mu$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_411p_313m_13m_energy", "/MC_Semi_Leptonic_Decay/h_411p_313m_13m_scale", "/MC_Semi_Leptonic_Decay/h_411m_313p_13p_energy", "/MC_Semi_Leptonic_Decay/h_411m_313p_13p_scale"] analyses["HadronDecays"][411]["Modes"]["$D^+\\to\\bar{K}_2^{*0}e^+\\nu_e$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_411p_315m_11m_energy", "/MC_Semi_Leptonic_Decay/h_411p_315m_11m_scale", "/MC_Semi_Leptonic_Decay/h_411m_315p_11p_energy", "/MC_Semi_Leptonic_Decay/h_411m_315p_11p_scale"] analyses["HadronDecays"][411]["Modes"]["$D^+\\to\\bar{K}_2^{*0}\\mu^+\\nu_\\mu$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_411p_315m_13m_energy", "/MC_Semi_Leptonic_Decay/h_411p_315m_13m_scale", "/MC_Semi_Leptonic_Decay/h_411m_315p_13p_energy", "/MC_Semi_Leptonic_Decay/h_411m_315p_13p_scale"] # D^0 analyses["HadronDecays"][421] ={ "Mult" : {}, "Spectrum" : {}, "Modes" : { "$D^0\\to K^-e^+\\nu_e$" : {}, "$D^0\\to K^-\\mu^+\\nu_\\mu$" : {}, "$D^0\\to K^{*-}e^+\\nu_e$" : {}, "$D^0\\to K^{*-}\\mu^+\\nu_\\mu$" : {}, "$D^0\\to K^{*-}_2e^+\\nu_e$" : {}, "$D^0\\to K^{*-}_2\\mu^+\\nu_\\mu$" : {}, "$D^0\\to K_1(1270)^{-}e^+\\nu_e$" : {}, "$D^0\\to K_1(1270)^{-}\\mu^+\\nu_\\mu$": {}, "$D^0\\to \\pi^-e^+\\nu_e$" : {}, "$D^0\\to \\pi^-\\mu^+\\nu_\\mu$" : {}, "$D^0\\to \\rho^-e^+\\nu_e$" : {}, "$D^0\\to \\rho^-\\mu^+\\nu_\\mu$" : {}, "$D^0\\to K^-\\pi^+\\pi^0$" : {}, "$D^0\\to \\bar{K}^0\\pi^+\\pi^-$" : {}, "$D^0\\to \\eta\\pi^+\\pi^-$" : {}, }} analyses["HadronDecays"][421]["Mult"][221] = ["/CLEOC_2006_I728043/d01-x01-y02"] analyses["HadronDecays"][421]["Mult"][331] = ["/CLEOC_2006_I728043/d02-x01-y02"] analyses["HadronDecays"][421]["Mult"][333] = ["/CLEOC_2006_I728043/d03-x01-y02"] analyses["HadronDecays"][421]["Spectrum"][221] = ["/CLEOC_2006_I728043/d04-x01-y02"] analyses["HadronDecays"][421]["Spectrum"][333] = ["/CLEOC_2006_I728043/d05-x01-y02"] analyses["HadronDecays"][421]["Spectrum"][11] = ["/CLEOC_2006_I715096/d01-x01-y02"] analyses["HadronDecays"][421]["Modes"]["$D^0\\to \\eta\\pi^+\\pi^-$"]["data"] = ["/CLEOC_2008_I779705/d01-x01-y01","/CLEOC_2008_I779705/d01-x01-y02"] analyses["HadronDecays"][421]["Modes"]["$D^0\\to K^{*-}e^+\\nu_e$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_421p_323m_11m_energy", "/MC_Semi_Leptonic_Decay/h_421p_323m_11m_scale", "/MC_Semi_Leptonic_Decay/h_421m_323p_11p_energy", "/MC_Semi_Leptonic_Decay/h_421m_323p_11p_scale"] analyses["HadronDecays"][421]["Modes"]["$D^0\\to K^{*-}\\mu^+\\nu_\\mu$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_421p_323m_13m_energy", "/MC_Semi_Leptonic_Decay/h_421p_323m_13m_scale", "/MC_Semi_Leptonic_Decay/h_421m_323p_13p_energy", "/MC_Semi_Leptonic_Decay/h_421m_323p_13p_scale"] analyses["HadronDecays"][421]["Modes"]["$D^0\\to K^{*-}_2e^+\\nu_e$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_421p_325m_11m_energy", "/MC_Semi_Leptonic_Decay/h_421p_325m_11m_scale", "/MC_Semi_Leptonic_Decay/h_421m_325p_11p_energy", "/MC_Semi_Leptonic_Decay/h_421m_325p_11p_scale"] analyses["HadronDecays"][421]["Modes"]["$D^0\\to K^{*-}_2\\mu^+\\nu_\\mu$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_421p_325m_13m_energy", "/MC_Semi_Leptonic_Decay/h_421p_325m_13m_scale", "/MC_Semi_Leptonic_Decay/h_421m_325p_13p_energy", "/MC_Semi_Leptonic_Decay/h_421m_325p_13p_scale"] analyses["HadronDecays"][421]["Modes"]["$D^0\\to K_1(1270)^{-}e^+\\nu_e$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_421p_10323m_11m_energy", "/MC_Semi_Leptonic_Decay/h_421p_10323m_11m_scale", "/MC_Semi_Leptonic_Decay/h_421m_10323p_11p_energy", "/MC_Semi_Leptonic_Decay/h_421m_10323p_11p_scale"] analyses["HadronDecays"][421]["Modes"]["$D^0\\to K_1(1270)^{-}\\mu^+\\nu_\\mu$"]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_421p_10323m_13m_energy", "/MC_Semi_Leptonic_Decay/h_421p_10323m_13m_scale", "/MC_Semi_Leptonic_Decay/h_421m_10323p_13p_energy", "/MC_Semi_Leptonic_Decay/h_421m_10323p_13p_scale"] analyses["HadronDecays"][421]["Modes"]["$D^0\\to K^-e^+\\nu_e$" ]["data"] = ["/BESIII_2015_I1391138/d01-x01-y03", "/BABAR_2007_I1091435/d01-x01-y01", "/CLEOC_2009_I823313/d01-x01-y02", "/CLEOC_2008_I769777/d01-x01-y03"] analyses["HadronDecays"][421]["Modes"]["$D^0\\to K^-e^+\\nu_e$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_421p_321m_11m_energy", "/MC_Semi_Leptonic_Decay/h_421p_321m_11m_scale", "/MC_Semi_Leptonic_Decay/h_421m_321p_11p_energy", "/MC_Semi_Leptonic_Decay/h_421m_321p_11p_scale"] analyses["HadronDecays"][421]["Modes"]["$D^0\\to K^-\\mu^+\\nu_\\mu$" ]["data"] = ["/BESIII_2018_I1697371/d01-x01-y01"] analyses["HadronDecays"][421]["Modes"]["$D^0\\to K^-\\mu^+\\nu_\\mu$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_421p_321m_13m_energy", "/MC_Semi_Leptonic_Decay/h_421p_321m_13m_scale", "/MC_Semi_Leptonic_Decay/h_421m_321p_13p_energy", "/MC_Semi_Leptonic_Decay/h_421m_321p_13p_scale"] analyses["HadronDecays"][421]["Modes"]["$D^0\\to \\pi^-e^+\\nu_e$" ]["data"] = ["/BABAR_2015_I1334693/d01-x01-y01", "/BESIII_2015_I1391138/d02-x01-y03", "/CLEOC_2009_I823313/d01-x01-y01", "/CLEOC_2008_I769777/d01-x01-y01"] analyses["HadronDecays"][421]["Modes"]["$D^0\\to \\pi^-\\mu^+\\nu_\\mu$" ]["data"] = ["/BESIII_2018_I1655158/d02-x01-y01"] analyses["HadronDecays"][421]["Modes"]["$D^0\\to \\pi^-e^+\\nu_e$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_421p_211m_11m_energy", "/MC_Semi_Leptonic_Decay/h_421p_211m_11m_scale", "/MC_Semi_Leptonic_Decay/h_421m_211p_11p_energy", "/MC_Semi_Leptonic_Decay/h_421m_211p_11p_scale"] analyses["HadronDecays"][421]["Modes"]["$D^0\\to \\pi^-\\mu^+\\nu_\\mu$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_421p_211m_13m_energy", "/MC_Semi_Leptonic_Decay/h_421p_211m_13m_scale", "/MC_Semi_Leptonic_Decay/h_421m_211p_13p_energy", "/MC_Semi_Leptonic_Decay/h_421m_211p_13p_scale"] analyses["HadronDecays"][421]["Modes"]["$D^0\\to \\rho^-e^+\\nu_e$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_421p_213m_11m_energy", "/MC_Semi_Leptonic_Decay/h_421p_213m_11m_scale", "/MC_Semi_Leptonic_Decay/h_421m_213p_11p_energy", "/MC_Semi_Leptonic_Decay/h_421m_213p_11p_scale"] analyses["HadronDecays"][421]["Modes"]["$D^0\\to \\rho^-\\mu^+\\nu_\\mu$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_421p_213m_13m_energy", "/MC_Semi_Leptonic_Decay/h_421p_213m_13m_scale", "/MC_Semi_Leptonic_Decay/h_421m_213p_13p_energy", "/MC_Semi_Leptonic_Decay/h_421m_213p_13p_scale"] analyses["HadronDecays"][421]["Modes"]["$D^0\\to K^-\\pi^+\\pi^0$" ]["MC" ] = ["/MC_D_Dalitz/dalitz2","/MC_D_Dalitz/h_minus2", "/MC_D_Dalitz/h_neutral2","/MC_D_Dalitz/h_pipi2"] analyses["HadronDecays"][421]["Modes"]["$D^0\\to \\bar{K}^0\\pi^+\\pi^-$" ]["MC" ] = ["/MC_D_Dalitz/dalitz1","/MC_D_Dalitz/h_minus1", "/MC_D_Dalitz/h_pipi1","/MC_D_Dalitz/h_plus1"] analyses["HadronDecays"][431] = { "Mult" : {}, "Spectrum" : {}, "Modes" : { "$D_s^+\\to \\eta e^+\\nu_e$" : {}, "$D_s^+\\to \\eta \\mu^+\\nu_\\mu$" : {}, "$D_s^+\\to \\eta^\\prime e^+\\nu_e$" : {}, "$D_s^+\\to \\eta^\\prime \\mu^+\\nu_\\mu$" : {}, "$D_s^+\\to \\phi e^+\\nu_e$" : {}, "$D_s^+\\to \\phi \\mu^+\\nu_\\mu$" : {}, "$D_s^+\\to K^0 e^+\\nu_e$" : {}, "$D_s^+\\to K^0 \\mu^+\\nu_\\mu$" : {}, "$D_s^+\\to K^{*0} e^+\\nu_e$" : {}, "$D_s^+\\to K^{*0} \\mu^+\\nu_\\mu$" : {}, "$D_s^+\\to K^+\\pi^-\\pi^+$" : {}, }} analyses["HadronDecays"][431]["Mult"][221] = ["/CLEOC_2006_I728043/d01-x01-y03"] analyses["HadronDecays"][431]["Mult"][331] = ["/CLEOC_2006_I728043/d02-x01-y03"] analyses["HadronDecays"][431]["Mult"][333] = ["/CLEOC_2006_I728043/d03-x01-y03"] analyses["HadronDecays"][431]["Spectrum"][221] = ["/CLEOC_2006_I728043/d04-x01-y03"] analyses["HadronDecays"][431]["Spectrum"][333] = ["/CLEOC_2006_I728043/d05-x01-y03"] analyses["HadronDecays"][431]["Modes"]["$D_s^+\\to \\eta e^+\\nu_e$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_431p_221p_11m_energy", "/MC_Semi_Leptonic_Decay/h_431p_221p_11m_scale", "/MC_Semi_Leptonic_Decay/h_431m_221p_11p_energy", "/MC_Semi_Leptonic_Decay/h_431m_221p_11p_scale"] analyses["HadronDecays"][431]["Modes"]["$D_s^+\\to \\eta \\mu^+\\nu_\\mu$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_431p_221p_13m_energy", "/MC_Semi_Leptonic_Decay/h_431p_221p_13m_scale", "/MC_Semi_Leptonic_Decay/h_431m_221p_13p_energy", "/MC_Semi_Leptonic_Decay/h_431m_221p_13p_scale"] analyses["HadronDecays"][431]["Modes"]["$D_s^+\\to \\eta^\\prime e^+\\nu_e$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_431p_331p_11m_energy", "/MC_Semi_Leptonic_Decay/h_431p_331p_11m_scale", "/MC_Semi_Leptonic_Decay/h_431m_331p_11p_energy", "/MC_Semi_Leptonic_Decay/h_431m_331p_11p_scale"] analyses["HadronDecays"][431]["Modes"]["$D_s^+\\to \\eta^\\prime \\mu^+\\nu_\\mu$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_431p_331p_13m_energy", "/MC_Semi_Leptonic_Decay/h_431p_331p_13m_scale", "/MC_Semi_Leptonic_Decay/h_431m_331p_13p_energy", "/MC_Semi_Leptonic_Decay/h_431m_331p_13p_scale"] analyses["HadronDecays"][431]["Modes"]["$D_s^+\\to \\phi e^+\\nu_e$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_431p_333p_11m_energy", "/MC_Semi_Leptonic_Decay/h_431p_333p_11m_scale", "/MC_Semi_Leptonic_Decay/h_431m_333p_11p_energy", "/MC_Semi_Leptonic_Decay/h_431m_333p_11p_scale"] analyses["HadronDecays"][431]["Modes"]["$D_s^+\\to \\phi \\mu^+\\nu_\\mu$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_431p_333p_13m_energy", "/MC_Semi_Leptonic_Decay/h_431p_333p_13m_scale", "/MC_Semi_Leptonic_Decay/h_431m_333p_13p_energy", "/MC_Semi_Leptonic_Decay/h_431m_333p_13p_scale"] analyses["HadronDecays"][431]["Modes"]["$D_s^+\\to K^0 e^+\\nu_e$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_431p_311p_11m_energy", "/MC_Semi_Leptonic_Decay/h_431p_311p_11m_scale", "/MC_Semi_Leptonic_Decay/h_431m_311m_11p_energy", "/MC_Semi_Leptonic_Decay/h_431m_311m_11p_scale"] analyses["HadronDecays"][431]["Modes"]["$D_s^+\\to K^0 \\mu^+\\nu_\\mu$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_431p_311p_13m_energy", "/MC_Semi_Leptonic_Decay/h_431p_311p_13m_scale", "/MC_Semi_Leptonic_Decay/h_431m_311m_13p_energy", "/MC_Semi_Leptonic_Decay/h_431m_311m_13p_scale"] analyses["HadronDecays"][431]["Modes"]["$D_s^+\\to K^{*0} e^+\\nu_e$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_431p_313p_11m_energy", "/MC_Semi_Leptonic_Decay/h_431p_313p_11m_scale", "/MC_Semi_Leptonic_Decay/h_431m_313m_11p_energy", "/MC_Semi_Leptonic_Decay/h_431m_313m_11p_scale"] analyses["HadronDecays"][431]["Modes"]["$D_s^+\\to K^{*0} \\mu^+\\nu_\\mu$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_431p_313p_13m_scale", "/MC_Semi_Leptonic_Decay/h_431p_313p_13m_energy", "/MC_Semi_Leptonic_Decay/h_431m_313m_13p_scale", "/MC_Semi_Leptonic_Decay/h_431m_313m_13p_energy"] analyses["HadronDecays"][431]["Modes"]["$D_s^+\\to K^+\\pi^-\\pi^+$" ]["MC" ] = ["/MC_D_Dalitz/dalitz6","/MC_D_Dalitz/h_kppim6", "/MC_D_Dalitz/h_kppip6","/MC_D_Dalitz/h_pippim6"] # D_2 analyses["HadronDecays"][425] = { "Modes" : { "$D^0_2\\to D^+\pi^-$" : {}, "$D^0_2\\to D^{*+}\pi^-$" : {}}} analyses["HadronDecays"][425]["Modes"]["$D^0_2\\to D^+\pi^-$" ]["data"] = ["/ARGUS_1989_I268577/d03-x01-y01"] analyses["HadronDecays"][425]["Modes"]["$D^0_2\\to D^{*+}\pi^-$"]["data"] = ["/ARGUS_1989_I280943/d03-x01-y02","/BABAR_2010_I867611/d01-x01-y02", "/CLEO_1990_I281039/d01-x01-y02","/LHCB_2013_I1243156/d08-x01-y02", "/CLEOII_1994_I372349/d02-x01-y01"] analyses["HadronDecays"][415] = { "Modes" : { "$D^+_2\\to D^{*0}\pi^+$" : {}}} analyses["HadronDecays"][415]["Modes"]["$D^+_2\\to D^{*0}\pi^+$"]["data"] = ["/CLEOII_1994_I378319/d02-x01-y01"] # D_1 analyses["HadronDecays"][10423] = { "Modes" : { "$D^0_1\\to D^{*+}\pi^-$" : {}}} analyses["HadronDecays"][10423]["Modes"]["$D^0_1\\to D^{*+}\pi^-$"]["data"] = ["/ARGUS_1989_I280943/d03-x01-y01","/BABAR_2010_I867611/d01-x01-y01", "/CLEO_1990_I281039/d01-x01-y01","/LHCB_2013_I1243156/d08-x01-y01", "/CLEOII_1994_I372349/d02-x01-y02"] analyses["HadronDecays"][10413] = { "Modes" : { "$D^+_1\\to D^{*0}\pi^+$" : {}}} analyses["HadronDecays"][10413]["Modes"]["$D^+_1\\to D^{*0}\pi^+$"]["data"] = ["/CLEOII_1994_I378319/d03-x01-y01"] # D_s1(2536) analyses["HadronDecays"][10433] = { "Modes" : { "$D^+_{s1}\\to D^{*+}K^0$" : {}, "$D^+_{s1}\\to D^{*0}K^+$" : {}}} analyses["HadronDecays"][10433]["Modes"]["$D^+_{s1}\\to D^{*+}K^0$"]["data"]= ["/BABAR_2011_I892421/d01-x01-y01","/BABAR_2011_I892421/d02-x01-y01", "/BELLE_2008_I762013/d01-x01-y01","/BELLE_2008_I762013/d02-x01-y01", "/BELLE_2008_I762013/d03-x01-y01"] analyses["HadronDecays"][10433]["Modes"]["$D^+_{s1}\\to D^{*0}K^+$"]["data"]= ["/CLEOII_1993_I352823/d04-x01-y01"] # D_s1(2460) analyses["HadronDecays"][20433] = { "Modes" : { "$D^{\\prime+}_{s1}\\to D^{*+}_s\pi^0$" : {}}} analyses["HadronDecays"][20433]["Modes"]["$D^{\\prime+}_{s1}\\to D^{*+}_s\pi^0$"]["data"]= ["/BABAR_2006_I714447/d05-x01-y01"] # B0 analyses["HadronDecays"][511]={ "Spectrum" : {}, "Modes" : { "$B^0\\to\\pi^- e^+\\nu_e$" : {}, "$B^0\\to\\pi^- \\mu^+\\nu_\\mu$" : {}, "$B^0\\to\\rho^- e^+\\nu_e$" : {}, "$B^0\\to\\rho^- \\mu^+\\nu_\\mu$" : {}, "$B^0\\to D^- e^+\\nu_e$" : {}, "$B^0\\to D^- \\mu^+\\nu_\\mu$" : {}, "$B^0\\to D^{*-} e^+\\nu_e$" : {}, "$B^0\\to D^{*-} \\mu^+\\nu_\\mu$" : {}, "$B^0\\to D^{*-}_2 e^+\\nu_e$" : {}, "$B^0\\to D^{*-}_2 \\mu^+\\nu_\\mu$" : {}, "$B^0\\to D^{*-}_0(2400) e^+\\nu_e$" : {}, "$B^0\\to D^{*-}_0(2400) \\mu^+\\nu_\\mu$" : {}, "$B^0\\to D^{-}_1(2430) e^+\\nu_e$" : {}, "$B^0\\to D^{-}_1(2430) \\mu^+\\nu_\\mu$" : {}, "$B^0\\to D^{-}_1(2420) e^+\\nu_e$" : {}, "$B^0\\to D^{-}_1(2420) \\mu^+\\nu_\\mu$" : {}, "$B^0\\to K^{*0} e^+e^-$" : {}, "$B^0\\to K^{*0} \\mu^+\\mu^-$" : {}, "$B^0\\to K^0 e^+e^-$" : {}, "$B^0\\to K^0 \\mu^+\\mu^-$" : {}, "$B\\to X_s\\gamma$" : {},}} analyses["HadronDecays"][521]={ "Spectrum" : {}, "Modes" : { "$B^+\\to\\pi^0 e^+\\nu_e$" : {}, "$B^+\\to\\pi^0 \\mu^+\\nu_\\mu$" : {}, "$B^+\\to\\omega e^+\\nu_e$" : {}, "$B^+\\to\\omega \\mu^+\\nu_\\mu$" : {}, "$B^+\\to\\rho^0 e^+\\nu_e$" : {}, "$B^+\\to\\rho^0 \\mu^+\\nu_\\mu$" : {}, "$B^+\\to\\eta^\\prime e^+\\nu_e$" : {}, "$B^+\\to\\eta^\\prime \\mu^+\\nu_\\mu$" : {}, "$B^+\\to\\eta e^+\\nu_e$" : {}, "$B^+\\to\\eta \\mu^+\\nu_\\mu$" : {}, "$B^+\\to\\bar{D}^0 e^+\\nu_e$" : {}, "$B^+\\to\\bar{D}^0 \\mu^+\\nu_\\mu$" : {}, "$B^+\\to\\bar{D}^{*0} e^+\\nu_e$" : {}, "$B^+\\to\\bar{D}^{*0} \\mu^+\\nu_\\mu$" : {}, "$B^+\\to\\bar{D}^{*0}_2 e^+\\nu_e$" : {}, "$B^+\\to\\bar{D}^{*0}_2 \\mu^+\\nu_\\mu$": {}, "$B^+\\to\\bar{D}^{*0}_0(2400) e^+\\nu_e$" : {}, "$B^+\\to\\bar{D}^{*0}_0(2400) \\mu^+\\nu_\\mu$": {}, "$B^+\\to\\bar{D}^{0}_1(2430) e^+\\nu_e$" : {}, "$B^+\\to\\bar{D}^{0}_1(2430) \\mu^+\\nu_\\mu$" : {}, "$B^+\\to\\bar{D}^{0}_1(2420) e^+\\nu_e$" : {}, "$B^+\\to\\bar{D}^{0}_1(2420) \\mu^+\\nu_\\mu$" : {}, "$B^+\\to K^{*+} e^+e^-$" : {}, "$B^+\\to K^{*+} \\mu^+\\mu^-$" : {}, "$B^+\\to K^- e^+e^-$" : {}, "$B^+\\to K^- \\mu^+\\mu^-$" : {},} } analyses["HadronDecays"][511]["Spectrum"][311 ] = ["/ARGUS_1994_I354224/d01-x01-y01"] analyses["HadronDecays"][521]["Spectrum"][411 ] = ["/BABAR_2006_I719111/d01-x01-y01","/BABAR_2006_I719111/d01-x01-y02"] analyses["HadronDecays"][521]["Spectrum"][421 ] = ["/BABAR_2006_I719111/d02-x01-y01","/BABAR_2006_I719111/d02-x01-y02"] analyses["HadronDecays"][521]["Spectrum"][431 ] = ["/BABAR_2006_I719111/d03-x01-y01","/BABAR_2006_I719111/d03-x01-y02"] analyses["HadronDecays"][521]["Spectrum"][4122] = ["/BABAR_2006_I719111/d04-x01-y01","/BABAR_2006_I719111/d04-x01-y02"] analyses["HadronDecays"][511]["Spectrum"][411 ] = ["/BABAR_2006_I719111/d05-x01-y01","/BABAR_2006_I719111/d05-x01-y02", "/ARGUS_1991_I315059/d05-x01-y01"] analyses["HadronDecays"][511]["Spectrum"][413 ] = ["/ARGUS_1991_I315059/d07-x01-y01"] analyses["HadronDecays"][511]["Spectrum"][421 ] = ["/BABAR_2006_I719111/d06-x01-y01","/BABAR_2006_I719111/d06-x01-y02", "/ARGUS_1991_I315059/d06-x01-y01"] analyses["HadronDecays"][511]["Spectrum"][431 ] = ["/BABAR_2006_I719111/d07-x01-y01","/BABAR_2006_I719111/d07-x01-y02"] analyses["HadronDecays"][511]["Spectrum"][4122] = ["/BABAR_2006_I719111/d08-x01-y01","/BABAR_2006_I719111/d08-x01-y02"] analyses["HadronDecays"][521]["Modes"]["$B^+\\to\\pi^0 e^+\\nu_e$" ]["data"] = ["/BELLE_2013_I1238273/d02-x01-y01"] analyses["HadronDecays"][521]["Modes"]["$B^+\\to\\pi^0 e^+\\nu_e$" ]["MC"] = ["/MC_Semi_Leptonic_Decay/h_521p_111p_11m_energy", "/MC_Semi_Leptonic_Decay/h_521p_111p_11m_scale", "/MC_Semi_Leptonic_Decay/h_521m_111p_11p_energy", "/MC_Semi_Leptonic_Decay/h_521m_111p_11p_scale"] analyses["HadronDecays"][521]["Modes"]["$B^+\\to\\pi^0 \\mu^+\\nu_\\mu$" ]["MC"] = ["/MC_Semi_Leptonic_Decay/h_521p_111p_13m_energy", "/MC_Semi_Leptonic_Decay/h_521p_111p_13m_scale", "/MC_Semi_Leptonic_Decay/h_521m_111p_13p_energy", "/MC_Semi_Leptonic_Decay/h_521m_111p_13p_scale"] analyses["HadronDecays"][511]["Modes"]["$B^0\\to\\pi^- e^+\\nu_e$" ]["data"] = ["/BELLE_2011_I878990/d01-x01-y01","/BELLE_2013_I1238273/d01-x01-y01"] analyses["HadronDecays"][511]["Modes"]["$B^0\\to\\pi^- e^+\\nu_e$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_511p_211m_11m_energy", "/MC_Semi_Leptonic_Decay/h_511p_211m_11m_scale", "/MC_Semi_Leptonic_Decay/h_511m_211p_11p_energy", "/MC_Semi_Leptonic_Decay/h_511m_211p_11p_scale"] analyses["HadronDecays"][511]["Modes"]["$B^0\\to\\pi^- \\mu^+\\nu_\\mu$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_511p_211m_13m_scale", "/MC_Semi_Leptonic_Decay/h_511p_211m_13m_energy", "/MC_Semi_Leptonic_Decay/h_511m_211p_13p_scale", "/MC_Semi_Leptonic_Decay/h_511m_211p_13p_energy"] analyses["HadronDecays"][511]["Modes"]["$B^0\\to\\rho^- e^+\\nu_e$" ]["data"] = ["/BELLE_2013_I1238273/d03-x01-y01"] analyses["HadronDecays"][511]["Modes"]["$B^0\\to\\rho^- e^+\\nu_e$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_511p_213m_11m_energy", "/MC_Semi_Leptonic_Decay/h_511p_213m_11m_scale", "/MC_Semi_Leptonic_Decay/h_511m_213p_11p_energy", "/MC_Semi_Leptonic_Decay/h_511m_213p_11p_scale"] analyses["HadronDecays"][511]["Modes"]["$B^0\\to\\rho^- \\mu^+\\nu_\\mu$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_511p_213m_13m_energy", "/MC_Semi_Leptonic_Decay/h_511p_213m_13m_scale", "/MC_Semi_Leptonic_Decay/h_511m_213p_13p_energy", "/MC_Semi_Leptonic_Decay/h_511m_213p_13p_scale"] analyses["HadronDecays"][521]["Modes"]["$B^+\\to\\omega e^+\\nu_e$" ]["data"] = ["/BELLE_2013_I1238273/d05-x01-y01","/BABAR_2013_I1116411/d01-x01-y01"] analyses["HadronDecays"][521]["Modes"]["$B^+\\to\\omega e^+\\nu_e$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_521m_223p_11p_energy", "/MC_Semi_Leptonic_Decay/h_521m_223p_11p_scale", "/MC_Semi_Leptonic_Decay/h_521p_223p_11m_energy", "/MC_Semi_Leptonic_Decay/h_521p_223p_11m_scale"] analyses["HadronDecays"][521]["Modes"]["$B^+\\to\\omega \\mu^+\\nu_\\mu$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_521m_223p_13p_energy", "/MC_Semi_Leptonic_Decay/h_521m_223p_13p_scale", "/MC_Semi_Leptonic_Decay/h_521p_223p_13m_energy", "/MC_Semi_Leptonic_Decay/h_521p_223p_13m_scale",] analyses["HadronDecays"][521]["Modes"]["$B^+\\to\\rho^0 e^+\\nu_e$" ]["data"] = ["/BELLE_2013_I1238273/d04-x01-y01"] analyses["HadronDecays"][521]["Modes"]["$B^+\\to\\rho^0 e^+\\nu_e$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_521p_113p_11m_energy", "/MC_Semi_Leptonic_Decay/h_521p_113p_11m_scale", "/MC_Semi_Leptonic_Decay/h_521m_113p_11p_energy", "/MC_Semi_Leptonic_Decay/h_521m_113p_11p_scale"] analyses["HadronDecays"][521]["Modes"]["$B^+\\to\\rho^0 \\mu^+\\nu_\\mu$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_521p_113p_13m_energy", "/MC_Semi_Leptonic_Decay/h_521p_113p_13m_scale", "/MC_Semi_Leptonic_Decay/h_521m_113p_13p_energy", "/MC_Semi_Leptonic_Decay/h_521m_113p_13p_scale"] analyses["HadronDecays"][511]["Modes"]["$B^0\\to D^- e^+\\nu_e$" ]["data"] = ["/BELLE_2015_I1397632/d01-x01-y01"] analyses["HadronDecays"][511]["Modes"]["$B^0\\to D^- \\mu^+\\nu_\\mu$" ]["data"] = ["/BELLE_2015_I1397632/d01-x01-y02"] analyses["HadronDecays"][511]["Modes"]["$B^0\\to D^- e^+\\nu_e$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_511p_411m_11m_energy", "/MC_Semi_Leptonic_Decay/h_511p_411m_11m_scale", "/MC_Semi_Leptonic_Decay/h_511m_411p_11p_energy", "/MC_Semi_Leptonic_Decay/h_511m_411p_11p_scale"] analyses["HadronDecays"][511]["Modes"]["$B^0\\to D^- \\mu^+\\nu_\\mu$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_511p_411m_13m_energy", "/MC_Semi_Leptonic_Decay/h_511p_411m_13m_scale", "/MC_Semi_Leptonic_Decay/h_511m_411p_13p_energy", "/MC_Semi_Leptonic_Decay/h_511m_411p_13p_scale"] analyses["HadronDecays"][511]["Modes"]["$B^0\\to D^{*-} e^+\\nu_e$" ]["data"] = ["/BELLE_2017_I1512299/d01-x01-y01","/BELLE_2017_I1512299/d02-x01-y01", "/BELLE_2017_I1512299/d03-x01-y01","/BELLE_2017_I1512299/d04-x01-y01",] analyses["HadronDecays"][511]["Modes"]["$B^0\\to D^{*-} e^+\\nu_e$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_511p_413m_11m_energy", "/MC_Semi_Leptonic_Decay/h_511p_413m_11m_scale", "/MC_Semi_Leptonic_Decay/h_511m_413p_11p_energy", "/MC_Semi_Leptonic_Decay/h_511m_413p_11p_scale"] analyses["HadronDecays"][511]["Modes"]["$B^0\\to D^{*-} \\mu^+\\nu_\\mu$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_511p_413m_13m_energy", "/MC_Semi_Leptonic_Decay/h_511p_413m_13m_scale", "/MC_Semi_Leptonic_Decay/h_511m_413p_13p_energy", "/MC_Semi_Leptonic_Decay/h_511m_413p_13p_scale"] analyses["HadronDecays"][511]["Modes"]["$B^0\\to D^{*-}_2 e^+\\nu_e$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_511p_415m_11m_energy", "/MC_Semi_Leptonic_Decay/h_511p_415m_11m_scale", "/MC_Semi_Leptonic_Decay/h_511m_415p_11p_energy", "/MC_Semi_Leptonic_Decay/h_511m_415p_11p_scale"] analyses["HadronDecays"][511]["Modes"]["$B^0\\to D^{*-}_2 \\mu^+\\nu_\\mu$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_511p_415m_13m_energy", "/MC_Semi_Leptonic_Decay/h_511p_415m_13m_scale", "/MC_Semi_Leptonic_Decay/h_511m_415p_13p_energy", "/MC_Semi_Leptonic_Decay/h_511m_415p_13p_scale"] analyses["HadronDecays"][521]["Modes"]["$B^+\\to\\eta^\\prime e^+\\nu_e$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_521p_331p_11m_energy", "/MC_Semi_Leptonic_Decay/h_521p_331p_11m_scale", "/MC_Semi_Leptonic_Decay/h_521m_331p_11p_energy", "/MC_Semi_Leptonic_Decay/h_521m_331p_11p_scale"] analyses["HadronDecays"][521]["Modes"]["$B^+\\to\\eta^\\prime \\mu^+\\nu_\\mu$"]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_521p_331p_13m_energy", "/MC_Semi_Leptonic_Decay/h_521p_331p_13m_scale", "/MC_Semi_Leptonic_Decay/h_521m_331p_13p_energy", "/MC_Semi_Leptonic_Decay/h_521m_331p_13p_scale"] analyses["HadronDecays"][521]["Modes"]["$B^+\\to\\eta e^+\\nu_e$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_521p_221p_11m_energy", "/MC_Semi_Leptonic_Decay/h_521p_221p_11m_scale", "/MC_Semi_Leptonic_Decay/h_521m_221p_11p_energy", "/MC_Semi_Leptonic_Decay/h_521m_221p_11p_scale"] analyses["HadronDecays"][521]["Modes"]["$B^+\\to\\eta \\mu^+\\nu_\\mu$"]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_521p_221p_13m_energy", "/MC_Semi_Leptonic_Decay/h_521p_221p_13m_scale", "/MC_Semi_Leptonic_Decay/h_521m_221p_13p_energy", "/MC_Semi_Leptonic_Decay/h_521m_221p_13p_scale"] analyses["HadronDecays"][521]["Modes"]["$B^+\\to\\bar{D}^0 e^+\\nu_e$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_521p_421m_11m_energy", "/MC_Semi_Leptonic_Decay/h_521p_421m_11m_scale", "/MC_Semi_Leptonic_Decay/h_521m_421p_11p_energy", "/MC_Semi_Leptonic_Decay/h_521m_421p_11p_scale"] analyses["HadronDecays"][521]["Modes"]["$B^+\\to\\bar{D}^0 \\mu^+\\nu_\\mu$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_521p_421m_13m_energy", "/MC_Semi_Leptonic_Decay/h_521p_421m_13m_scale", "/MC_Semi_Leptonic_Decay/h_521m_421p_13p_energy", "/MC_Semi_Leptonic_Decay/h_521m_421p_13p_scale"] analyses["HadronDecays"][521]["Modes"]["$B^+\\to\\bar{D}^0 e^+\\nu_e$" ]["data"] = ["/BELLE_2015_I1397632/d02-x01-y01"] analyses["HadronDecays"][521]["Modes"]["$B^+\\to\\bar{D}^0 \\mu^+\\nu_\\mu$" ]["data"] = ["/BELLE_2015_I1397632/d02-x01-y02"] analyses["HadronDecays"][521]["Modes"]["$B^+\\to\\bar{D}^{*0} e^+\\nu_e$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_521p_423m_11m_energy", "/MC_Semi_Leptonic_Decay/h_521p_423m_11m_scale", "/MC_Semi_Leptonic_Decay/h_521m_423p_11p_energy", "/MC_Semi_Leptonic_Decay/h_521m_423p_11p_scale"] analyses["HadronDecays"][521]["Modes"]["$B^+\\to\\bar{D}^{*0} \\mu^+\\nu_\\mu$"]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_521p_423m_13m_energy", "/MC_Semi_Leptonic_Decay/h_521p_423m_13m_scale", "/MC_Semi_Leptonic_Decay/h_521m_423p_13p_energy", "/MC_Semi_Leptonic_Decay/h_521m_423p_13p_scale"] analyses["HadronDecays"][521]["Modes"]["$B^+\\to\\bar{D}^{*0}_2 e^+\\nu_e$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_521p_425m_11m_energy", "/MC_Semi_Leptonic_Decay/h_521p_425m_11m_scale", "/MC_Semi_Leptonic_Decay/h_521m_425p_11p_energy", "/MC_Semi_Leptonic_Decay/h_521m_425p_11p_scale"] analyses["HadronDecays"][521]["Modes"]["$B^+\\to\\bar{D}^{*0}_2 \\mu^+\\nu_\\mu$"]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_521p_425m_13m_energy", "/MC_Semi_Leptonic_Decay/h_521p_425m_13m_scale", "/MC_Semi_Leptonic_Decay/h_521m_425p_13p_energy", "/MC_Semi_Leptonic_Decay/h_521m_425p_13p_scale"] analyses["HadronDecays"][521]["Modes"]["$B^+\\to\\bar{D}^{*0}_0(2400) e^+\\nu_e$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_521p_10421m_11m_energy", "/MC_Semi_Leptonic_Decay/h_521p_10421m_11m_scale", "/MC_Semi_Leptonic_Decay/h_521m_10421p_11p_energy", "/MC_Semi_Leptonic_Decay/h_521m_10421p_11p_scale"] analyses["HadronDecays"][521]["Modes"]["$B^+\\to\\bar{D}^{*0}_0(2400) \\mu^+\\nu_\\mu$"]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_521p_10421m_13m_energy", "/MC_Semi_Leptonic_Decay/h_521p_10421m_13m_scale", "/MC_Semi_Leptonic_Decay/h_521m_10421p_13p_energy", "/MC_Semi_Leptonic_Decay/h_521m_10421p_13p_scale"] analyses["HadronDecays"][521]["Modes"]["$B^+\\to\\bar{D}^{0}_1(2430) e^+\\nu_e$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_521p_20423m_11m_energy", "/MC_Semi_Leptonic_Decay/h_521p_20423m_11m_scale", "/MC_Semi_Leptonic_Decay/h_521m_20423p_11p_energy", "/MC_Semi_Leptonic_Decay/h_521m_20423p_11p_scale"] analyses["HadronDecays"][521]["Modes"]["$B^+\\to\\bar{D}^{0}_1(2430) \\mu^+\\nu_\\mu$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_521p_20423m_13m_energy", "/MC_Semi_Leptonic_Decay/h_521p_20423m_13m_scale", "/MC_Semi_Leptonic_Decay/h_521m_20423p_13p_energy", "/MC_Semi_Leptonic_Decay/h_521m_20423p_13p_scale"] analyses["HadronDecays"][521]["Modes"]["$B^+\\to\\bar{D}^{0}_1(2420) e^+\\nu_e$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_521p_10423m_11m_energy", "/MC_Semi_Leptonic_Decay/h_521p_10423m_11m_scale", "/MC_Semi_Leptonic_Decay/h_521m_10423p_11p_energy", "/MC_Semi_Leptonic_Decay/h_521m_10423p_11p_scale"] analyses["HadronDecays"][521]["Modes"]["$B^+\\to\\bar{D}^{0}_1(2420) \\mu^+\\nu_\\mu$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_521p_10423m_13m_energy", "/MC_Semi_Leptonic_Decay/h_521p_10423m_13m_scale", "/MC_Semi_Leptonic_Decay/h_521m_10423p_13p_energy", "/MC_Semi_Leptonic_Decay/h_521m_10423p_13p_scale"] analyses["HadronDecays"][511]["Modes"]["$B^0\\to D^{*-}_0(2400) e^+\\nu_e$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_511p_10411m_11m_energy", "/MC_Semi_Leptonic_Decay/h_511p_10411m_11m_scale", "/MC_Semi_Leptonic_Decay/h_511m_10411p_11p_energy", "/MC_Semi_Leptonic_Decay/h_511m_10411p_11p_scale"] analyses["HadronDecays"][511]["Modes"]["$B^0\\to D^{*-}_0(2400) \\mu^+\\nu_\\mu$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_511p_10411m_13m_energy", "/MC_Semi_Leptonic_Decay/h_511p_10411m_13m_scale", "/MC_Semi_Leptonic_Decay/h_511m_10411p_13p_energy", "/MC_Semi_Leptonic_Decay/h_511m_10411p_13p_scale"] analyses["HadronDecays"][511]["Modes"]["$B^0\\to D^{-}_1(2430) e^+\\nu_e$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_511p_20413m_11m_energy", "/MC_Semi_Leptonic_Decay/h_511p_20413m_11m_scale", "/MC_Semi_Leptonic_Decay/h_511m_20413p_11p_energy", "/MC_Semi_Leptonic_Decay/h_511m_20413p_11p_scale"] analyses["HadronDecays"][511]["Modes"]["$B^0\\to D^{-}_1(2430) \\mu^+\\nu_\\mu$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_511p_20413m_13m_energy", "/MC_Semi_Leptonic_Decay/h_511p_20413m_13m_scale", "/MC_Semi_Leptonic_Decay/h_511m_20413p_13p_energy", "/MC_Semi_Leptonic_Decay/h_511m_20413p_13p_scale"] analyses["HadronDecays"][511]["Modes"]["$B^0\\to D^{-}_1(2420) e^+\\nu_e$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_511p_10413m_11m_energy", "/MC_Semi_Leptonic_Decay/h_511p_10413m_11m_scale", "/MC_Semi_Leptonic_Decay/h_511m_10413p_11p_energy", "/MC_Semi_Leptonic_Decay/h_511m_10413p_11p_scale"] analyses["HadronDecays"][511]["Modes"]["$B^0\\to D^{-}_1(2420) \\mu^+\\nu_\\mu$" ]["MC" ] = ["/MC_Semi_Leptonic_Decay/h_511p_10413m_13m_energy", "/MC_Semi_Leptonic_Decay/h_511p_10413m_13m_scale", "/MC_Semi_Leptonic_Decay/h_511m_10413p_13p_energy", "/MC_Semi_Leptonic_Decay/h_511m_10413p_13p_scale"] analyses["HadronDecays"][511]["Modes"]["$B^0\\to K^{*0} e^+e^-$" ]["MC" ] = ["/MC_Meson_Meson_Leptons_Decay/h2_511p_313p_11_mVf", "/MC_Meson_Meson_Leptons_Decay/h2_511p_313p_11_mVfbar", "/MC_Meson_Meson_Leptons_Decay/h2_511p_313p_11_mff"] analyses["HadronDecays"][511]["Modes"]["$B^0\\to K^{*0} \\mu^+\\mu^-$"]["MC" ] = ["/MC_Meson_Meson_Leptons_Decay/h2_511p_313p_13_mVf", "/MC_Meson_Meson_Leptons_Decay/h2_511p_313p_13_mVfbar", "/MC_Meson_Meson_Leptons_Decay/h2_511p_313p_13_mff"] analyses["HadronDecays"][511]["Modes"]["$B^0\\to K^0 e^+e^-$" ]["MC" ] = ["/MC_Meson_Meson_Leptons_Decay/h_511p_311p_11_mPf", "/MC_Meson_Meson_Leptons_Decay/h_511p_311p_11_mPfbar", "/MC_Meson_Meson_Leptons_Decay/h_511p_311p_11_mff", "/MC_Meson_Meson_Leptons_Decay/h_511m_311m_11_mPf", "/MC_Meson_Meson_Leptons_Decay/h_511m_311m_11_mPfbar", "/MC_Meson_Meson_Leptons_Decay/h_511m_311m_11_mff"] analyses["HadronDecays"][511]["Modes"]["$B^0\\to K^0 \\mu^+\\mu^-$"]["MC" ] = ["/MC_Meson_Meson_Leptons_Decay/h_511m_311m_13_mPf", "/MC_Meson_Meson_Leptons_Decay/h_511m_311m_13_mPfbar", "/MC_Meson_Meson_Leptons_Decay/h_511m_311m_13_mff"] analyses["HadronDecays"][521]["Modes"]["$B^+\\to K^{*+} e^+e^-$" ]["MC" ] = ["/MC_Meson_Meson_Leptons_Decay/h2_521m_323m_11_mVf", "/MC_Meson_Meson_Leptons_Decay/h2_521m_323m_11_mff", "/MC_Meson_Meson_Leptons_Decay/h2_521m_323m_11_mVfbar"] analyses["HadronDecays"][521]["Modes"]["$B^+\\to K^{*+} \\mu^+\\mu^-$"]["MC" ] = [] analyses["HadronDecays"][521]["Modes"]["$B^+\\to K^- e^+e^-$" ]["MC" ] = [] analyses["HadronDecays"][521]["Modes"]["$B^+\\to K^- \\mu^+\\mu^-$" ]["MC" ] = ["/MC_Meson_Meson_Leptons_Decay/h_521m_321m_13_mPfbar", "/MC_Meson_Meson_Leptons_Decay/h_521m_321m_13_mff", "/MC_Meson_Meson_Leptons_Decay/h_521m_321m_13_mPf"] analyses["HadronDecays"][511]["Modes"]["$B\\to X_s\\gamma$"]["data"]=["/BELLE_2015_I1330289/d01-x01-y02"] # charmonium analyses["HadronDecays"][443] = { "Modes" : { "$J/\\psi\\to\\eta e^+e^-$" : {}, "$J/\\psi\\to\\gamma e^+e^-$" : {}, "$J/\\psi\\to\\gamma \\mu^+\\mu^-$" : {}, "$J/\\psi\\to p\\bar{p}$" : {}, "$J/\\psi\\to n\\bar{n}$" : {}, "$J/\\psi\\to \\Sigma^{*-}\\bar\\Sigma^{*+}$" : {}, "$J/\\psi\\to \\Sigma^{*0}\\bar\\Sigma^{*0}$" : {}, "$J/\\psi\\to \\Sigma^{*+}\\bar\\Sigma^{*-}$" : {}, "$J/\\psi\\to \\Xi^{-}\\bar\\Xi^{+}$" : {}, "$J/\\psi\\to \\Xi^{*-}\\bar\\Xi^{*+}$" : {}, "$J/\\psi\\to \\Xi^{0}\\bar\\Xi^{0}$" : {}, "$J/\\psi\\to \\Lambda^{0}\\bar\\Lambda^{0}$" : {}, "$J/\\psi\\to \\Lambda^{0}\\bar\\Sigma^{0}$" : {}, "$J/\\psi\\to \\Sigma^{0}\\bar\\Sigma^{0}$" : {}, }} analyses["HadronDecays"][443]["Modes"]["$J/\\psi\\to\\eta e^+e^-$" ]["data"] = ["/BESIII_2018_I1697377/d01-x01-y01"] analyses["HadronDecays"][443]["Modes"]["$J/\\psi\\to\\gamma e^+e^-$"]["MC" ] = ["/MC_Meson_Meson_Leptons_Decay/h2_443p_22p_11_mVf", "/MC_Meson_Meson_Leptons_Decay/h2_443p_22p_11_mVfbar", "/MC_Meson_Meson_Leptons_Decay/h2_443p_22p_11_mff"] analyses["HadronDecays"][443]["Modes"]["$J/\\psi\\to\\gamma \\mu^+\\mu^-$"]["MC" ] = ["/MC_Meson_Meson_Leptons_Decay/h2_443p_22p_13_mVf", "/MC_Meson_Meson_Leptons_Decay/h2_443p_22p_13_mVfbar", "/MC_Meson_Meson_Leptons_Decay/h2_443p_22p_13_mff"] analyses["HadronDecays"][443]["Modes"]["$J/\\psi\\to p\\bar{p}$" ]["data"] = ["/BESIII_2012_I1113599/d01-x01-y01"] analyses["HadronDecays"][443]["Modes"]["$J/\\psi\\to p\\bar{p}$" ]["MC"] = ["/BESIII_2012_I1113599/ctheta_p"] analyses["HadronDecays"][443]["Modes"]["$J/\\psi\\to n\\bar{n}$" ]["data"] = ["/BESIII_2012_I1113599/d01-x01-y02"] analyses["HadronDecays"][443]["Modes"]["$J/\\psi\\to n\\bar{n}$" ]["MC"] = ["/BESIII_2012_I1113599/ctheta_n"] analyses["HadronDecays"][443]["Modes"]["$J/\\psi\\to \\Sigma^{*-}\\bar\\Sigma^{*+}$"]["data"] = ["/BESIII_2016_I1422780/d02-x01-y02","/BESIII_2016_I1422780/d01-x01-y03"] analyses["HadronDecays"][443]["Modes"]["$J/\\psi\\to \\Sigma^{*0}\\bar\\Sigma^{*0}$"]["data"] = ["/BESIII_2017_I1506414/d01-x01-y01","/BESIII_2017_I1506414/d02-x01-y01"] analyses["HadronDecays"][443]["Modes"]["$J/\\psi\\to \\Sigma^{*+}\\bar\\Sigma^{*-}$"]["data"] = ["/BESIII_2016_I1422780/d02-x01-y03","/BESIII_2016_I1422780/d01-x01-y03"] analyses["HadronDecays"][443]["Modes"]["$J/\\psi\\to \\Xi^{-}\\bar\\Xi^{+}$" ]["data"] = ["/BESIII_2016_I1422780/d02-x01-y01","/BESIII_2016_I1422780/d01-x01-y03"] analyses["HadronDecays"][443]["Modes"]["$J/\\psi\\to \\Xi^{0}\\bar\\Xi^{0}$" ]["data"] = ["/BESIII_2017_I1506414/d01-x01-y02","/BESIII_2017_I1506414/d02-x02-y01"] analyses["HadronDecays"][443]["Modes"]["$J/\\psi\\to \\Lambda^{0}\\bar\\Lambda^{0}$"]["data"] = ["/BESIII_2017_I1510563/d01-x01-y01","/BESIII_2017_I1510563/d02-x01-y01", "/BESIII_2019_I1691850/d01-x01-y01","/BESIII_2019_I1691850/d01-x02-y01", "/BESIII_2019_I1691850/d01-x03-y01","/BESIII_2019_I1691850/d01-x04-y01", "/BESIII_2019_I1691850/d01-x05-y01",] analyses["HadronDecays"][443]["Modes"]["$J/\\psi\\to \\Lambda^{0}\\bar\\Sigma^{0}$" ]["data"] = ["/BESIII_2012_I1121378/d01-x01-y01","/BESIII_2012_I1121378/d01-x01-y02", "/BESIII_2012_I1121378/d05-x01-y01",] analyses["HadronDecays"][443]["Modes"]["$J/\\psi\\to \\Lambda^{0}\\bar\\Lambda^{0}$"]["MC" ] = ["/BESIII_2019_I1691850/T1_n","/BESIII_2019_I1691850/T1_p", "/BESIII_2019_I1691850/T2_n","/BESIII_2019_I1691850/T2_p", "/BESIII_2019_I1691850/T3_n","/BESIII_2019_I1691850/T3_p", "/BESIII_2019_I1691850/T4_n","/BESIII_2019_I1691850/T4_p", "/BESIII_2019_I1691850/T5_n","/BESIII_2019_I1691850/T5_p", "/BESIII_2019_I1691850/mu_n","/BESIII_2019_I1691850/mu_p", "/BESIII_2019_I1691850/cThetaL",] analyses["HadronDecays"][443]["Modes"]["$J/\\psi\\to \\Sigma^{0}\\bar\\Sigma^{0}$" ]["data"] = ["/BESIII_2017_I1510563/d01-x01-y03","/BESIII_2017_I1510563/d02-x02-y01"] analyses["HadronDecays"][443]["Modes"]["$J/\\psi\\to \\Xi^{*-}\\bar\\Xi^{*+}$" ]["data"] = ["/BESIII_2019_I1765606/d02-x01-y01","/BESIII_2019_I1765606/d01-x01-y01"] # eta_c analyses["HadronDecays"][441] = {"DistChargedMult" : {}} analyses["HadronDecays"][441]["DistChargedMult"]["data"] = ["/BESIII_2019_I1724880/d01-x01-y01"] # psi(3770) analyses["HadronDecays"][30443] = { "Modes" : { "$\\psi(3770)\\to J/\\psi\\pi^0\\pi^0$" : {}, "$\\psi(3770)\\to J/\\psi\\pi^+\\pi^-$" : {},}} analyses["HadronDecays"][30443]["Modes"]["$\\psi(3770)\\to J/\\psi\\pi^0\\pi^0$"]["MC" ] = ["/MC_Onium_PiPi_Decay/h_30443_443_mpi0pi0","/MC_Onium_PiPi_Decay/h_30443_443_hpi0pi0"] analyses["HadronDecays"][30443]["Modes"]["$\\psi(3770)\\to J/\\psi\\pi^+\\pi^-$"]["MC" ] = ["/MC_Onium_PiPi_Decay/h_30443_443_hpippim","/MC_Onium_PiPi_Decay/h_30443_443_mpippim"] # psi(2S) analyses["HadronDecays"][100443] = { "Modes" : { "$\\psi(2S)\\to p\\bar{p}$" : {}, "$\\psi(2S)\\to n\\bar{n}$" : {}, "$\\psi(2S)\\to \\Sigma^{*-}\\bar\\Sigma^{*+}$" : {}, "$\\psi(2S)\\to \\Sigma^{*0}\\bar\\Sigma^{*0}$" : {}, "$\\psi(2S)\\to \\Sigma^{*+}\\bar\\Sigma^{*-}$" : {}, "$\\psi(2S)\\to \\Xi^{-}\\bar\\Xi^{+}$" : {}, "$\\psi(2S)\\to \\Xi^{*-}\\bar\\Xi^{*+}$" : {}, "$\\psi(2S)\\to \\Xi^{0}\\bar\\Xi^{0}$" : {}, "$\\psi(2S)\\to \\Lambda^{0}\\bar\\Lambda^{0}$" : {}, "$\\psi(2S)\\to \\Sigma^{0}\\bar\\Sigma^{0}$" : {}, "$\\psi(2S)\\to J/\\psi\\pi^+\\pi^-$" : {}, "$\\psi(2S)\\to J/\\psi\\pi^0\\pi^0$" : {},}} analyses["HadronDecays"][100443]["Modes"]["$\\psi(2S)\\to p\\bar{p}$" ]["data"] = ["/BESIII_2018_I1658762/d01-x01-y01"] analyses["HadronDecays"][100443]["Modes"]["$\\psi(2S)\\to p\\bar{p}$" ]["MC"] = ["/BESIII_2018_I1658762/ctheta_p"] analyses["HadronDecays"][100443]["Modes"]["$\\psi(2S)\\to n\\bar{n}$" ]["data"] = ["/BESIII_2018_I1658762/d01-x01-y02"] analyses["HadronDecays"][100443]["Modes"]["$\\psi(2S)\\to n\\bar{n}$" ]["MC"] = ["/BESIII_2018_I1658762/ctheta_n"] analyses["HadronDecays"][100443]["Modes"]["$\\psi(2S)\\to \\Sigma^{*-}\\bar\\Sigma^{*+}$"]["data"] = ["/BESIII_2016_I1422780/d02-x01-y05","/BESIII_2016_I1422780/d01-x01-y03"] analyses["HadronDecays"][100443]["Modes"]["$\\psi(2S)\\to \\Sigma^{*0}\\bar\\Sigma^{*0}$"]["data"] = ["/BESIII_2017_I1506414/d01-x01-y03","/BESIII_2017_I1506414/d02-x03-y01"] analyses["HadronDecays"][100443]["Modes"]["$\\psi(2S)\\to \\Sigma^{*+}\\bar\\Sigma^{*-}$"]["data"] = ["/BESIII_2016_I1422780/d02-x01-y06","/BESIII_2016_I1422780/d01-x01-y03"] analyses["HadronDecays"][100443]["Modes"]["$\\psi(2S)\\to \\Xi^{-}\\bar\\Xi^{+}$" ]["data"] = ["/BESIII_2016_I1422780/d02-x01-y04","/BESIII_2016_I1422780/d01-x01-y03"] analyses["HadronDecays"][100443]["Modes"]["$\\psi(2S)\\to \\Xi^{0}\\bar\\Xi^{0}$" ]["data"] = ["/BESIII_2017_I1506414/d01-x01-y04","/BESIII_2017_I1506414/d02-x04-y01"] analyses["HadronDecays"][100443]["Modes"]["$\\psi(2S)\\to \\Lambda^{0}\\bar\\Lambda^{0}$"]["data"] = ["/BESIII_2017_I1510563/d01-x01-y02","/BESIII_2017_I1510563/d02-x03-y01"] analyses["HadronDecays"][100443]["Modes"]["$\\psi(2S)\\to \\Sigma^{0}\\bar\\Sigma^{0}$" ]["data"] = ["/BESIII_2017_I1510563/d01-x01-y04","/BESIII_2017_I1510563/d02-x04-y01"] analyses["HadronDecays"][100443]["Modes"]["$\\psi(2S)\\to \\Xi^{*-}\\bar\\Xi^{*+}$" ]["data"] = ["/BESIII_2019_I1747092/d01-x01-y01","/BESIII_2019_I1747092/d01-x01-y02", "/BESIII_2019_I1747092/d02-x01-y01"] analyses["HadronDecays"][100443]["Modes"]["$\\psi(2S)\\to J/\\psi\\pi^+\\pi^-$"]["data"] = ["/MARKII_1979_I144382/d01-x01-y01","/BES_1999_I507637/d01-x01-y01", "/BES_1999_I507637/d01-x01-y02","/BES_1999_I507637/d01-x01-y03","/BES_1999_I507637/d01-x01-y04"] analyses["HadronDecays"][100443]["Modes"]["$\\psi(2S)\\to J/\\psi\\pi^0\\pi^0$"]["MC" ] = ["/MC_Onium_PiPi_Decay/h_100443_443_hpi0pi0", "/MC_Onium_PiPi_Decay/h_100443_443_mpi0pi0"] analyses["HadronDecays"][100443]["Modes"]["$\\psi(2S)\\to J/\\psi\\pi^+\\pi^-$"]["MC" ] = ["/MC_Onium_PiPi_Decay/h_100443_443_hpippim", "/MC_Onium_PiPi_Decay/h_100443_443_mpippim"] # bottomonium # upsilon(1s) analyses["HadronDecays"][553] = { "Mult" : {}, "Spectrum" : {}, "Shapes" : [] } analyses["HadronDecays"][553]["Shapes"]=["/ARGUS_1986_I227324/d01-x01-y01","/ARGUS_1986_I227324/d02-x01-y01","/LENA_1981_I164397/d04-x01-y03"] analyses["HadronDecays"][553]["Mult"][3122 ] = ["/ARGUS_1988_I251097/d01-x01-y01","/CLEO_1985_I205668/d17-x01-y01"] analyses["HadronDecays"][553]["Mult"][3312 ] = ["/ARGUS_1988_I251097/d01-x01-y02","/CLEO_1985_I205668/d18-x01-y01"] analyses["HadronDecays"][553]["Mult"][3212 ] = ["/ARGUS_1988_I251097/d01-x01-y03"] analyses["HadronDecays"][553]["Mult"][3114 ] = ["/ARGUS_1988_I251097/d01-x01-y04"] analyses["HadronDecays"][553]["Mult"][3224 ] = ["/ARGUS_1988_I251097/d01-x01-y05"] analyses["HadronDecays"][553]["Mult"][3324 ] = ["/ARGUS_1988_I251097/d01-x01-y06"] analyses["HadronDecays"][553]["Mult"][3334 ] = ["/ARGUS_1988_I251097/d01-x01-y07"] analyses["HadronDecays"][553]["Mult"][333 ] = ["/ARGUS_1989_I262551/d03-x01-y01","/ARGUS_1993_S2789213/d02-x01-y05", "/CLEO_1985_I205668/d22-x01-y01"] analyses["HadronDecays"][553]["Mult"][211 ] = ["/ARGUS_1989_I276860/d01-x01-y01","/ARGUS_1989_I276860/d01-x01-y02", "/CLEO_1985_I205668/d12-x01-y01"] analyses["HadronDecays"][553]["Mult"][311 ] = ["/ARGUS_1989_I276860/d02-x01-y01","/CLEO_1985_I205668/d16-x01-y01"] analyses["HadronDecays"][553]["Mult"][321 ] = ["/ARGUS_1989_I276860/d03-x01-y01","/CLEO_1985_I205668/d02-x01-y02", "/CLEO_1985_I205668/d13-x01-y01"] analyses["HadronDecays"][553]["Mult"][2212 ] = ["/ARGUS_1989_I276860/d04-x01-y01","/ARGUS_1989_I276860/d04-x01-y02", "/CLEO_1985_I205668/d14-x01-y01"] analyses["HadronDecays"][553]["Mult"][111 ] = ["/ARGUS_1990_I278933/d01-x01-y02","/CLEO_1985_I205668/d15-x01-y01"] analyses["HadronDecays"][553]["Mult"][221 ] = ["/ARGUS_1990_I278933/d02-x01-y02"] analyses["HadronDecays"][553]["Mult"][331 ] = ["/ARGUS_1993_S2669951/d01-x01-y01","/ARGUS_1993_S2669951/d01-x01-y02", "/CLEOII_2002_I601701/d02-x01-y03","/CLEOIII_2006_I728679/d02-x01-y01"] analyses["HadronDecays"][553]["Mult"][113 ] = ["/ARGUS_1993_S2789213/d02-x01-y02","/CLEO_1985_I205668/d19-x01-y01"] analyses["HadronDecays"][553]["Mult"][223 ] = ["/ARGUS_1993_S2789213/d02-x01-y01"] analyses["HadronDecays"][553]["Mult"][313 ] = ["/ARGUS_1993_S2789213/d02-x01-y03","/CLEO_1985_I205668/d21-x01-y01"] analyses["HadronDecays"][553]["Mult"][323 ] = ["/ARGUS_1993_S2789213/d02-x01-y04","/CLEO_1985_I205668/d20-x01-y01"] analyses["HadronDecays"][553]["Mult"][9010221] = ["/ARGUS_1993_S2669951/d05-x01-y01"] analyses["HadronDecays"][553]["Mult"][2224 ] = ["/ARGUS_1989_I278932/d01-x01-y02"] analyses["HadronDecays"][553]["Mult"][3124 ] = ["/ARGUS_1989_I262415/d01-x01-y01", "/ARGUS_1989_I262415/d01-x02-y01"] analyses["HadronDecays"][553]["Mult"][225 ] = ["/CLEO_1985_I205668/d23-x01-y01"] analyses["HadronDecays"][553]["Spectrum"][3122] = ["/ARGUS_1988_I251097/d03-x01-y01","/CLEO_1985_I205668/d06-x01-y02"] analyses["HadronDecays"][553]["Spectrum"][3312] = ["/ARGUS_1988_I251097/d07-x01-y01","/CLEO_1985_I205668/d07-x01-y02"] analyses["HadronDecays"][553]["Spectrum"][3124] = ["/ARGUS_1989_I262415/d03-x01-y01"] analyses["HadronDecays"][553]["Spectrum"][333 ] = ["/ARGUS_1989_I262551/d02-x01-y01","/CLEO_1985_I205668/d11-x01-y02"] analyses["HadronDecays"][553]["Spectrum"][211 ] = ["/ARGUS_1989_I276860/d05-x01-y01","/ARGUS_1989_I276860/d09-x01-y01", "/CLEO_1985_I205668/d01-x01-y02"] analyses["HadronDecays"][553]["Spectrum"][321 ] = ["/ARGUS_1989_I276860/d06-x01-y01","/ARGUS_1989_I276860/d10-x01-y01"] analyses["HadronDecays"][553]["Spectrum"][311 ] = ["/ARGUS_1989_I276860/d07-x01-y01","/ARGUS_1989_I276860/d11-x01-y01", "/PLUTO_1981_I165122/d06-x01-y01","/CLEO_1985_I205668/d05-x01-y02"] analyses["HadronDecays"][553]["Spectrum"][2212] = ["/ARGUS_1989_I276860/d08-x01-y01","/ARGUS_1989_I276860/d12-x01-y01", "/CLEO_1985_I205668/d03-x01-y02"] analyses["HadronDecays"][553]["Spectrum"][2224] = ["/ARGUS_1989_I278932/d03-x01-y01"] analyses["HadronDecays"][553]["Spectrum"][111 ] = ["/ARGUS_1990_I278933/d04-x01-y01","/CLEO_1985_I205668/d04-x01-y02"] analyses["HadronDecays"][553]["Spectrum"][221 ] = ["/ARGUS_1990_I278933/d06-x01-y01"] analyses["HadronDecays"][553]["Spectrum"][9010221] = ["/ARGUS_1993_S2669951/d03-x01-y01"] analyses["HadronDecays"][553]["Spectrum"][323 ] = ["/ARGUS_1993_S2789213/d05-x01-y01","/CLEO_1985_I205668/d09-x01-y02"] analyses["HadronDecays"][553]["Spectrum"][313 ] = ["/ARGUS_1993_S2789213/d08-x01-y01","/CLEO_1985_I205668/d10-x01-y02"] analyses["HadronDecays"][553]["Spectrum"][113 ] = ["/ARGUS_1993_S2789213/d11-x01-y01","/CLEO_1985_I205668/d08-x01-y02"] analyses["HadronDecays"][553]["Spectrum"][223 ] = ["/ARGUS_1993_S2789213/d14-x01-y01"] analyses["HadronDecays"][553]["Spectrum"][331 ] = ["/CLEOII_2002_I601701/d01-x01-y03","/CLEOIII_2006_I728679/d01-x01-y01"] analyses["HadronDecays"][553]["Spectrum"][413 ] = ["/BABAR_2009_I836615/d01-x01-y01"] # upsion(2s) analyses["HadronDecays"][100553] = { "Mult" : {}, "Spectrum" : {}, "Shapes" : [], "Other" : [], "Modes" : { "$\\Upsilon(2S)\\to J/\\psi\\pi^0\\pi^0$" : {}, "$\\Upsilon(2S)\\to J/\\psi\\pi^+\\pi^-$" : {}, "$\\Upsilon(2S)\\to \\Upsilon(1S))\\pi^0\\pi^0$" : {}, "$\\Upsilon(2S)\\to \\Upsilon(1S)\\pi^+\\pi^-$" : {},}} analyses["HadronDecays"][100553]["Shapes"] = ["/LENA_1981_I164397/d04-x01-y04"] analyses["HadronDecays"][100553]["Other"] = ["/CLEOII_2002_I606309/d01-x01-y01","/CLEOII_2002_I606309/d01-x01-y02", "/CLEOII_2002_I606309/d02-x01-y01","/CLEOII_2002_I606309/d04-x01-y01","/CLEOII_2002_I606309/d04-x01-y02"] analyses["HadronDecays"][100553]["Mult"][111]= ["/ARGUS_1990_I278933/d01-x01-y03"] analyses["HadronDecays"][100553]["Mult"][221]= ["/ARGUS_1990_I278933/d02-x01-y03"] analyses["HadronDecays"][100553]["Mult"][333]= ["/ARGUS_1989_I262551/d04-x01-y01"] analyses["HadronDecays"][100553]["Spectrum"][3122] = ["/ARGUS_1988_I251097/d04-x01-y01"] analyses["HadronDecays"][100553]["Spectrum"][3312] = ["/ARGUS_1988_I251097/d08-x01-y01"] analyses["HadronDecays"][100553]["Spectrum"][333 ] = ["/ARGUS_1989_I262551/d02-x01-y02"] analyses["HadronDecays"][100553]["Spectrum"][111 ] = ["/ARGUS_1990_I278933/d04-x01-y02"] analyses["HadronDecays"][100553]["Spectrum"][221 ] = ["/ARGUS_1990_I278933/d06-x01-y02"] analyses["HadronDecays"][100553]["Spectrum"][9010221] = ["/ARGUS_1993_S2669951/d04-x01-y01"] analyses["HadronDecays"][100553]["Modes"]["$\\Upsilon(2S)\\to \\Upsilon(1S))\\pi^0\\pi^0$"]["data"] = ["/CLEOII_1998_I467642/d03-x01-y01"] analyses["HadronDecays"][100553]["Modes"]["$\\Upsilon(2S)\\to \\Upsilon(1S))\\pi^0\\pi^0$"]["MC"] = ["/MC_Onium_PiPi_Decay/h_100553_553_mpi0pi0", "/MC_Onium_PiPi_Decay/h_100553_553_hpi0pi0"] analyses["HadronDecays"][100553]["Modes"]["$\\Upsilon(2S)\\to \\Upsilon(1S)\\pi^+\\pi^-$" ]["data"] = ["/CUSB_1984_I199809/d01-x01-y01", "/CLEOII_1998_I467642/d01-x01-y01","/CLEOII_1998_I467642/d02-x01-y01", "/CLEOII_1998_I467642/d04-x01-y01","/CLEOII_1998_I467642/d04-x01-y02", "/CLEOII_1998_I467642/d05-x01-y01","/CLEOII_1998_I467642/d05-x01-y02", "/CLEOII_1998_I467642/d06-x01-y01","/CLEOII_1998_I467642/d06-x01-y02", "/CLEOII_1994_I356001/d04-x01-y01","/CLEOII_1994_I356001/d04-x01-y02"] analyses["HadronDecays"][100553]["Modes"]["$\\Upsilon(2S)\\to \\Upsilon(1S)\\pi^+\\pi^-$" ]["MC" ] = ["/MC_Onium_PiPi_Decay/h_100553_553_mpippim", "/MC_Onium_PiPi_Decay/h_100553_553_hpippim"] # Upsilon 3S analyses["HadronDecays"][200553] = { "Modes" : {"$\\Upsilon(3S)\\to\\Upsilon(1S)\\pi^0\\pi^0$" : {}, "$\\Upsilon(3S)\\to\\Upsilon(1S)\\pi^+\\pi^-$" : {}, "$\\Upsilon(3S)\\to\\Upsilon(2S)\\pi^0\\pi^0$" : {}, "$\\Upsilon(3S)\\to\\Upsilon(2S)\\pi^+\\pi^-$" : {}}} analyses["HadronDecays"][200553]["Modes"]["$\\Upsilon(3S)\\to\\Upsilon(1S)\\pi^0\\pi^0$"]["data"]=["/CLEOII_1994_I356001/d01-x01-y01"] analyses["HadronDecays"][200553]["Modes"]["$\\Upsilon(3S)\\to\\Upsilon(1S)\\pi^+\\pi^-$"]["data"]=["/CLEOII_1994_I356001/d02-x01-y01", "/CLEOII_1994_I356001/d02-x01-y02"] analyses["HadronDecays"][200553]["Modes"]["$\\Upsilon(3S)\\to\\Upsilon(2S)\\pi^0\\pi^0$"]["data"]=["/CLEOII_1994_I356001/d01-x01-y02"] analyses["HadronDecays"][200553]["Modes"]["$\\Upsilon(3S)\\to\\Upsilon(2S)\\pi^+\\pi^-$"]["data"]=["/CLEOII_1994_I356001/d03-x01-y01", "/CLEOII_1994_I356001/d03-x01-y02"] analyses["HadronDecays"][200553]["Modes"]["$\\Upsilon(3S)\\to\\Upsilon(1S)\\pi^0\\pi^0$"]["MC"]=["/MC_Onium_PiPi_Decay/h_200553_553_hpi0pi0", "/MC_Onium_PiPi_Decay/h_200553_553_mpi0pi0"] analyses["HadronDecays"][200553]["Modes"]["$\\Upsilon(3S)\\to\\Upsilon(1S)\\pi^+\\pi^-$"]["MC"]=["/MC_Onium_PiPi_Decay/h_200553_553_hpippim", "/MC_Onium_PiPi_Decay/h_200553_553_mpippim"] analyses["HadronDecays"][200553]["Modes"]["$\\Upsilon(3S)\\to\\Upsilon(2S)\\pi^0\\pi^0$"]["MC"]=["/MC_Onium_PiPi_Decay/h_200553_100553_hpi0pi0", "/MC_Onium_PiPi_Decay/h_200553_100553_mpi0pi0"] analyses["HadronDecays"][200553]["Modes"]["$\\Upsilon(3S)\\to\\Upsilon(2S)\\pi^+\\pi^-$"]["MC"]=["/MC_Onium_PiPi_Decay/h_200553_100553_hpippim", "/MC_Onium_PiPi_Decay/h_200553_100553_mpippim"] # upsilon(4s) analyses["HadronDecays"][300553] = { "Mult" : {}, "Spectrum" : {}, "DistChargedMult" : {}, "Modes" : {"$\\Upsilon(4S)\\to\\Upsilon(1S)\\pi^0\\pi^0$" : {}, "$\\Upsilon(4S)\\to\\Upsilon(1S)\\pi^+\\pi^-$" : {}, "$\\Upsilon(4S)\\to\\Upsilon(2S)\\pi^0\\pi^0$" : {}, "$\\Upsilon(4S)\\to\\Upsilon(2S)\\pi^+\\pi^-$" : {}, "$\\Upsilon(4S)\\to J/\\psi\\pi^0\\pi^0$" : {}, "$\\Upsilon(4S)\\to J/\\psi\\pi^+\\pi^-$" : {},}} analyses["HadronDecays"][300553]["Modes"]["$\\Upsilon(4S)\\to\\Upsilon(1S)\\pi^0\\pi^0$"]["MC"]=["/MC_Onium_PiPi_Decay/h_300553_553_hpi0pi0", "/MC_Onium_PiPi_Decay/h_300553_553_mpi0pi0"] analyses["HadronDecays"][300553]["Modes"]["$\\Upsilon(4S)\\to\\Upsilon(1S)\\pi^+\\pi^-$"]["MC"]=["/MC_Onium_PiPi_Decay/h_300553_553_hpippim", "/MC_Onium_PiPi_Decay/h_300553_553_mpippim"] analyses["HadronDecays"][300553]["Modes"]["$\\Upsilon(4S)\\to\\Upsilon(1S)\\pi^+\\pi^-$"]["data"]=["/BELLE_2009_I810744/d01-x01-y01", "/BABAR_2006_I714448/d01-x01-y01"] analyses["HadronDecays"][300553]["Modes"]["$\\Upsilon(4S)\\to\\Upsilon(2S)\\pi^0\\pi^0$"]["MC"]=["/MC_Onium_PiPi_Decay/h_300553_100553_hpi0pi0", "/MC_Onium_PiPi_Decay/h_300553_100553_mpi0pi0"] analyses["HadronDecays"][300553]["Modes"]["$\\Upsilon(4S)\\to\\Upsilon(2S)\\pi^+\\pi^-$"]["data"]=["/BABAR_2006_I714448/d01-x01-y02"] analyses["HadronDecays"][300553]["Modes"]["$\\Upsilon(4S)\\to\\Upsilon(2S)\\pi^+\\pi^-$"]["MC"]=["/MC_Onium_PiPi_Decay/h_300553_100553_hpippim", "/MC_Onium_PiPi_Decay/h_300553_100553_mpippim"] analyses["HadronDecays"][300553]["Modes"]["$\\Upsilon(4S)\\to J/\\psi\\pi^0\\pi^0$" ]["MC"]=["/MC_Onium_PiPi_Decay/h_300553_553_hpi0pi0", "/MC_Onium_PiPi_Decay/h_300553_553_mpi0pi0"] analyses["HadronDecays"][300553]["Modes"]["$\\Upsilon(4S)\\to J/\\psi\\pi^+\\pi^-$" ]["MC"]=["/MC_Onium_PiPi_Decay/h_300553_553_mpippim", "/MC_Onium_PiPi_Decay/h_300553_553_hpippim"] analyses["HadronDecays"][300553]["DistChargedMult"]["data"] = ["/ARGUS_1992_I319102/d03-x01-y01","/CLEOII_1999_I504672/d02-x01-y01"] -analyses["HadronDecays"][300553]["Mult"]["Charged"] = ["/CLEOII_1999_I504672/d01-x01-y01","/CLEOII_1999_I504672/d01-x01-y02", +analyses["HadronDecays"][300553]["Mult"][0] = ["/CLEOII_1999_I504672/d01-x01-y01","/CLEOII_1999_I504672/d01-x01-y02", "/CLEOII_1999_I504672/d01-x01-y03","/ARGUS_1992_I319102/d05-x01-y01"] analyses["HadronDecays"][300553]["Mult"][ 211 ] = ["/ARGUS_1993_S2653028/d07-x01-y01","/ARGUS_1993_S2653028/d08-x01-y01", "/PDG_Upsilon_4S_HADRON_MULTIPLICITIES/d87-x01-y01"] analyses["HadronDecays"][300553]["Mult"][ 321 ] = ["/ARGUS_1993_S2653028/d09-x01-y01", "/PDG_Upsilon_4S_HADRON_MULTIPLICITIES/d60-x01-y01", "/PDG_Upsilon_4S_HADRON_MULTIPLICITIES/d61-x01-y01", "/PDG_Upsilon_4S_HADRON_MULTIPLICITIES/d62-x01-y01"] analyses["HadronDecays"][300553]["Mult"][ 2212] = ["/ARGUS_1993_S2653028/d10-x01-y01","/ARGUS_1993_S2653028/d11-x01-y01", "/PDG_Upsilon_4S_HADRON_MULTIPLICITIES/d110-x01-y01"] analyses["HadronDecays"][300553]["Mult"][ 223 ] = ["/ARGUS_1993_S2789213/d03-x01-y01"] analyses["HadronDecays"][300553]["Mult"][ 113 ] = ["/ARGUS_1993_S2789213/d03-x01-y02", "/PDG_Upsilon_4S_HADRON_MULTIPLICITIES/d90-x01-y01"] analyses["HadronDecays"][300553]["Mult"][ 313 ] = ["/ARGUS_1993_S2789213/d03-x01-y03", "/PDG_Upsilon_4S_HADRON_MULTIPLICITIES/d65-x01-y01"] analyses["HadronDecays"][300553]["Mult"][ 323 ] = ["/ARGUS_1993_S2789213/d03-x01-y04", "/PDG_Upsilon_4S_HADRON_MULTIPLICITIES/d64-x01-y01"] analyses["HadronDecays"][300553]["Mult"][ 333 ] = ["/ARGUS_1993_S2789213/d03-x01-y05","/BABAR_2004_I632399/d01-x01-y01", "/PDG_Upsilon_4S_HADRON_MULTIPLICITIES/d92-x01-y01"] analyses["HadronDecays"][300553]["Mult"][ 111 ] = ["/BELLE_2001_S4598261/d02-x01-y01", "/PDG_Upsilon_4S_HADRON_MULTIPLICITIES/d88-x01-y01"] analyses["HadronDecays"][300553]["Mult"][ 4222] = ["/PDG_Upsilon_4S_HADRON_MULTIPLICITIES/d104-x01-y01", "/CLEOII_1994_I361356/d01-x01-y01"] analyses["HadronDecays"][300553]["Mult"][ 4112] = ["/PDG_Upsilon_4S_HADRON_MULTIPLICITIES/d106-x01-y01","/CLEOII_1994_I361356/d01-x01-y02"] analyses["HadronDecays"][300553]["Mult"][ 4122] = ["/BABAR_2007_S6895344/d04-x01-y01","/BELLE_2005_I686014/d01-x01-y04", "/PDG_Upsilon_4S_HADRON_MULTIPLICITIES/d96-x01-y01"] analyses["HadronDecays"][300553]["Mult"][ 3122] = ["/PDG_Upsilon_4S_HADRON_MULTIPLICITIES/d113-x01-y01"] analyses["HadronDecays"][300553]["Mult"][ 3312] = ["/PDG_Upsilon_4S_HADRON_MULTIPLICITIES/d116-x01-y01"] analyses["HadronDecays"][300553]["Mult"][ 411 ] = ["/PDG_Upsilon_4S_HADRON_MULTIPLICITIES/d29-x01-y01","/BELLE_2005_I686014/d01-x01-y02"] analyses["HadronDecays"][300553]["Mult"][ 421 ] = ["/PDG_Upsilon_4S_HADRON_MULTIPLICITIES/d30-x01-y01","/BELLE_2005_I686014/d01-x01-y01"] analyses["HadronDecays"][300553]["Mult"][ 413 ] = ["/PDG_Upsilon_4S_HADRON_MULTIPLICITIES/d31-x01-y01","/BELLE_2005_I686014/d01-x01-y06", "/BELLE_2005_I686014/d01-x01-y07"] analyses["HadronDecays"][300553]["Mult"][ 423 ] = ["/PDG_Upsilon_4S_HADRON_MULTIPLICITIES/d32-x01-y01","/BELLE_2005_I686014/d01-x01-y05"] analyses["HadronDecays"][300553]["Mult"][ 431 ] = ["/PDG_Upsilon_4S_HADRON_MULTIPLICITIES/d33-x01-y01","/BABAR_2002_I582184/d02-x01-y01", "/BELLE_2005_I686014/d01-x01-y03"] analyses["HadronDecays"][300553]["Mult"][ 433 ] = ["/PDG_Upsilon_4S_HADRON_MULTIPLICITIES/d34-x01-y01","/BABAR_2002_I582184/d02-x01-y02"] analyses["HadronDecays"][300553]["Mult"][ 443 ] = ["/PDG_Upsilon_4S_HADRON_MULTIPLICITIES/d48-x01-y01", "/BABAR_2003_I593379/d01-x01-y01","/BABAR_2003_I593379/d01-x01-y02"] analyses["HadronDecays"][300553]["Mult"][100443 ] = ["/PDG_Upsilon_4S_HADRON_MULTIPLICITIES/d50-x01-y01", "/BABAR_2003_I593379/d01-x01-y07"] analyses["HadronDecays"][300553]["Mult"][ 20443 ] = ["/PDG_Upsilon_4S_HADRON_MULTIPLICITIES/d51-x01-y01", "/BABAR_2003_I593379/d01-x01-y03","/BABAR_2003_I593379/d01-x01-y04"] analyses["HadronDecays"][300553]["Mult"][ 445 ] = ["/PDG_Upsilon_4S_HADRON_MULTIPLICITIES/d53-x01-y01", "/BABAR_2003_I593379/d01-x01-y05","/BABAR_2003_I593379/d01-x01-y06"] analyses["HadronDecays"][300553]["Mult"][ 311 ] = ["/PDG_Upsilon_4S_HADRON_MULTIPLICITIES/d63-x01-y01"] analyses["HadronDecays"][300553]["Mult"][ 221 ] = ["/PDG_Upsilon_4S_HADRON_MULTIPLICITIES/d89-x01-y01"] analyses["HadronDecays"][300553]["Mult"][ 4332 ] = ["/BABAR_2007_I746745/d02-x01-y01"] analyses["HadronDecays"][300553]["Spectrum"][111 ] = ["/BELLE_2001_S4598261/d01-x01-y01"] analyses["HadronDecays"][300553]["Spectrum"][211 ] = ["/ARGUS_1993_S2653028/d01-x01-y01","/ARGUS_1993_S2653028/d02-x01-y01"] analyses["HadronDecays"][300553]["Spectrum"][321 ] = ["/ARGUS_1993_S2653028/d03-x01-y01","/ARGUS_1993_S2653028/d06-x01-y01"] analyses["HadronDecays"][300553]["Spectrum"][2212 ] = ["/ARGUS_1993_S2653028/d04-x01-y01","/ARGUS_1993_S2653028/d05-x01-y01", "/CLEO_1992_I315181/d01-x01-y01"] analyses["HadronDecays"][300553]["Spectrum"][113 ] = ["/ARGUS_1993_S2789213/d12-x01-y01"] analyses["HadronDecays"][300553]["Spectrum"][3122 ] = ["/CLEO_1992_I315181/d03-x01-y01"] analyses["HadronDecays"][300553]["Spectrum"][3312 ] = ["/CLEO_1992_I315181/d04-x01-y01"] analyses["HadronDecays"][300553]["Spectrum"][4122 ] = ["/BABAR_2007_S6895344/d03-x01-y01","/CLEO_1992_I315181/d02-x01-y01","/BELLE_2005_I686014/d04-x01-y04"] analyses["HadronDecays"][300553]["Spectrum"][4132 ] = ["/BABAR_2005_S6181155/d01-x01-y01","/BABAR_2005_S6181155/d02-x01-y01", "/CLEOII_1997_I442910/d01-x01-y01"] analyses["HadronDecays"][300553]["Spectrum"][323 ] = ["/ARGUS_1993_S2789213/d06-x01-y01"] analyses["HadronDecays"][300553]["Spectrum"][313 ] = ["/ARGUS_1993_S2789213/d09-x01-y01"] analyses["HadronDecays"][300553]["Spectrum"][443 ] = ["/BABAR_2003_I593379/d06-x01-y01","/BABAR_2003_I593379/d10-x01-y01","/CLEOII_2002_I606309/d03-x01-y01"] analyses["HadronDecays"][300553]["Spectrum"][20443 ] = ["/BABAR_2003_I593379/d07-x01-y01"] analyses["HadronDecays"][300553]["Spectrum"][445 ] = ["/BABAR_2003_I593379/d07-x01-y02"] analyses["HadronDecays"][300553]["Spectrum"][100443] = ["/BABAR_2003_I593379/d08-x01-y01","/CLEOII_2002_I606309/d03-x01-y02"] analyses["HadronDecays"][300553]["Spectrum"][431 ] = ["/CLEO_2005_I1649168/d01-x01-y07","/BABAR_2002_I582184/d05-x01-y01","/BELLE_2005_I686014/d04-x01-y03"] analyses["HadronDecays"][300553]["Spectrum"][433 ] = ["/BABAR_2002_I582184/d05-x01-y02"] analyses["HadronDecays"][300553]["Spectrum"][333 ] = ["/CLEO_2007_I728872/d01-x01-y05","/BABAR_2004_I632399/d02-x01-y01"] analyses["HadronDecays"][300553]["Spectrum"][4232 ] = ["/CLEOII_1997_I442910/d02-x01-y01"] analyses["HadronDecays"][300553]["Spectrum"][11] = ["/BABAR_2017_I1498564/d01-x01-y01","/BABAR_2017_I1498564/d01-x01-y02"] analyses["HadronDecays"][300553]["Spectrum"][411] = ["/BELLE_2005_I686014/d04-x01-y02"] analyses["HadronDecays"][300553]["Spectrum"][421] = ["/BELLE_2005_I686014/d04-x01-y01"] analyses["HadronDecays"][300553]["Spectrum"][413] = ["/BELLE_2005_I686014/d04-x01-y06","/BELLE_2005_I686014/d04-x01-y07"] analyses["HadronDecays"][300553]["Spectrum"][423] = ["/BELLE_2005_I686014/d04-x01-y05"] # chi_b (2P) analyses["HadronDecays"][110551] = { "Mult" : {},"DistChargedMult" : {},"Shapes" : []} analyses["HadronDecays"][120553] = { "Mult" : {},"DistChargedMult" : {},"Shapes" : []} analyses["HadronDecays"][100555] = { "Mult" : {},"DistChargedMult" : {},"Shapes" : []} -analyses["HadronDecays"][110551]["Mult"]["Charged"] = ["/CLEOII_1992_I32611/d01-x03-y01"] -analyses["HadronDecays"][120553]["Mult"]["Charged"] = ["/CLEOII_1992_I32611/d01-x02-y01"] -analyses["HadronDecays"][100555]["Mult"]["Charged"] = ["/CLEOII_1992_I32611/d01-x01-y01"] +analyses["HadronDecays"][110551]["Mult"][0] = ["/CLEOII_1992_I32611/d01-x03-y01"] +analyses["HadronDecays"][120553]["Mult"][0] = ["/CLEOII_1992_I32611/d01-x02-y01"] +analyses["HadronDecays"][100555]["Mult"][0] = ["/CLEOII_1992_I32611/d01-x01-y01"] analyses["HadronDecays"][110551]["DistChargedMult"]["data"] = ["/CLEOII_1992_I32611/d02-x01-y01"] analyses["HadronDecays"][120553]["DistChargedMult"]["data"] = ["/CLEOII_1992_I32611/d02-x01-y02"] analyses["HadronDecays"][100555]["DistChargedMult"]["data"] = ["/CLEOII_1992_I32611/d02-x01-y03"] analyses["HadronDecays"][110551]["Shapes"] = ["/CLEOII_1992_I32611/d01-x03-y02","/CLEOII_1992_I32611/d03-x01-y01"] analyses["HadronDecays"][120553]["Shapes"] = ["/CLEOII_1992_I32611/d01-x02-y02","/CLEOII_1992_I32611/d03-x01-y02"] analyses["HadronDecays"][100555]["Shapes"] = ["/CLEOII_1992_I32611/d01-x01-y02","/CLEOII_1992_I32611/d03-x01-y03"] # upsilon(5s) analyses["HadronDecays"][400553] = {"Spectrum" : {}} analyses["HadronDecays"][400553]["Spectrum"][431 ] = ["/CLEO_2005_I1649168/d01-x01-y08"] analyses["HadronDecays"][400553]["Spectrum"][333 ] = ["/CLEO_2007_I728872/d02-x01-y05" ] # analyses["HadronDecays"][3312] = { "Modes" : { "$\\Xi^-\\to\\Lambda^0\\pi^-$" : {} } } analyses["HadronDecays"][3312]["Modes"]["$\\Xi^-\\to\\Lambda^0\\pi^-$"]["data"] = ["/E756_2000_I530367/d01-x01-y01","/E756_2000_I530367/d01-x01-y02", "/CLEOII_2000_I533575/d01-x01-y01","/CLEOII_2000_I533575/d01-x01-y02", "/CLEOII_2000_I533575/d02-x01-y01","/CLEOII_2000_I533575/d02-x01-y02"] analyses["HadronDecays"][3312]["Modes"]["$\\Xi^-\\to\\Lambda^0\\pi^-$"]["MC" ] = ["/E756_2000_I530367/cthetaP","/E756_2000_I530367/cthetaM"] analyses["HadronDecays"][3322] = { "Modes" : { "$\\Xi^0\\to\\Lambda^0\\pi^0$" : {}, "$\\Xi^0\\to\\Sigma^0\\gamma$" : {}, "$\\Xi^0\\to\\Lambda^0\\gamma$" : {} } } analyses["HadronDecays"][3322]["Modes"]["$\\Xi^0\\to\\Lambda^0\\pi^0$"]["data"] = ["/NA48_2010_I868871/d01-x01-y01"] analyses["HadronDecays"][3322]["Modes"]["$\\Xi^0\\to\\Lambda^0\\pi^0$"]["MC" ] = ["/NA48_2010_I868871/ctheta_pi0"] analyses["HadronDecays"][3322]["Modes"]["$\\Xi^0\\to\\Lambda^0\\gamma$"]["data"] = ["/NA48_2010_I868871/d02-x01-y01"] analyses["HadronDecays"][3322]["Modes"]["$\\Xi^0\\to\\Lambda^0\\gamma$"]["MC" ] = ["/NA48_2010_I868871/ctheta_gamma"] analyses["HadronDecays"][3322]["Modes"]["$\\Xi^0\\to\\Sigma^0\\gamma$"]["data"] = ["/NA48_2010_I868871/d03-x01-y01"] analyses["HadronDecays"][3322]["Modes"]["$\\Xi^0\\to\\Sigma^0\\gamma$"]["MC" ] = ["/NA48_2010_I868871/ctheta_Sigma_0" ,"/NA48_2010_I868871/ctheta_Sigma_1" , "/NA48_2010_I868871/ctheta_Sigma_2" ,"/NA48_2010_I868871/ctheta_Sigma_3" , "/NA48_2010_I868871/ctheta_Sigma_4" ,"/NA48_2010_I868871/ctheta_Sigma_5" , "/NA48_2010_I868871/ctheta_Sigma_6" ,"/NA48_2010_I868871/ctheta_Sigma_7" , "/NA48_2010_I868871/ctheta_Sigma_8" ,"/NA48_2010_I868871/ctheta_Sigma_9" , "/NA48_2010_I868871/ctheta_Sigma_10","/NA48_2010_I868871/ctheta_Sigma_11", "/NA48_2010_I868871/ctheta_Sigma_12","/NA48_2010_I868871/ctheta_Sigma_13", "/NA48_2010_I868871/ctheta_Sigma_14","/NA48_2010_I868871/ctheta_Sigma_15", "/NA48_2010_I868871/ctheta_Sigma_16","/NA48_2010_I868871/ctheta_Sigma_17", "/NA48_2010_I868871/ctheta_Sigma_18","/NA48_2010_I868871/ctheta_Sigma_19"] analyses["HadronDecays"][3334] = { "Modes" : { "$\\Omega^-\\to\\Lambda^0K^-$" : {},"$\\Omega^-\\to\\Xi^0\\pi^-$" : {}, "$\\Omega^-\\to\\Xi^-\\pi^0$" : {} } } analyses["HadronDecays"][3334]["Modes"]["$\\Omega^-\\to\\Lambda^0K^-$"]["data"] = ["/HyperCP_2005_I677384/d01-x01-y01", "/HyperCP_2005_I677384/d01-x01-y02", "/HyperCP_2005_I677384/d01-x01-y03", "/WA46_1984_I206647/d01-x01-y01"] analyses["HadronDecays"][3334]["Modes"]["$\\Omega^-\\to\\Lambda^0K^-$"]["MC" ] = ["/HyperCP_2005_I677384/cthetaM", "/HyperCP_2005_I677384/cthetaP", "/HyperCP_2005_I677384/cthetaAll", "/WA46_1984_I206647/cthetaLambda"] analyses["HadronDecays"][3334]["Modes"]["$\\Omega^-\\to\\Xi^0\\pi^-$"]["data"]=["/WA46_1984_I206647/d01-x01-y02"] analyses["HadronDecays"][3334]["Modes"]["$\\Omega^-\\to\\Xi^0\\pi^-$"]["MC" ]=["/WA46_1984_I206647/cthetaXi0"] analyses["HadronDecays"][3334]["Modes"]["$\\Omega^-\\to\\Xi^-\\pi^0$"]["data"]=["/WA46_1984_I206647/d01-x01-y03"] analyses["HadronDecays"][3334]["Modes"]["$\\Omega^-\\to\\Xi^-\\pi^0$"]["MC" ]=["/WA46_1984_I206647/cthetaXim"] analyses["HadronDecays"][4132] = { "Modes" : { "$\\Xi^0_c\\to\\Xi^-\\pi^+$" : {}, "$\\Xi^0_c\\to\\Omega^-K^+" : {} } } analyses["HadronDecays"][4132]["Modes"]["$\\Xi^0_c\\to\\Xi^-\\pi^+$"]["data"] = ["/CLEO_2000_I537236/d01-x01-y01"] analyses["HadronDecays"][4132]["Modes"]["$\\Xi^0_c\\to\\Xi^-\\pi^+$"]["MC" ] = ["/CLEO_2000_I537236/ctheta"] analyses["HadronDecays"][4132]["Modes"]["$\\Xi^0_c\\to\\Omega^-K^+"]["data"] = ["/BABAR_2006_I719581/d01-x01-y01","/BABAR_2006_I719581/d02-x01-y01"] analyses["HadronDecays"][4122] = { "Modes" : { "$\\Lambda^+_c\\to\\Lambda^0\\pi^+$" : {}, "$\\Lambda^+_c\\to\\Sigma^+\\pi^0$" : {}, "$\\Lambda^+_c\\to\\Lambda^0 e^+\\bar{\\nu}_e$" : {} } } analyses["HadronDecays"][4122]["Modes"]["$\\Lambda^+_c\\to\\Lambda^0\\pi^+$"]["data"] = ["/FOCUS_2006_I693639/d01-x01-y01","/FOCUS_2006_I693639/d02-x01-y01", "/FOCUS_2006_I693639/d03-x01-y01", "/CLEO_1995_I392704/d01-x01-y01","/CLEO_1995_I392704/d03-x01-y01", "/ARGUS_1992_I319105/d02-x01-y01","/ARGUS_1992_I319105/d03-x01-y01"] analyses["HadronDecays"][4122]["Modes"]["$\\Lambda^+_c\\to\\Sigma^+\\pi^0$"]["data"] = ["/CLEO_1995_I392704/d02-x01-y01","/CLEO_1995_I392704/d04-x01-y01"] analyses["HadronDecays"][4122]["Modes"]["$\\Lambda^+_c\\to\\Lambda^0 e^+\\bar{\\nu}_e$"]["data"] = ["/CLEOII_2005_I668268/d01-x01-y01","/CLEOII_1994_I371611/d01-x01-y01", "/CLEOII_1994_I371611/d02-x01-y01","/ARGUS_1994_I371613/d01-x01-y01"] analyses["HadronDecays"][4222] = { "Modes" : {"$\\Sigma^*\\to\\Lambda_c\\pi$" : {} } } analyses["HadronDecays"][4222]["Modes"]["$\\Sigma^*\\to\\Lambda_c\\pi$"]["data"] = ["/CLEOII_1997_I424575/d02-x01-y01"] # charged multiplicity (total) analyses["Charged"]["TotalChargedMult"][0][9.5 ] = ["/LENA_1981_I164397/d03-x01-y01"] analyses["Charged"]["TotalChargedMult"][0][10.47] = ["/ARGUS_1992_I319102/d04-x01-y01"] analyses["Charged"]["TotalChargedMult"][0][12.0 ] = ["/JADE_1983_I190818/d01-x01-y01"] analyses["Charged"]["TotalChargedMult"][0][14.0 ] = ["/TASSO_1989_I277658/d02-x01-y01"] analyses["Charged"]["TotalChargedMult"][0][21.65] = ["/PLUTO_1980_I154270/d01-x01-y01"] analyses["Charged"]["TotalChargedMult"][0][22.0 ] = ["/TASSO_1980_I143691/d01-x01-y01","/JADE_1979_I142874/d02-x01-y01"] analyses["Charged"]["TotalChargedMult"][0][29.0 ] = ["/TPC_1987_I235694/d05-x01-y04","/HRS_1986_I18502/d03-x01-y01"] analyses["Charged"]["TotalChargedMult"][0][50.0 ] = ["/AMY_1990_I295160/d02-x01-y01"] analyses["Charged"]["TotalChargedMult"][0][55.7 ] = ["/AMY_1990_I295160/d02-x02-y01"] analyses["Charged"]["TotalChargedMult"][0][57.8 ] = ["/TOPAZ_1997_I454183/d01-x01-y01"] analyses["Charged"]["TotalChargedMult"][0][91.2 ] = ["/ALEPH_1991_S2435284/d02-x01-y01","/OPAL_1992_I321190/d05-x01-y01", "/DELPHI_1991_I301657/d04-x01-y01","/ALEPH_2004_S5765862/d01-x01-y01", "/DELPHI_1996_S3430090/d35-x01-y01","/DELPHI_1998_I473409/d01-x01-y01", "/OPAL_1998_S3780481/d09-x01-y04","/ALEPH_1996_S3486095/d19-x01-y01"] analyses["Charged"]["TotalChargedMult"][0][161.0] = ["/OPAL_1997_I440721/d02-x01-y01"] analyses["Charged"]["TotalChargedMult"][0][172.0] = ["/OPAL_2000_I513476/d14-x01-y01"] # light quark events analyses["Charged"]["TotalChargedMult"][1][29.0 ] = ["/TPC_1987_I235694/d04-x01-y04"] analyses["Charged"]["TotalChargedMult"][1][58.0 ] = ["/VENUS_1998_I453613/d01-x01-y02"] analyses["Charged"]["TotalChargedMult"][1][91.2 ] = ["/OPAL_2002_S5361494/d01-x01-y03","/OPAL_1998_S3780481/d09-x01-y01", "/DELPHI_1998_I473409/d03-x01-y01","/SLD_2004_S5693039/d08-x02-y01", "/SLD_1996_S3398250/d03-x01-y01","/DELPHI_1999_I448370/d09-x01-y02", "/OPAL_2001_I536266/d01-x01-y01","/OPAL_2001_I536266/d01-x01-y02", "/OPAL_2001_I536266/d01-x01-y03","/OPAL_2001_I536266/d02-x01-y01", "/OPAL_2001_I536266/d02-x01-y02","/OPAL_2001_I536266/d02-x01-y03"] analyses["Charged"]["TotalChargedMult"][1 ][195.0] = ["/DELPHI_2000_S4328825/d01-x01-y03"] # charm events analyses["Charged"]["TotalChargedMult"][4][29.0 ] = ["/TPC_1987_I235694/d03-x01-y04"] analyses["Charged"]["TotalChargedMult"][4][91.2 ] = ["/OPAL_2002_S5361494/d01-x01-y02","/OPAL_1998_S3780481/d09-x01-y02", "/SLD_2004_S5693039/d08-x02-y02","/SLD_1996_S3398250/d02-x01-y01"] analyses["Charged"]["TotalChargedMult"][4 ][195.0] = ["/DELPHI_2000_S4328825/d01-x01-y02"] # bottom events analyses["Charged"]["TotalChargedMult"][5][29.0 ] = ["/TPC_1987_I235694/d02-x01-y04"] analyses["Charged"]["TotalChargedMult"][5][58.0 ] = ["/VENUS_1998_I453613/d01-x01-y01"] analyses["Charged"]["TotalChargedMult"][5][91.2 ] = ["/OPAL_2002_S5361494/d01-x01-y01","/OPAL_1998_S3780481/d09-x01-y03", "/DELPHI_1998_I473409/d02-x01-y01","/SLD_2004_S5693039/d08-x02-y03", "/SLD_1996_S3398250/d01-x01-y01","/DELPHI_1999_I448370/d09-x01-y01"] analyses["Charged"]["TotalChargedMult"][5 ][195.0] = ["/DELPHI_2000_S4328825/d01-x01-y01"] # difference charm-light analyses["Charged"]["TotalChargedMult"][41][91.2 ] = ["/SLD_2004_S5693039/d08-x03-y02","/SLD_1996_S3398250/d04-x01-y01"] # difference bottom-light analyses["Charged"]["TotalChargedMult"][51][58.0 ] = ["/VENUS_1998_I453613/d01-x01-y03"] analyses["Charged"]["TotalChargedMult"][51][91.2 ] = ["/OPAL_2002_S5361494/d01-x01-y04","/SLD_2004_S5693039/d08-x03-y03", "/SLD_1996_S3398250/d05-x01-y01"] analyses["Charged"]["TotalChargedMult"][51][195.0] = ["/DELPHI_2000_S4328825/d01-x01-y04"] # with cuts analyses["Charged"]["TotalChargedMult"]["C"][91.2] = ["\ALEPH_1996_S3486095/d20-x01-y01","\ALEPH_1996_S3486095/d21-x01-y01", "\ALEPH_1996_S3486095/d22-x01-y01","\ALEPH_1996_S3486095/d23-x01-y01"] # charged multiplicity (dist) analyses["Charged"]["DistChargedMult"][0][10.47] = ["/ARGUS_1992_I319102/d02-x01-y01"] analyses["Charged"]["DistChargedMult"][0][14.0] = ["/TASSO_1989_I277658/d05-x01-y01"] analyses["Charged"]["DistChargedMult"][0][22.0] = ["/TASSO_1989_I277658/d05-x01-y02"] analyses["Charged"]["DistChargedMult"][0][29.0] = ["/HRS_1986_I18502/d01-x01-y01"] analyses["Charged"]["DistChargedMult"][0][34.8] = ["/TASSO_1989_I277658/d05-x01-y03"] analyses["Charged"]["DistChargedMult"][0][35.0] = ["/TASSO_1988_I263859/d06-x01-y01"] analyses["Charged"]["DistChargedMult"][0][43.6] = ["/TASSO_1989_I277658/d05-x01-y04"] analyses["Charged"]["DistChargedMult"][0][50.0] = ["/AMY_1990_I295160/d01-x01-y01"] analyses["Charged"]["DistChargedMult"][0][52.0] = ["/AMY_1990_I295160/d01-x01-y02"] analyses["Charged"]["DistChargedMult"][0][55.0] = ["/AMY_1990_I295160/d01-x01-y03"] analyses["Charged"]["DistChargedMult"][0][56.0] = ["/AMY_1990_I295160/d01-x01-y04"] analyses["Charged"]["DistChargedMult"][0][57.0] = ["/AMY_1990_I295160/d01-x01-y05"] analyses["Charged"]["DistChargedMult"][0][60.0] = ["/AMY_1990_I295160/d01-x01-y06"] analyses["Charged"]["DistChargedMult"][0][60.8] = ["/AMY_1990_I295160/d01-x01-y07"] analyses["Charged"]["DistChargedMult"][0][61.4] = ["/AMY_1990_I295160/d01-x01-y08"] analyses["Charged"]["DistChargedMult"][0][55.7] = ["/AMY_1990_I295160/d01-x01-y09"] analyses["Charged"]["DistChargedMult"][0][91.2] = ["/ALEPH_1991_S2435284/d01-x01-y01","/OPAL_1992_I321190/d01-x01-y01", "/DELPHI_1991_I301657/d02-x01-y01","/L3_2004_I652683/d59-x01-y01", "/ALEPH_1996_S3486095/d18-x01-y01"] analyses["Charged"]["DistChargedMult"][2][91.2] = ["/L3_2004_I652683/d59-x01-y02"] analyses["Charged"]["DistChargedMult"][5][91.2] = ["/L3_2004_I652683/d59-x01-y03"] analyses["Charged"]["DistChargedMult"][0][130.1] = ["/L3_2004_I652683/d60-x01-y01"] analyses["Charged"]["DistChargedMult"][0][136.3] = ["/L3_2004_I652683/d60-x01-y02"] analyses["Charged"]["DistChargedMult"][0][161.0] = ["/OPAL_1997_I440721/d26-x01-y01"] analyses["Charged"]["DistChargedMult"][0][161.3] = ["/L3_2004_I652683/d60-x01-y03"] analyses["Charged"]["DistChargedMult"][0][172.0] = ["/OPAL_2000_I513476/d13-x01-y01"] analyses["Charged"]["DistChargedMult"][0][172.3] = ["/L3_2004_I652683/d61-x01-y01"] analyses["Charged"]["DistChargedMult"][0][182.8] = ["/L3_2004_I652683/d61-x01-y02"] analyses["Charged"]["DistChargedMult"][0][183.0] = ["/OPAL_2000_I513476/d13-x01-y02"] analyses["Charged"]["DistChargedMult"][0][188.6] = ["/L3_2004_I652683/d61-x01-y03"] analyses["Charged"]["DistChargedMult"][0][189.0] = ["/OPAL_2000_I513476/d13-x01-y03"] analyses["Charged"]["DistChargedMult"][0][194.4] = ["/L3_2004_I652683/d62-x01-y01"] analyses["Charged"]["DistChargedMult"][0][200.2] = ["/L3_2004_I652683/d62-x01-y02"] analyses["Charged"]["DistChargedMult"][0][206.2] = ["/L3_2004_I652683/d62-x01-y03"] analyses["Charged"]["DistChargedMult"]["C"][91.2]=["/DELPHI_1991_I324035/d01-x01-y01","/DELPHI_1991_I324035/d02-x01-y01", "/DELPHI_1991_I324035/d03-x01-y01","/DELPHI_1991_I324035/d04-x01-y01", "/DELPHI_1991_I324035/d05-x01-y01","/DELPHI_1991_I324035/d06-x01-y01", "/DELPHI_1991_I324035/d07-x01-y01","/DELPHI_1991_I324035/d08-x01-y01", "/DELPHI_1991_I324035/d09-x01-y01","/DELPHI_1991_I324035/d10-x01-y01", "/DELPHI_1991_I324035/d11-x01-y01","/DELPHI_1991_I324035/d12-x01-y01", "/DELPHI_1991_I324035/d13-x01-y01", "/DELPHI_1992_I334948/d01-x01-y01","/DELPHI_1992_I334948/d01-x01-y02", "/DELPHI_1992_I334948/d01-x01-y03","/DELPHI_1992_I334948/d02-x01-y01", "/DELPHI_1992_I334948/d02-x01-y02","/DELPHI_1992_I334948/d02-x01-y03", "/DELPHI_1992_I334948/d03-x01-y01","/DELPHI_1992_I334948/d03-x01-y02", "/DELPHI_1992_I334948/d03-x01-y03",] analyses["Charged"]["DistChargedMult"][21][ 5.25] = ["/OPAL_2004_I631361/d01-x01-y01"] analyses["Charged"]["DistChargedMult"][21][ 5.98] = ["/OPAL_2004_I631361/d01-x01-y02"] analyses["Charged"]["DistChargedMult"][21][ 6.98] = ["/OPAL_2004_I631361/d01-x01-y03"] analyses["Charged"]["DistChargedMult"][21][ 8.43] = ["/OPAL_2004_I631361/d02-x01-y01"] analyses["Charged"]["DistChargedMult"][21][10.92] = ["/OPAL_2004_I631361/d02-x01-y02"] analyses["Charged"]["DistChargedMult"][21][14.24] = ["/OPAL_2004_I631361/d03-x01-y01"] analyses["Charged"]["DistChargedMult"][21][17.72] = ["/OPAL_2004_I631361/d03-x01-y02"] # charged particle spectra # xi analyses["Charged"]["ChargedSpectrum"][0]["xi"][2.2 ] = ["/BESII_2004_I622224/d01-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["xi"][2.6 ] = ["/BESII_2004_I622224/d02-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["xi"][3.0 ] = ["/BESII_2004_I622224/d03-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["xi"][3.2 ] = ["/BESII_2004_I622224/d04-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["xi"][4.6 ] = ["/BESII_2004_I622224/d05-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["xi"][4.8 ] = ["/BESII_2004_I622224/d06-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["xi"][12.0 ] = ["/TASSO_1980_I153511/d05-x01-y01","/TASSO_1982_I177174/d02-x01-y01", "/TASSO_1982_I177174/d03-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["xi"][58.0 ] = ["/TOPAZ_1995_I381900/d01-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["xi"][91.2 ] = ["/ALEPH_1996_S3486095/d17-x01-y01","/DELPHI_1996_S3430090/d08-x01-y01", "/L3_2004_I652683/d65-x01-y01","/OPAL_1998_S3780481/d08-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["xi"][130.1] = ["/L3_2004_I652683/d66-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["xi"][133.0] = ["/ALEPH_2004_S5765862/d11-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["xi"][136.3] = ["/L3_2004_I652683/d66-x01-y02"] analyses["Charged"]["ChargedSpectrum"][0]["xi"][161.0] = ["/ALEPH_2004_S5765862/d12-x01-y01","/OPAL_1997_I440721/d25-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["xi"][161.3] = ["/L3_2004_I652683/d66-x01-y03"] analyses["Charged"]["ChargedSpectrum"][0]["xi"][172.0] = ["/ALEPH_2004_S5765862/d13-x01-y01","/OPAL_2000_I513476/d19-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["xi"][172.3] = ["/L3_2004_I652683/d67-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["xi"][182.8] = ["/L3_2004_I652683/d67-x01-y02"] analyses["Charged"]["ChargedSpectrum"][0]["xi"][183.0] = ["/DELPHI_2003_I620250/d32-x01-y01","/ALEPH_2004_S5765862/d14-x01-y01", "/OPAL_2000_I513476/d19-x01-y02"] analyses["Charged"]["ChargedSpectrum"][0]["xi"][188.6] = ["/L3_2004_I652683/d67-x01-y03"] analyses["Charged"]["ChargedSpectrum"][0]["xi"][189.0] = ["/ALEPH_2004_S5765862/d15-x01-y01","/DELPHI_2003_I620250/d32-x01-y02", "/OPAL_2000_I513476/d19-x01-y03"] analyses["Charged"]["ChargedSpectrum"][0]["xi"][192.0] = ["/DELPHI_2003_I620250/d32-x01-y03"] analyses["Charged"]["ChargedSpectrum"][0]["xi"][194.4] = ["/L3_2004_I652683/d68-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["xi"][200.2] = ["/L3_2004_I652683/d68-x01-y02"] analyses["Charged"]["ChargedSpectrum"][0]["xi"][206.2] = ["/L3_2004_I652683/d68-x01-y03"] analyses["Charged"]["ChargedSpectrum"][0]["xi"][196.0] = ["/DELPHI_2003_I620250/d32-x01-y04","/ALEPH_2004_S5765862/d16-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["xi"][200.0] = ["/DELPHI_2003_I620250/d33-x01-y01","/ALEPH_2004_S5765862/d17-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["xi"][200.5] = ["/OPAL_2003_I595335/d05-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["xi"][202.0] = ["/DELPHI_2003_I620250/d33-x01-y02"] analyses["Charged"]["ChargedSpectrum"][0]["xi"][205.0] = ["/DELPHI_2003_I620250/d33-x01-y03"] analyses["Charged"]["ChargedSpectrum"][0]["xi"][206.0] = ["/ALEPH_2004_S5765862/d18-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["xi"][207.0] = ["/DELPHI_2003_I620250/d33-x01-y04"] # x analyses["Charged"]["ChargedSpectrum"][0]["x" ][ 3.0 ] = ["/MARKI_1976_I109792/d02-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["x" ][ 4.8 ] = ["/MARKI_1976_I109792/d03-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["x" ][ 5.8 ] = ["/MARKI_1976_I109792/d04-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["x" ][ 6.2 ] = ["/MARKI_1976_I109792/d05-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["x" ][ 6.6 ] = ["/MARKI_1976_I109792/d06-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["x" ][ 7.0 ] = ["/MARKI_1976_I109792/d07-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["x" ][ 7.4 ] = ["/MARKI_1976_I109792/d08-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["x" ][13.0 ] = ["/TASSO_1980_I143691/d05-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["x" ][14.0 ] = ["/TASSO_1982_I177174/d01-x01-y01","/TASSO_1982_I177174/d02-x01-y02", "/TASSO_1982_I177174/d03-x01-y02"] analyses["Charged"]["ChargedSpectrum"][0]["x" ][19.5 ] = ["/TASSO_1980_I143691/d06-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["x" ][22.0 ] = ["/TASSO_1982_I177174/d01-x01-y02","/TASSO_1982_I177174/d02-x01-y03", "/TASSO_1982_I177174/d03-x01-y03"] analyses["Charged"]["ChargedSpectrum"][0]["x" ][25.0 ] = ["/TASSO_1982_I177174/d02-x01-y04","/TASSO_1982_I177174/d03-x01-y04"] analyses["Charged"]["ChargedSpectrum"][0]["x" ][29.0 ] = ["/TPC_1988_I262143/d01-x01-y04" ,"/HRS_1985_I201482/d10-x01-y01", "/HRS_1985_I201482/d12-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["x" ][30.0 ] = ["/TASSO_1982_I177174/d02-x01-y05","/TASSO_1982_I177174/d03-x01-y05", "/TASSO_1980_I143691/d07-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["x" ][30.8 ] = ["/TASSO_1980_I153511/d06-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["x" ][33.0 ] = ["/TASSO_1982_I177174/d01-x01-y03"] analyses["Charged"]["ChargedSpectrum"][0]["x" ][34.0 ] = ["/TASSO_1982_I177174/d02-x01-y06","/TASSO_1982_I177174/d03-x01-y06"] analyses["Charged"]["ChargedSpectrum"][0]["x" ][35.0 ] = ["/TASSO_1982_I177174/d02-x01-y07","/TASSO_1982_I177174/d03-x01-y07", "/TASSO_1988_I263859/d10-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["x" ][55.2 ] = ["/AMY_1990_I283337/d02-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["x" ][91.2 ] = ["/DELPHI_1998_I473409/d16-x01-y01","/DELPHI_1998_I473409/d17-x01-y01", "/ALEPH_1996_S3486095/d09-x01-y01","/OPAL_1998_S3780481/d04-x01-y01", "/SLD_2004_S5693039/d01-x01-y01","/SLD_1999_S3743934/d04-x01-y01", "/DELPHI_1996_S3430090/d07-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["x" ][133.0] = ["/ALEPH_2004_S5765862/d02-x01-y01","/ALEPH_2004_S5765862/d19-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["x" ][161.0] = ["/ALEPH_2004_S5765862/d03-x01-y01","/ALEPH_2004_S5765862/d20-x01-y01", "/OPAL_1997_I440721/d24-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["x" ][172.0] = ["/ALEPH_2004_S5765862/d04-x01-y01","/ALEPH_2004_S5765862/d21-x01-y01", "/OPAL_2000_I513476/d18-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["x" ][183.0] = ["/ALEPH_2004_S5765862/d05-x01-y01","/ALEPH_2004_S5765862/d22-x01-y01", "/OPAL_2000_I513476/d18-x01-y02"] analyses["Charged"]["ChargedSpectrum"][0]["x" ][189.0] = ["/ALEPH_2004_S5765862/d06-x01-y01","/ALEPH_2004_S5765862/d23-x01-y01", "/OPAL_2000_I513476/d18-x01-y03"] analyses["Charged"]["ChargedSpectrum"][0]["x" ][196.0] = ["/ALEPH_2004_S5765862/d07-x01-y01","/ALEPH_2004_S5765862/d24-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["x" ][200.0] = ["/ALEPH_2004_S5765862/d08-x01-y01","/ALEPH_2004_S5765862/d25-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["x" ][200.5] = ["/OPAL_2003_I595335/d04-x01-y01"] analyses["Charged"]["ChargedSpectrum"][0]["x" ][206.0] = ["/ALEPH_2004_S5765862/d09-x01-y01","/ALEPH_2004_S5765862/d26-x01-y01"] # with cuts analyses["Charged"]["ChargedSpectrum"]["C"]["x" ][29.0 ] = ["/HRS_1985_I201482/d11-x01-y01","/HRS_1985_I201482/d13-x01-y01", "/HRS_1985_I201482/d14-x01-y01","/HRS_1985_I201482/d15-x01-y01"] # misc analyses["Charged"]["ChargedSpectrum"][0]["Other"][91.2] = ["/DELPHI_1999_I448370/d01-x01-y01","/DELPHI_1999_I448370/d02-x01-y01", "/DELPHI_1999_I448370/d03-x01-y01","/DELPHI_1999_I448370/d04-x01-y01", "/DELPHI_1999_I448370/d05-x01-y01","/DELPHI_1999_I448370/d05-x01-y02", "/DELPHI_1999_I448370/d05-x01-y03","/DELPHI_1999_I448370/d06-x01-y01", "/DELPHI_1999_I448370/d06-x01-y02","/DELPHI_1999_I448370/d07-x01-y01", "/DELPHI_1999_I448370/d07-x01-y02","/DELPHI_1999_I448370/d08-x01-y01", "/DELPHI_1999_I448370/d08-x01-y02"] # flavour separated analyses["Charged"]["ChargedSpectrum"][1]["x" ][91.2] = ["/DELPHI_1998_I473409/d32-x01-y01","/DELPHI_1998_I473409/d33-x01-y01", "/DELPHI_1997_I428178/d01-x01-y03","/OPAL_1998_S3780481/d01-x01-y01", "/SLD_2004_S5693039/d08-x01-y01"] analyses["Charged"]["ChargedSpectrum"][1]["xi"][91.2] = ["/OPAL_1998_S3780481/d05-x01-y01"] analyses["Charged"]["ChargedSpectrum"][2]["x" ][13.0 ] = ["/OPAL_2004_I648738/d06-x01-y01"] analyses["Charged"]["ChargedSpectrum"][2]["x" ][28.0 ] = ["/OPAL_2004_I648738/d07-x01-y01"] analyses["Charged"]["ChargedSpectrum"][2]["x" ][49.0 ] = ["/OPAL_2004_I648738/d08-x01-y01"] analyses["Charged"]["ChargedSpectrum"][2]["x" ][100.0] = ["/OPAL_2004_I648738/d09-x01-y01"] analyses["Charged"]["ChargedSpectrum"][2]["x" ][91.2 ] = ["/OPAL_2004_I648738/d10-x01-y01"] analyses["Charged"]["ChargedSpectrum"][2]["x" ][196.0] = ["/OPAL_2004_I648738/d11-x01-y01"] analyses["Charged"]["ChargedSpectrum"][2]["xi"][91.2 ] = ["/L3_2004_I652683/d65-x01-y02"] analyses["Charged"]["ChargedSpectrum"][4]["x" ][91.2 ] = ["/DELPHI_1997_I428178/d01-x01-y02","/OPAL_1998_S3780481/d02-x01-y01", "/SLD_2004_S5693039/d08-x01-y02"] analyses["Charged"]["ChargedSpectrum"][4]["xi"][91.2 ] = ["/OPAL_1998_S3780481/d06-x01-y01"] analyses["Charged"]["ChargedSpectrum"][5]["x" ][13.0 ] = ["/OPAL_2004_I648738/d06-x01-y02"] analyses["Charged"]["ChargedSpectrum"][5]["x" ][28.0 ] = ["/OPAL_2004_I648738/d07-x01-y02"] analyses["Charged"]["ChargedSpectrum"][5]["x" ][49.0 ] = ["/OPAL_2004_I648738/d08-x01-y02"] analyses["Charged"]["ChargedSpectrum"][5]["x" ][100.0] = ["/OPAL_2004_I648738/d09-x01-y02"] analyses["Charged"]["ChargedSpectrum"][5]["x" ][91.2 ] = ["/DELPHI_1998_I473409/d24-x01-y01","/DELPHI_1998_I473409/d25-x01-y01", "/DELPHI_1997_I428178/d01-x01-y01","/OPAL_1998_S3780481/d03-x01-y01", "/SLD_2004_S5693039/d08-x01-y03","/OPAL_2004_I648738/d10-x01-y02"] analyses["Charged"]["ChargedSpectrum"][5]["xi"][91.2 ] = ["/OPAL_1998_S3780481/d07-x01-y01","/L3_2004_I652683/d65-x01-y03"] analyses["Charged"]["ChargedSpectrum"][5]["x" ][196.0] = ["/OPAL_2004_I648738/d11-x01-y02"] # gluons analyses["Charged"]["ChargedSpectrum"][21]["x"][ 6.5 ] = ["/OPAL_2004_I648738/d06-x01-y03"] analyses["Charged"]["ChargedSpectrum"][21]["x"][14.0 ] = ["/OPAL_2004_I648738/d07-x01-y03"] analyses["Charged"]["ChargedSpectrum"][21]["x"][14.24] = ["/OPAL_2004_I631361/d05-x01-y01"] analyses["Charged"]["ChargedSpectrum"][21]["x"][17.72] = ["/OPAL_2004_I631361/d05-x01-y02"] analyses["Charged"]["ChargedSpectrum"][21]["x"][24.5 ] = ["/OPAL_2004_I648738/d08-x01-y03"] analyses["Charged"]["ChargedSpectrum"][21]["x"][50.0 ] = ["/OPAL_2004_I648738/d09-x01-y03"] # rapidity w.r.t thrust analyses["Charged"]["ChargedRapidityThrust"][13.0 ] = ["/TASSO_1980_I143691/d02-x01-y01"] analyses["Charged"]["ChargedRapidityThrust"][19.5 ] = ["/TASSO_1980_I143691/d03-x01-y01"] analyses["Charged"]["ChargedRapidityThrust"][29.0 ] = ["/HRS_1985_I201482/d19-x01-y01","/HRS_1985_I201482/d20-x01-y01"] analyses["Charged"]["ChargedRapidityThrust"][30.0 ] = ["/TASSO_1980_I143691/d04-x01-y01"] analyses["Charged"]["ChargedRapidityThrust"][55.2 ] = ["/AMY_1990_I283337/d01-x01-y01"] analyses["Charged"]["ChargedRapidityThrust"][91.2 ] = ["/DELPHI_1996_S3430090/d05-x01-y01","/ALEPH_1996_S3486095/d10-x01-y01"] analyses["Charged"]["ChargedRapidityThrust"][133.0] = ["/ALEPH_2004_S5765862/d36-x01-y01"] analyses["Charged"]["ChargedRapidityThrust"][161.0] = ["/ALEPH_2004_S5765862/d37-x01-y01","/OPAL_1997_I440721/d23-x01-y01"] analyses["Charged"]["ChargedRapidityThrust"][172.0] = ["/ALEPH_2004_S5765862/d38-x01-y01","/OPAL_2000_I513476/d17-x01-y01"] analyses["Charged"]["ChargedRapidityThrust"][183.0] = ["/DELPHI_2003_I620250/d30-x01-y01","/ALEPH_2004_S5765862/d39-x01-y01", "/OPAL_2000_I513476/d17-x01-y02"] analyses["Charged"]["ChargedRapidityThrust"][189.0] = ["/DELPHI_2003_I620250/d30-x01-y02","/ALEPH_2004_S5765862/d40-x01-y01", "/OPAL_2000_I513476/d17-x01-y03"] analyses["Charged"]["ChargedRapidityThrust"][192.0] = ["/DELPHI_2003_I620250/d30-x01-y03"] analyses["Charged"]["ChargedRapidityThrust"][196.0] = ["/DELPHI_2003_I620250/d30-x01-y04","/ALEPH_2004_S5765862/d41-x01-y01"] analyses["Charged"]["ChargedRapidityThrust"][200.0] = ["/DELPHI_2003_I620250/d31-x01-y01","/ALEPH_2004_S5765862/d42-x01-y01"] analyses["Charged"]["ChargedRapidityThrust"][200.5] = ["/OPAL_2003_I595335/d03-x01-y01"] analyses["Charged"]["ChargedRapidityThrust"][202.0] = ["/DELPHI_2003_I620250/d31-x01-y02"] analyses["Charged"]["ChargedRapidityThrust"][205.0] = ["/DELPHI_2003_I620250/d31-x01-y03"] analyses["Charged"]["ChargedRapidityThrust"][206.0] = ["/ALEPH_2004_S5765862/d43-x01-y01"] analyses["Charged"]["ChargedRapidityThrust"][207.0] = ["/DELPHI_2003_I620250/d31-x01-y04"] # pt in w.r.t thrust analyses["Charged"]["ChargedpTInThrust" ][91.2 ] = ["/DELPHI_1996_S3430090/d01-x01-y01","/ALEPH_1996_S3486095/d11-x01-y01"] analyses["Charged"]["ChargedpTInThrust" ][133.0] = ["/ALEPH_2004_S5765862/d27-x01-y01"] analyses["Charged"]["ChargedpTInThrust" ][161.0] = ["/ALEPH_2004_S5765862/d28-x01-y01","/OPAL_1997_I440721/d21-x01-y01"] analyses["Charged"]["ChargedpTInThrust" ][172.0] = ["/ALEPH_2004_S5765862/d29-x01-y01","/OPAL_2000_I513476/d15-x01-y01"] analyses["Charged"]["ChargedpTInThrust" ][183.0] = ["/DELPHI_2003_I620250/d34-x01-y01","/ALEPH_2004_S5765862/d30-x01-y01", "/OPAL_2000_I513476/d15-x01-y02"] analyses["Charged"]["ChargedpTInThrust" ][189.0] = ["/DELPHI_2003_I620250/d34-x01-y02","/ALEPH_2004_S5765862/d31-x01-y01", "/OPAL_2000_I513476/d15-x01-y03"] analyses["Charged"]["ChargedpTInThrust" ][192.0] = ["/DELPHI_2003_I620250/d34-x01-y03"] analyses["Charged"]["ChargedpTInThrust" ][196.0] = ["/DELPHI_2003_I620250/d34-x01-y04","/ALEPH_2004_S5765862/d32-x01-y01"] analyses["Charged"]["ChargedpTInThrust" ][200.0] = ["/DELPHI_2003_I620250/d35-x01-y01","/ALEPH_2004_S5765862/d33-x01-y01"] analyses["Charged"]["ChargedpTInThrust" ][200.5] = ["/OPAL_2003_I595335/d01-x01-y01"] analyses["Charged"]["ChargedpTInThrust" ][202.0] = ["/DELPHI_2003_I620250/d35-x01-y02"] analyses["Charged"]["ChargedpTInThrust" ][205.0] = ["/DELPHI_2003_I620250/d35-x01-y03"] analyses["Charged"]["ChargedpTInThrust" ][206.0] = ["/ALEPH_2004_S5765862/d34-x01-y01"] analyses["Charged"]["ChargedpTInThrust" ][207.0] = ["/DELPHI_2003_I620250/d35-x01-y04"] # pt out thrust analyses["Charged"]["ChargedpTOutThrust"][91.2 ] = ["/DELPHI_1996_S3430090/d02-x01-y01","/ALEPH_1996_S3486095/d12-x01-y01"] analyses["Charged"]["ChargedpTOutThrust"][161.0] = ["/OPAL_1997_I440721/d22-x01-y01"] analyses["Charged"]["ChargedpTOutThrust"][172.0] = ["/OPAL_2000_I513476/d16-x01-y01"] analyses["Charged"]["ChargedpTOutThrust"][183.0] = ["/DELPHI_2003_I620250/d36-x01-y01","/OPAL_2000_I513476/d16-x01-y02"] analyses["Charged"]["ChargedpTOutThrust"][189.0] = ["/DELPHI_2003_I620250/d36-x01-y02","/OPAL_2000_I513476/d16-x01-y03"] analyses["Charged"]["ChargedpTOutThrust"][192.0] = ["/DELPHI_2003_I620250/d36-x01-y03"] analyses["Charged"]["ChargedpTOutThrust"][196.0] = ["/DELPHI_2003_I620250/d36-x01-y04"] analyses["Charged"]["ChargedpTOutThrust"][200.0] = ["/DELPHI_2003_I620250/d37-x01-y01"] analyses["Charged"]["ChargedpTOutThrust"][200.5] = ["/OPAL_2003_I595335/d02-x01-y01"] analyses["Charged"]["ChargedpTOutThrust"][202.0] = ["/DELPHI_2003_I620250/d37-x01-y02"] analyses["Charged"]["ChargedpTOutThrust"][205.0] = ["/DELPHI_2003_I620250/d37-x01-y03"] analyses["Charged"]["ChargedpTOutThrust"][206.0] = ["/ALEPH_2004_S5765862/d35-x01-y01"] analyses["Charged"]["ChargedpTOutThrust"][207.0] = ["/DELPHI_2003_I620250/d37-x01-y04"] # pT analyses["Charged"]["ChargedpTThrust" ][29.0] = ["/HRS_1985_I201482/d22-x01-y01","/HRS_1985_I201482/d23-x01-y01"] analyses["Charged"]["ChargedpTvsxpThrust" ][91.2] = ["/DELPHI_1996_S3430090/d10-x01-y01"] analyses["Charged"]["ChargedpTOutvsxpThrust"][91.2] = ["/DELPHI_1996_S3430090/d09-x01-y01"] # averages analyses["Charged"]["ChargedAveragepTThrust" ][20.] = ["/PLUTO_1983_I191161/d01-x01-y01"] analyses["Charged"]["ChargedAveragepT2Thrust" ][20.] = ["/PLUTO_1983_I191161/d01-x01-y02"] analyses["Charged"]["ChargedSumpTThrust" ][20.] = ["/PLUTO_1983_I191161/d01-x01-y03"] analyses["Charged"]["ChargedSumpT2Thrust" ][20.] = ["/PLUTO_1983_I191161/d01-x01-y04"] analyses["Charged"]["ChargedAveragepTSphericity" ][20.] = ["/PLUTO_1983_I191161/d02-x01-y01"] analyses["Charged"]["ChargedAveragepT2Sphericity"][20.] = ["/PLUTO_1983_I191161/d02-x01-y02"] analyses["Charged"]["ChargedSumpTSphericity" ][20.] = ["/PLUTO_1983_I191161/d02-x01-y03"] analyses["Charged"]["ChargedSumpT2Sphericity" ][20.] = ["/PLUTO_1983_I191161/d02-x01-y04"] # xF analyses["Charged"]["ChargedxFThrust"][29.0] = ["/HRS_1985_I201482/d16-x01-y01","/HRS_1985_I201482/d17-x01-y01"] # rapidity sphericity analyses["Charged"]["ChargedRapiditySphericity"][35.0 ] = ["/TASSO_1988_I263859/d11-x01-y01"] analyses["Charged"]["ChargedRapiditySphericity"][91.2 ] = ["/DELPHI_1996_S3430090/d06-x01-y01"] analyses["Charged"]["ChargedRapiditySphericity"][133.0] = ["/ALEPH_2004_S5765862/d44-x01-y01"] analyses["Charged"]["ChargedRapiditySphericity"][161.0] = ["/ALEPH_2004_S5765862/d45-x01-y01"] analyses["Charged"]["ChargedRapiditySphericity"][172.0] = ["/ALEPH_2004_S5765862/d46-x01-y01"] analyses["Charged"]["ChargedRapiditySphericity"][183.0] = ["/ALEPH_2004_S5765862/d47-x01-y01"] analyses["Charged"]["ChargedRapiditySphericity"][189.0] = ["/ALEPH_2004_S5765862/d48-x01-y01"] analyses["Charged"]["ChargedRapiditySphericity"][196.0] = ["/ALEPH_2004_S5765862/d49-x01-y01"] analyses["Charged"]["ChargedRapiditySphericity"][200.0] = ["/ALEPH_2004_S5765862/d50-x01-y01"] analyses["Charged"]["ChargedRapiditySphericity"][206.0] = ["/ALEPH_2004_S5765862/d51-x01-y01"] # pt in sphericity analyses["Charged"]["ChargedpTInSphericity" ][35.0 ] = ["/TASSO_1988_I263859/d07-x01-y01"] analyses["Charged"]["ChargedpTInSphericity" ][55.2 ] = ["/AMY_1990_I283337/d06-x01-y01"] analyses["Charged"]["ChargedpTInSphericity" ][91.2 ] = ["/DELPHI_1996_S3430090/d03-x01-y01"] # pt out sphericity analyses["Charged"]["ChargedpTOutSphericity"][35.0 ] = ["/TASSO_1988_I263859/d08-x01-y01"] analyses["Charged"]["ChargedpTOutSphericity"][55.2 ] = ["/AMY_1990_I283337/d07-x01-y01"] analyses["Charged"]["ChargedpTOutSphericity"][91.2 ] = ["/DELPHI_1996_S3430090/d04-x01-y01"] # others analyses["Charged"]["ChargedpLSphericity" ][55.2] = ["/AMY_1990_I283337/d03-x01-y01" ] analyses["Charged"]["ChargedpTSphericity" ][55.2] = ["/AMY_1990_I283337/d04-x01-y01" ] analyses["Charged"]["ChargedpTSphericity" ][35.0] = ["/TASSO_1988_I263859/d09-x01-y01"] analyses["Charged"]["ChargedpT2Sphericity"][55.2] = ["/AMY_1990_I283337/d05-x01-y01" ] analyses["Charged"]["ChargedFlowSphericity"][55.2] = ["/AMY_1990_I283337/d10-x01-y01" ] analyses["Charged"]["ChargedEnergyFlowSphericity"][55.2] = ["/AMY_1990_I283337/d11-x01-y01" ] analyses["Charged"]["ChargedAveragepT2inSphericity" ][29.0] = ["/HRS_1985_I201482/d24-x01-y01"] analyses["Charged"]["ChargedAveragepT2inSphericity" ][35.0] = ["/TASSO_1988_I263859/d04-x01-y01"] analyses["Charged"]["ChargedAveragepT2inSphericity" ][55.2] = ["/AMY_1990_I283337/d08-x01-y01"] analyses["Charged"]["ChargedAveragepT2outSphericity"][29.0] = ["/HRS_1985_I201482/d25-x01-y01"] analyses["Charged"]["ChargedAveragepT2outSphericity"][35.0] = ["/TASSO_1988_I263859/d05-x01-y01"] analyses["Charged"]["ChargedAveragepT2outSphericity"][55.2] = ["/AMY_1990_I283337/d09-x01-y01"] # identified particle (flavour sep) analyses["IdentifiedParticleFlavour"][111 ][5]["x"][91.2]=["/DELPHI_1996_I401100/d03-x01-y01","/SLD_2004_S5693039/d05-x01-y03"] analyses["IdentifiedParticleFlavour"][211 ][5]["x"][91.2]=["/DELPHI_1998_I473409/d26-x01-y01","/DELPHI_1998_I473409/d27-x01-y01", "/SLD_1999_S3743934/d10-x01-y03"] analyses["IdentifiedParticleFlavour"][321 ][5]["x"][91.2]=["/DELPHI_1998_I473409/d28-x01-y01","/DELPHI_1998_I473409/d29-x01-y01", "/SLD_2004_S5693039/d06-x01-y03","/SLD_1999_S3743934/d12-x01-y03"] analyses["IdentifiedParticleFlavour"][2212][5]["x"][91.2]=["/DELPHI_1998_I473409/d30-x01-y01","/DELPHI_1998_I473409/d31-x01-y01", "/SLD_2004_S5693039/d07-x01-y03","/SLD_1999_S3743934/d16-x01-y03"] analyses["IdentifiedParticleFlavour"][211 ][4]["x"][91.2]=["/SLD_2004_S5693039/d05-x01-y02","/SLD_1999_S3743934/d10-x01-y02"] analyses["IdentifiedParticleFlavour"][321 ][4]["x"][91.2]=["/SLD_2004_S5693039/d06-x01-y02","/SLD_1999_S3743934/d12-x01-y02"] analyses["IdentifiedParticleFlavour"][2212][4]["x"][91.2]=["/SLD_2004_S5693039/d07-x01-y02","/SLD_1999_S3743934/d16-x01-y02"] analyses["IdentifiedParticleFlavour"][211 ][1]["x"][91.2]=["/DELPHI_1998_I473409/d34-x01-y01","/DELPHI_1998_I473409/d35-x01-y01", "/SLD_2004_S5693039/d05-x01-y01","/SLD_1999_S3743934/d10-x01-y01"] analyses["IdentifiedParticleFlavour"][321 ][1]["x"][91.2]=["/DELPHI_1998_I473409/d36-x01-y01","/DELPHI_1998_I473409/d37-x01-y01", "/SLD_2004_S5693039/d06-x01-y01","/SLD_1999_S3743934/d12-x01-y01"] analyses["IdentifiedParticleFlavour"][2212][1]["x"][91.2]=["/DELPHI_1998_I473409/d38-x01-y01","/DELPHI_1998_I473409/d39-x01-y01", "/SLD_2004_S5693039/d07-x01-y01","/SLD_1999_S3743934/d16-x01-y01"] analyses["IdentifiedParticleFlavour"][413][5]["x"][91.2]=["/OPAL_1995_I382219/d04-x01-y01"] analyses["IdentifiedParticleFlavour"][413][4]["x"][91.2]=["/OPAL_1995_I382219/d05-x01-y01"] analyses["IdentifiedParticleFlavour"][313 ][1]["x"][91.2]=["/SLD_1999_S3743934/d14-x01-y01"] analyses["IdentifiedParticleFlavour"][313 ][4]["x"][91.2]=["/SLD_1999_S3743934/d14-x01-y02"] analyses["IdentifiedParticleFlavour"][313 ][5]["x"][91.2]=["/SLD_1999_S3743934/d14-x01-y03"] analyses["IdentifiedParticleFlavour"][3122][1]["x"][91.2]=["/SLD_1999_S3743934/d18-x01-y01"] analyses["IdentifiedParticleFlavour"][3122][4]["x"][91.2]=["/SLD_1999_S3743934/d18-x01-y02"] analyses["IdentifiedParticleFlavour"][3122][5]["x"][91.2]=["/SLD_1999_S3743934/d18-x01-y03"] analyses["IdentifiedParticleFlavour"][311 ][1]["x"][91.2]=["/SLD_1999_S3743934/d20-x01-y01"] analyses["IdentifiedParticleFlavour"][311 ][4]["x"][91.2]=["/SLD_1999_S3743934/d20-x01-y02"] analyses["IdentifiedParticleFlavour"][311 ][5]["x"][91.2]=["/SLD_1999_S3743934/d20-x01-y03"] analyses["IdentifiedParticleFlavour"][333 ][1]["x"][91.2]=["/SLD_1999_S3743934/d22-x01-y01"] analyses["IdentifiedParticleFlavour"][333 ][4]["x"][91.2]=["/SLD_1999_S3743934/d22-x01-y02"] analyses["IdentifiedParticleFlavour"][333 ][5]["x"][91.2]=["/SLD_1999_S3743934/d22-x01-y03"] analyses["IdentifiedParticleFlavour"][211 ][41]["x"][91.2]=["/SLD_1999_S3743934/d11-x01-y01"] analyses["IdentifiedParticleFlavour"][211 ][51]["x"][91.2]=["/SLD_1999_S3743934/d11-x01-y02"] analyses["IdentifiedParticleFlavour"][321 ][41]["x"][91.2]=["/SLD_1999_S3743934/d13-x01-y01"] analyses["IdentifiedParticleFlavour"][321 ][51]["x"][91.2]=["/SLD_1999_S3743934/d13-x01-y02"] analyses["IdentifiedParticleFlavour"][313 ][41]["x"][91.2]=["/SLD_1999_S3743934/d15-x01-y01"] analyses["IdentifiedParticleFlavour"][313 ][51]["x"][91.2]=["/SLD_1999_S3743934/d15-x01-y02"] analyses["IdentifiedParticleFlavour"][2212][41]["x"][91.2]=["/SLD_1999_S3743934/d17-x01-y01"] analyses["IdentifiedParticleFlavour"][2212][51]["x"][91.2]=["/SLD_1999_S3743934/d17-x01-y02"] analyses["IdentifiedParticleFlavour"][3122][41]["x"][91.2]=["/SLD_1999_S3743934/d19-x01-y01"] analyses["IdentifiedParticleFlavour"][3122][51]["x"][91.2]=["/SLD_1999_S3743934/d19-x01-y02"] analyses["IdentifiedParticleFlavour"][311 ][41]["x"][91.2]=["/SLD_1999_S3743934/d21-x01-y01"] analyses["IdentifiedParticleFlavour"][311 ][51]["x"][91.2]=["/SLD_1999_S3743934/d21-x01-y02"] analyses["IdentifiedParticleFlavour"][333 ][41]["x"][91.2]=["/SLD_1999_S3743934/d23-x01-y01"] analyses["IdentifiedParticleFlavour"][333 ][51]["x"][91.2]=["/SLD_1999_S3743934/d23-x01-y02"] analyses["IdentifiedParticleFlavour"][211][5]["Ratio"][91.2]=["/DELPHI_1998_I473409/d08-x01-y01"] analyses["IdentifiedParticleFlavour"][211][1]["Ratio"][91.2]=["/DELPHI_1998_I473409/d12-x01-y01"] analyses["IdentifiedParticleFlavour"][321][5]["Ratio"][91.2]=["/DELPHI_1998_I473409/d09-x01-y01"] analyses["IdentifiedParticleFlavour"][321][1]["Ratio"][91.2]=["/DELPHI_1998_I473409/d13-x01-y01"] analyses["IdentifiedParticleFlavour"][2212][5]["Ratio"][91.2]=["/DELPHI_1998_I473409/d10-x01-y01"] analyses["IdentifiedParticleFlavour"][2212][1]["Ratio"][91.2]=["/DELPHI_1998_I473409/d14-x01-y01"] analyses["IdentifiedParticleFlavour"]["321/2212"][5]["Ratio"][91.2]=["/DELPHI_1998_I473409/d11-x01-y01"] analyses["IdentifiedParticleFlavour"]["321/2212"][1]["Ratio"][91.2]=["/DELPHI_1998_I473409/d15-x01-y01"] analyses["IdentifiedParticleFlavour"][311][4]["Other"][29.0]=["/HRS_1990_I280958/d05-x01-y01"] analyses["IdentifiedParticleFlavour"][311][1]["Other"][29.0]=["/HRS_1990_I280958/d06-x01-y01"] analyses["MultiplicityFlavour"]["321/2212"][1][91.2] = ["/DELPHI_1998_I473409/d03-x01-y05"] analyses["MultiplicityFlavour"]["321/2212"][5][91.2] = ["/DELPHI_1998_I473409/d02-x01-y05"] analyses["MultiplicityFlavour"][211 ][41][91.2]=["/SLD_1999_S3743934/d25-x01-y01"] analyses["MultiplicityFlavour"][211 ][51][91.2]=["/SLD_1999_S3743934/d25-x01-y02"] analyses["MultiplicityFlavour"][321 ][41][91.2]=["/SLD_1999_S3743934/d25-x02-y01"] analyses["MultiplicityFlavour"][321 ][51][91.2]=["/SLD_1999_S3743934/d25-x02-y02"] analyses["MultiplicityFlavour"][311 ][41][91.2]=["/SLD_1999_S3743934/d25-x03-y01"] analyses["MultiplicityFlavour"][311 ][51][91.2]=["/SLD_1999_S3743934/d25-x03-y02"] analyses["MultiplicityFlavour"][313 ][41][91.2]=["/SLD_1999_S3743934/d25-x04-y01"] analyses["MultiplicityFlavour"][313 ][51][91.2]=["/SLD_1999_S3743934/d25-x04-y02"] analyses["MultiplicityFlavour"][333 ][41][91.2]=["/SLD_1999_S3743934/d25-x05-y01"] analyses["MultiplicityFlavour"][333 ][51][91.2]=["/SLD_1999_S3743934/d25-x05-y02"] analyses["MultiplicityFlavour"][2212][41][91.2]=["/SLD_1999_S3743934/d25-x06-y01"] analyses["MultiplicityFlavour"][2212][51][91.2]=["/SLD_1999_S3743934/d25-x06-y02"] analyses["MultiplicityFlavour"][3122][41][91.2]=["/SLD_1999_S3743934/d25-x07-y01"] analyses["MultiplicityFlavour"][3122][51][91.2]=["/SLD_1999_S3743934/d25-x07-y02"] analyses["MultiplicityFlavour"][211 ][1][91.2]=["/SLD_2004_S5693039/d05-x02-y01","/SLD_1999_S3743934/d24-x01-y02", "/DELPHI_1998_I473409/d03-x01-y02"] analyses["MultiplicityFlavour"][211 ][4][91.2]=["/SLD_2004_S5693039/d05-x02-y02","/SLD_1999_S3743934/d24-x01-y03"] analyses["MultiplicityFlavour"][211 ][5][91.2]=["/SLD_2004_S5693039/d05-x02-y03","/SLD_1999_S3743934/d24-x01-y04", "/DELPHI_1998_I473409/d02-x01-y02"] analyses["MultiplicityFlavour"][321 ][1][91.2]=["/SLD_2004_S5693039/d06-x02-y01","/SLD_1999_S3743934/d24-x02-y02", "/DELPHI_1998_I473409/d03-x01-y03"] analyses["MultiplicityFlavour"][321 ][4][91.2]=["/SLD_2004_S5693039/d06-x02-y02","/SLD_1999_S3743934/d24-x02-y03"] analyses["MultiplicityFlavour"][321 ][5][91.2]=["/SLD_2004_S5693039/d06-x02-y03","/SLD_1999_S3743934/d24-x02-y04", "/DELPHI_1998_I473409/d02-x01-y03"] analyses["MultiplicityFlavour"][311 ][1][91.2]=["/SLD_1999_S3743934/d24-x03-y02"] analyses["MultiplicityFlavour"][311 ][4][91.2]=["/SLD_1999_S3743934/d24-x03-y03"] analyses["MultiplicityFlavour"][311 ][5][91.2]=["/SLD_1999_S3743934/d24-x03-y04"] analyses["MultiplicityFlavour"][313 ][1][91.2]=["/SLD_1999_S3743934/d24-x04-y02"] analyses["MultiplicityFlavour"][313 ][4][91.2]=["/SLD_1999_S3743934/d24-x04-y03"] analyses["MultiplicityFlavour"][313 ][5][91.2]=["/SLD_1999_S3743934/d24-x04-y04"] analyses["MultiplicityFlavour"][333 ][1][91.2]=["/SLD_1999_S3743934/d24-x05-y02"] analyses["MultiplicityFlavour"][333 ][4][91.2]=["/SLD_1999_S3743934/d24-x05-y03"] analyses["MultiplicityFlavour"][333 ][5][91.2]=["/SLD_1999_S3743934/d24-x05-y04"] analyses["MultiplicityFlavour"][2212][1][91.2]=["/SLD_2004_S5693039/d07-x02-y01","/SLD_1999_S3743934/d24-x06-y02", "/DELPHI_1998_I473409/d03-x01-y04"] analyses["MultiplicityFlavour"][2212][4][91.2]=["/SLD_2004_S5693039/d07-x02-y02","/SLD_1999_S3743934/d24-x06-y03"] analyses["MultiplicityFlavour"][2212][5][91.2]=["/SLD_2004_S5693039/d07-x02-y03","/SLD_1999_S3743934/d24-x06-y04", "/DELPHI_1998_I473409/d02-x01-y04"] analyses["MultiplicityFlavour"][3122][1][91.2]=["/SLD_1999_S3743934/d24-x07-y02"] analyses["MultiplicityFlavour"][3122][4][91.2]=["/SLD_1999_S3743934/d24-x07-y03"] analyses["MultiplicityFlavour"][3122][5][91.2]=["/SLD_1999_S3743934/d24-x07-y04"] # identified particle distributions # photons # x_E analyses["IdentifiedParticle"][22 ]["x" ][14.0]=["/CELLO_1983_I191415/d01-x01-y01"] analyses["IdentifiedParticle"][22 ]["x" ][22.0]=["/CELLO_1983_I191415/d02-x01-y01"] analyses["IdentifiedParticle"][22 ]["x" ][29.0]=["/TPC_1985_I205868/d01-x01-y01" ] analyses["IdentifiedParticle"][22 ]["x" ][34.0]=["/CELLO_1983_I191415/d03-x01-y01"] analyses["IdentifiedParticle"][22 ]["x" ][35.0]=["/CELLO_1989_I276764/d02-x01-y01","/JADE_1990_I282847/d01-x01-y01"] analyses["IdentifiedParticle"][22 ]["x" ][44.0]=["/JADE_1990_I282847/d02-x01-y01"] analyses["IdentifiedParticle"][22 ]["x" ][91.2]=["/OPAL_1998_S3749908/d02-x01-y01"] # xi analyses["IdentifiedParticle"][22 ]["xi"][91.2]=["/ALEPH_1996_S3486095/d28-x01-y01","/OPAL_1998_S3749908/d03-x01-y01"] # charged pions # x analyses["IdentifiedParticle"][211 ]["x" ][3.635] = ["/DASP_1979_I132045/d18-x01-y01"] analyses["IdentifiedParticle"][211 ]["x" ][4.04 ] = ["/DASP_1979_I132045/d18-x01-y02"] analyses["IdentifiedParticle"][211 ]["x" ][4.17 ] = ["/DASP_1979_I132045/d18-x01-y03"] analyses["IdentifiedParticle"][211 ]["x" ][4.30 ] = ["/DASP_1979_I132045/d18-x01-y04"] analyses["IdentifiedParticle"][211 ]["x" ][4.41 ] = ["/DASP_1979_I132045/d18-x01-y05"] analyses["IdentifiedParticle"][211 ]["x" ][4.72 ] = ["/DASP_1979_I132045/d18-x01-y06"] analyses["IdentifiedParticle"][211 ]["x" ][5.0 ] = ["/DASP_1979_I132045/d18-x01-y07"] analyses["IdentifiedParticle"][211 ]["x" ][5.2 ] = ["/DASP_1979_I132045/d18-x01-y08"] analyses["IdentifiedParticle"][211 ]["x" ][10.0 ] = ["/ARGUS_1989_I276860/d09-x01-y02"] analyses["IdentifiedParticle"][211 ]["x" ][10.52] = ["/BELLE_2013_I1216515/d01-x01-y01"] analyses["IdentifiedParticle"][211 ]["x" ][12.0 ] = ["/TASSO_1980_I153656/d02-x01-y02"] analyses["IdentifiedParticle"][211 ]["x" ][14.0 ] = ["/TASSO_1983_I181470/d20-x01-y01"] analyses["IdentifiedParticle"][211 ]["x" ][22.0 ] = ["/TASSO_1983_I181470/d22-x01-y01"] analyses["IdentifiedParticle"][211 ]["x" ][29.0 ] = ["/TPC_1988_I262143/d01-x01-y01","/TPC_1988_I262143/d05-x01-y01"] analyses["IdentifiedParticle"][211 ]["x" ][30.0 ] = ["/TASSO_1980_I153656/d05-x01-y02"] analyses["IdentifiedParticle"][211 ]["x" ][34.0 ] = ["/TASSO_1989_I267755/d07-x01-y01","/TASSO_1983_I181470/d24-x01-y01"] analyses["IdentifiedParticle"][211 ]["x" ][44.0 ] = ["/TASSO_1989_I267755/d10-x01-y01"] analyses["IdentifiedParticle"][211 ]["x" ][91.2 ] = ["/ALEPH_1995_I382179/d01-x01-y01","/DELPHI_1998_I473409/d19-x01-y01", "/ALEPH_1996_S3486095/d25-x01-y01","/SLD_2004_S5693039/d02-x01-y02", "/SLD_1999_S3743934/d01-x01-y02"] analyses["IdentifiedParticle"][211 ]["Other" ][91.2 ] = ["/SLD_1999_S3743934/d26-x01-y01","/SLD_1999_S3743934/d26-x01-y02", "/SLD_1999_S3743934/d27-x01-y01","/SLD_2004_S5693039/d09-x01-y01", "/SLD_2004_S5693039/d09-x01-y02","/SLD_2004_S5693039/d09-x01-y03",] # p analyses["IdentifiedParticle"][211 ]["p" ][3.635] = ["/DASP_1979_I132045/d01-x01-y01"] analyses["IdentifiedParticle"][211 ]["p" ][4.04 ] = ["/DASP_1979_I132045/d01-x01-y02"] analyses["IdentifiedParticle"][211 ]["p" ][4.17 ] = ["/DASP_1979_I132045/d01-x01-y03"] analyses["IdentifiedParticle"][211 ]["p" ][4.30 ] = ["/DASP_1979_I132045/d01-x01-y04"] analyses["IdentifiedParticle"][211 ]["p" ][4.41 ] = ["/DASP_1979_I132045/d01-x01-y05"] analyses["IdentifiedParticle"][211 ]["p" ][4.72 ] = ["/DASP_1979_I132045/d01-x01-y06"] analyses["IdentifiedParticle"][211 ]["p" ][5.0 ] = ["/DASP_1979_I132045/d01-x01-y07"] analyses["IdentifiedParticle"][211 ]["p" ][5.2 ] = ["/DASP_1979_I132045/d01-x01-y08"] analyses["IdentifiedParticle"][211 ]["p" ][10.0 ] = ["/ARGUS_1989_I276860/d05-x01-y02"] analyses["IdentifiedParticle"][211 ]["p" ][10.54] = ["/BABAR_2013_I1238276/d01-x01-y01","/BABAR_2013_I1238276/d02-x01-y01", "/CLEO_1985_I205668/d01-x01-y01"] analyses["IdentifiedParticle"][211 ]["p" ][12.0 ] = ["/TASSO_1980_I153656/d02-x01-y01"] analyses["IdentifiedParticle"][211 ]["p" ][14.0 ] = ["/TASSO_1983_I181470/d19-x01-y01"] analyses["IdentifiedParticle"][211 ]["p" ][22.0 ] = ["/TASSO_1983_I181470/d25-x01-y01"] analyses["IdentifiedParticle"][211 ]["p" ][30.0 ] = ["/TASSO_1980_I153656/d05-x01-y01"] analyses["IdentifiedParticle"][211 ]["p" ][34.0 ] = ["/TASSO_1983_I181470/d13-x01-y01"] analyses["IdentifiedParticle"][211 ]["p" ][91.2 ] = ["/DELPHI_1998_I473409/d18-x01-y01","/OPAL_1994_S2927284/d01-x01-y01"] # xi analyses["IdentifiedParticle"][211 ]["xi"][58.0 ] = ["/TOPAZ_1995_I381900/d02-x01-y01"] # ratios analyses["IdentifiedParticle"][211 ]["Ratio"][12.0 ] = ["/TASSO_1980_I153656/d08-x01-y01"] analyses["IdentifiedParticle"][211 ]["Ratio"][29.0 ] = ["/TPC_1988_I262143/d06-x01-y01"] analyses["IdentifiedParticle"][211 ]["Ratio"][30.0 ] = ["/TASSO_1980_I153656/d11-x01-y01"] analyses["IdentifiedParticle"][211 ]["Ratio"][34.0 ] = ["/TASSO_1989_I267755/d01-x01-y01"] analyses["IdentifiedParticle"][211 ]["Ratio"][44.0 ] = ["/TASSO_1989_I267755/d04-x01-y01"] analyses["IdentifiedParticle"][211 ]["Ratio"][91.2 ] = ["/DELPHI_1998_I473409/d04-x01-y01","/SLD_1999_S3743934/d01-x01-y01"] # neutral pions # x analyses["IdentifiedParticle"][111 ]["x" ][10.0]=["/ARGUS_1990_I278933/d03-x01-y01","/ARGUS_1990_I278933/d03-x01-y02", "/CLEO_1985_I205668/d04-x01-y01"] analyses["IdentifiedParticle"][111 ]["x" ][14.0]=["/TASSO_1982_I168232/d02-x03-y03","/CELLO_1983_I191415/d04-x01-y01"] analyses["IdentifiedParticle"][111 ]["x" ][22.0]=["/CELLO_1983_I191415/d05-x01-y01"] analyses["IdentifiedParticle"][111 ]["x" ][29.0]=["/TPC_1985_I205868/d02-x01-y01" ] analyses["IdentifiedParticle"][111 ]["x" ][34.0]=["/TASSO_1982_I168232/d03-x03-y03","/TASSO_1986_I230950/d02-x01-y01", "/CELLO_1983_I191415/d06-x01-y01"] analyses["IdentifiedParticle"][111 ]["x" ][35.0]=["/CELLO_1989_I276764/d03-x01-y01","/CELLO_1989_I276764/d04-x01-y01", "/JADE_1990_I282847/d03-x01-y01"] analyses["IdentifiedParticle"][111 ]["x" ][44.0]=["/TASSO_1989_I267755/d13-x01-y01","/JADE_1990_I282847/d04-x01-y01"] analyses["IdentifiedParticle"][111 ]["x" ][91.2]=["/DELPHI_1996_I401100/d01-x01-y01","/ALEPH_1996_S3486095/d29-x01-y01", "/OPAL_1998_S3749908/d04-x01-y01","/ALEPH_1997_I427131/d02-x01-y02", "/ALEPH_2000_I507531/d01-x01-y01","/ALEPH_2000_I507531/d04-x01-y01", "/ALEPH_2000_I507531/d07-x01-y01","/ALEPH_2000_I507531/d08-x01-y01", "/ALEPH_2000_I507531/d09-x01-y01"] # p/E analyses["IdentifiedParticle"][111 ]["p" ][14.0]=["/TASSO_1982_I168232/d02-x01-y01","/TASSO_1982_I168232/d02-x02-y02"] analyses["IdentifiedParticle"][111 ]["p" ][34.0]=["/TASSO_1982_I168232/d03-x01-y01","/TASSO_1982_I168232/d03-x02-y02", "/TASSO_1986_I230950/d01-x01-y01"] # xi analyses["IdentifiedParticle"][111 ]["xi"][91.2]=["/OPAL_1998_S3749908/d05-x01-y01"] # others analyses["IdentifiedParticle"][111 ]["Other"][91.2]=["/ALEPH_1997_I427131/d03-x01-y01","/ALEPH_1997_I427131/d04-x01-y01"] # eta #x analyses["IdentifiedParticle"][221 ]["x" ][10.0]=["/ARGUS_1990_I278933/d05-x01-y01","/ARGUS_1990_I278933/d05-x01-y02"] analyses["IdentifiedParticle"][221 ]["x" ][29.0]=["/HRS_1988_I250824/d01-x01-y01"] analyses["IdentifiedParticle"][221 ]["x" ][35.0]=["/CELLO_1989_I276764/d05-x01-y01" ,"/JADE_1990_I282847/d05-x01-y01"] analyses["IdentifiedParticle"][221 ]["x" ][91.2]=["/ALEPH_2002_S4823664/d02-x01-y02","/L3_1992_I336180/d01-x01-y01", "/ALEPH_1996_S3486095/d30-x01-y01","/OPAL_1998_S3749908/d06-x01-y01", "/ALEPH_2000_I507531/d02-x01-y01","/ALEPH_2000_I507531/d05-x01-y01", "/ALEPH_2000_I507531/d10-x01-y01","/ALEPH_2000_I507531/d11-x01-y01", "/ALEPH_2000_I507531/d12-x01-y01"] # xi analyses["IdentifiedParticle"][221 ]["xi"][91.2]=["/L3_1992_I336180/d02-x01-y01","/OPAL_1998_S3749908/d07-x01-y01"] # eta' # x analyses["IdentifiedParticle"][331 ]["x" ][91.2]=["/L3_1997_I427107/d07-x01-y01" ,"/L3_1997_I427107/d09-x01-y01", "/ALEPH_1996_S3486095/d31-x01-y01","/OPAL_1998_S3749908/d12-x01-y01", "/ALEPH_2000_I507531/d03-x01-y01","/ALEPH_2000_I507531/d06-x01-y01", "/ALEPH_2000_I507531/d13-x01-y01","/ALEPH_2000_I507531/d14-x01-y01", "/ALEPH_2000_I507531/d15-x01-y01"] # xi analyses["IdentifiedParticle"][331 ]["xi"][91.2]=["/L3_1997_I427107/d08-x01-y01","/L3_1997_I427107/d10-x01-y01", "/OPAL_1998_S3749908/d13-x01-y01"] # rho +/- analyses["IdentifiedParticle"][213 ]["x" ][91.2] = ["/OPAL_1998_S3749908/d08-x01-y01"] analyses["IdentifiedParticle"][213 ]["xi"][91.2] = ["/OPAL_1998_S3749908/d09-x01-y01"] # rho0 analyses["IdentifiedParticle"][113 ]["x" ][10.0] = ["/ARGUS_1993_S2789213/d10-x01-y01","/CLEO_1985_I205668/d08-x01-y01"] analyses["IdentifiedParticle"][113 ]["x" ][35.0] = ["/JADE_1984_I203145/d02-x01-y01"] analyses["IdentifiedParticle"][113 ]["x" ][91.2] = ["/DELPHI_1999_S3960137/d01-x01-y01","/ALEPH_1996_S3486095/d37-x01-y01"] # omega analyses["IdentifiedParticle"][223 ]["x" ][10.0] = ["/ARGUS_1993_S2789213/d13-x01-y01"] analyses["IdentifiedParticle"][223 ]["x" ][91.2] = ["/ALEPH_2002_S4823664/d03-x01-y02","/L3_1997_I427107/d05-x01-y01", "/ALEPH_1996_S3486095/d38-x01-y01","/OPAL_1998_S3749908/d10-x01-y01",] analyses["IdentifiedParticle"][223 ]["xi"][91.2] = ["/L3_1997_I427107/d06-x01-y01","/OPAL_1998_S3749908/d11-x01-y01"] # phi analyses["IdentifiedParticle"][333 ]["x" ][10.0] = ["/ARGUS_1989_I262551/d01-x01-y01","/CLEO_1985_I205668/d11-x01-y01"] analyses["IdentifiedParticle"][333 ]["x" ][29.0] = ["/TPC_1984_I200105/d01-x01-y01"] analyses["IdentifiedParticle"][333 ]["x" ][91.2] = ["/DELPHI_1996_I420528/d03-x01-y01","/ALEPH_1996_S3486095/d40-x01-y01", "/OPAL_1998_S3702294/d02-x01-y03","/SLD_1999_S3743934/d09-x01-y01"] analyses["IdentifiedParticle"][333 ]["Other"][29.0] = ["/TPC_1984_I200105/d03-x01-y01"] # f_2 analyses["IdentifiedParticle"][225]["x" ][91.2]=["/DELPHI_1999_S3960137/d01-x01-y03","/OPAL_1998_S3702294/d02-x01-y02"] # f_2' analyses["IdentifiedParticle"][335]["x" ][91.2]=["/DELPHI_1996_I416741/d01-x01-y01"] # f_0(980) analyses["IdentifiedParticle"][9010221]["x" ][10.0]=["/ARGUS_1993_S2669951/d02-x01-y01"] analyses["IdentifiedParticle"][9010221]["x" ][91.2]=["/DELPHI_1999_S3960137/d01-x01-y02","/OPAL_1998_S3702294/d02-x01-y01"] # a_0 =/- analyses["IdentifiedParticle"][9000211]["x" ][91.2]=["/OPAL_1998_S3749908/d14-x01-y01"] analyses["IdentifiedParticle"][9000211]["xi" ][91.2]=["/OPAL_1998_S3749908/d15-x01-y01"] # strange mesons # K0 # x analyses["IdentifiedParticle"][311 ]["x" ][3.63] = ["/PLUTO_1977_I118873/d02-x01-y01"] analyses["IdentifiedParticle"][311 ]["x" ][4.03] = ["/PLUTO_1977_I118873/d03-x01-y01"] analyses["IdentifiedParticle"][311 ]["x" ][4.5] = ["/PLUTO_1977_I118873/d04-x01-y01"] analyses["IdentifiedParticle"][311 ]["x" ][9.4] = ["/PLUTO_1981_I165122/d05-x01-y01"] analyses["IdentifiedParticle"][311 ]["x" ][10.0] = ["/ARGUS_1989_I276860/d11-x01-y02","/CLEO_1985_I205668/d05-x01-y01"] analyses["IdentifiedParticle"][311 ]["x" ][14.0] = ["/TASSO_1980_I153341/d04-x01-y01","/TASSO_1985_I205119/d01-x01-y01"] analyses["IdentifiedParticle"][311 ]["x" ][22.0] = ["/TASSO_1985_I205119/d02-x01-y01"] analyses["IdentifiedParticle"][311 ]["x" ][29.0] = ["/TPC_1984_I205869/d04-x01-y01","/HRS_1990_I280958/d03-x01-y01"] analyses["IdentifiedParticle"][311 ]["x" ][30.0] = ["/PLUTO_1981_I165122/d04-x01-y01"] analyses["IdentifiedParticle"][311 ]["x" ][34.0] = ["/TASSO_1985_I205119/d03-x01-y01"] analyses["IdentifiedParticle"][311 ]["x" ][34.5] = ["/TASSO_1990_I284251/d01-x01-y03"] analyses["IdentifiedParticle"][311 ]["x" ][35.0] = ["/TASSO_1990_I284251/d01-x01-y02","/CELLO_1990_I283026/d01-x01-y01"] analyses["IdentifiedParticle"][311 ]["x" ][42.6] = ["/TASSO_1990_I284251/d01-x01-y01"] analyses["IdentifiedParticle"][311 ]["x" ][91.2] = ["/OPAL_2000_S4418603/d03-x01-y01","/DELPHI_1995_I377487/d08-x01-y01", "/ALEPH_1996_S3486095/d32-x01-y01","/SLD_1999_S3743934/d05-x01-y01", "/OPAL_1995_I393503/d02-x01-y01"] # p analyses["IdentifiedParticle"][311 ]["p" ][10.0] = ["/ARGUS_1989_I276860/d07-x01-y02"] analyses["IdentifiedParticle"][311 ]["p" ][14.0] = ["/TASSO_1980_I153341/d02-x01-y01","/TASSO_1985_I205119/d07-x01-y01"] analyses["IdentifiedParticle"][311 ]["p" ][22.0] = ["/TASSO_1985_I205119/d08-x01-y01"] analyses["IdentifiedParticle"][311 ]["p" ][34.0] = ["/TASSO_1985_I205119/d09-x01-y01"] # xi analyses["IdentifiedParticle"][311 ]["xi" ][58.0] = ["/TOPAZ_1995_I381900/d03-x01-y01"] analyses["IdentifiedParticle"][311 ]["xi" ][91.2] = ["/DELPHI_1995_I377487/d09-x01-y01","/OPAL_1995_I393503/d03-x01-y01", "/ALEPH_2000_I507531/d16-x01-y01","/ALEPH_2000_I507531/d18-x01-y01", "/ALEPH_2000_I507531/d20-x01-y01","/ALEPH_2000_I507531/d21-x01-y01", "/ALEPH_2000_I507531/d21-x01-y01"] # other analyses["IdentifiedParticle"][311 ]["Other"][14.8 ] = ["/TASSO_1990_I284251/d06-x01-y01","/TASSO_1990_I284251/d06-x01-y02"] analyses["IdentifiedParticle"][311 ]["Other"][21.5 ] = ["/TASSO_1990_I284251/d07-x01-y01","/TASSO_1990_I284251/d07-x01-y02"] analyses["IdentifiedParticle"][311 ]["Other"][29.0 ] = ["/HRS_1990_I280958/d04-x01-y01"] analyses["IdentifiedParticle"][311 ]["Other"][35.0 ] = ["/TASSO_1990_I284251/d05-x01-y03","/TASSO_1990_I284251/d05-x01-y04"] analyses["IdentifiedParticle"][311 ]["Other"][42.6 ] = ["/TASSO_1990_I284251/d05-x01-y01","/TASSO_1990_I284251/d05-x01-y02"] # K+/- # x analyses["IdentifiedParticle"][321 ]["x" ][3.635] = ["/DASP_1979_I132045/d19-x01-y01"] analyses["IdentifiedParticle"][321 ]["x" ][4.04 ] = ["/DASP_1979_I132045/d20-x01-y01"] analyses["IdentifiedParticle"][321 ]["x" ][4.17 ] = ["/DASP_1979_I132045/d21-x01-y01"] analyses["IdentifiedParticle"][321 ]["x" ][4.30 ] = ["/DASP_1979_I132045/d22-x01-y01"] analyses["IdentifiedParticle"][321 ]["x" ][4.41 ] = ["/DASP_1979_I132045/d23-x01-y01"] analyses["IdentifiedParticle"][321 ]["x" ][4.72 ] = ["/DASP_1979_I132045/d24-x01-y01"] analyses["IdentifiedParticle"][321 ]["x" ][5.0 ] = ["/DASP_1979_I132045/d25-x01-y01"] analyses["IdentifiedParticle"][321 ]["x" ][5.2 ] = ["/DASP_1979_I132045/d26-x01-y01"] analyses["IdentifiedParticle"][321 ]["x" ][10.0 ] = ["/ARGUS_1989_I276860/d10-x01-y02"] analyses["IdentifiedParticle"][321 ]["x" ][10.52] = ["/BELLE_2013_I1216515/d01-x01-y02","/CLEO_1985_I205668/d02-x01-y01"] analyses["IdentifiedParticle"][321 ]["x" ][12.0 ] = ["/TASSO_1980_I153656/d03-x01-y02"] analyses["IdentifiedParticle"][321 ]["x" ][14.0 ] = ["/TASSO_1983_I181470/d26-x01-y01"] analyses["IdentifiedParticle"][321 ]["x" ][22.0 ] = ["/TASSO_1983_I181470/d10-x01-y01"] analyses["IdentifiedParticle"][321 ]["x" ][29.0 ] = ["/TPC_1988_I262143/d01-x01-y02","/TPC_1988_I262143/d05-x01-y02"] analyses["IdentifiedParticle"][321 ]["x" ][30.0 ] = ["/TASSO_1980_I153656/d06-x01-y02"] analyses["IdentifiedParticle"][321 ]["x" ][34.0 ] = ["/TASSO_1989_I267755/d08-x01-y01","/TASSO_1983_I181470/d12-x01-y01"] analyses["IdentifiedParticle"][321 ]["x" ][44.0 ] = ["/TASSO_1989_I267755/d11-x01-y01"] analyses["IdentifiedParticle"][321 ]["x" ][91.2 ] = ["/ALEPH_1995_I382179/d02-x01-y01","/DELPHI_1995_I394052/d05-x01-y01", "/DELPHI_1998_I473409/d21-x01-y01","/SLD_1999_S3743934/d02-x01-y02", "/ALEPH_1996_S3486095/d26-x01-y01","/SLD_2004_S5693039/d03-x01-y02"] # p analyses["IdentifiedParticle"][321 ]["p" ][3.635] = ["/DASP_1979_I132045/d02-x01-y01"] analyses["IdentifiedParticle"][321 ]["p" ][4.04 ] = ["/DASP_1979_I132045/d03-x01-y01"] analyses["IdentifiedParticle"][321 ]["p" ][4.17 ] = ["/DASP_1979_I132045/d04-x01-y01"] analyses["IdentifiedParticle"][321 ]["p" ][4.30 ] = ["/DASP_1979_I132045/d05-x01-y01"] analyses["IdentifiedParticle"][321 ]["p" ][4.41 ] = ["/DASP_1979_I132045/d06-x01-y01"] analyses["IdentifiedParticle"][321 ]["p" ][4.72 ] = ["/DASP_1979_I132045/d07-x01-y01"] analyses["IdentifiedParticle"][321 ]["p" ][5.0 ] = ["/DASP_1979_I132045/d08-x01-y01"] analyses["IdentifiedParticle"][321 ]["p" ][5.2 ] = ["/DASP_1979_I132045/d09-x01-y01"] analyses["IdentifiedParticle"][321 ]["p" ][10.0 ] = ["/ARGUS_1989_I276860/d06-x01-y02"] analyses["IdentifiedParticle"][321 ]["p" ][10.54] = ["/BABAR_2013_I1238276/d01-x01-y02","/BABAR_2013_I1238276/d02-x01-y02"] analyses["IdentifiedParticle"][321 ]["p" ][12.0 ] = ["/TASSO_1980_I153656/d03-x01-y01"] analyses["IdentifiedParticle"][321 ]["p" ][14.0 ] = ["/TASSO_1983_I181470/d21-x01-y01"] analyses["IdentifiedParticle"][321 ]["p" ][22.0 ] = ["/TASSO_1983_I181470/d27-x01-y01"] analyses["IdentifiedParticle"][321 ]["p" ][30.0 ] = ["/TASSO_1980_I153656/d06-x01-y01"] analyses["IdentifiedParticle"][321 ]["p" ][34.0 ] = ["/TASSO_1983_I181470/d15-x01-y01"] analyses["IdentifiedParticle"][321 ]["p" ][91.2 ] = ["/DELPHI_1995_I394052/d03-x01-y01","/DELPHI_1998_I473409/d20-x01-y01", "/OPAL_1994_S2927284/d02-x01-y01"] # xi analyses["IdentifiedParticle"][321 ]["xi" ][58.0 ] = ["/TOPAZ_1995_I381900/d02-x01-y02"] # ratio analyses["IdentifiedParticle"][321 ]["Ratio"][12.0 ] = ["/TASSO_1980_I153656/d09-x01-y01"] analyses["IdentifiedParticle"][321 ]["Ratio"][29.0 ] = ["/TPC_1988_I262143/d07-x01-y01","/TPC_1988_I262143/d06-x01-y02"] analyses["IdentifiedParticle"][321 ]["Ratio"][30.0 ] = ["/TASSO_1980_I153656/d12-x01-y01"] analyses["IdentifiedParticle"][321 ]["Ratio"][34.0 ] = ["/TASSO_1989_I267755/d02-x01-y01"] analyses["IdentifiedParticle"][321 ]["Ratio"][44.0 ] = ["/TASSO_1989_I267755/d05-x01-y01"] analyses["IdentifiedParticle"][321 ]["Ratio"][91.2 ] = ["/DELPHI_1998_I473409/d05-x01-y01","/SLD_1999_S3743934/d02-x01-y01"] # other analyses["IdentifiedParticle"][321 ]["Other"][91.2 ] = ["/SLD_1999_S3743934/d30-x01-y01","/SLD_1999_S3743934/d30-x01-y02", "/SLD_1999_S3743934/d31-x01-y01","/SLD_2004_S5693039/d10-x01-y01", "/SLD_2004_S5693039/d10-x01-y02","/SLD_2004_S5693039/d10-x01-y03", "/DELPHI_1995_I382285/a_K","/DELPHI_1995_I382285/d01-x01-y01"] # K*0 analyses["IdentifiedParticle"][313 ]["x" ][10.0 ] = ["/ARGUS_1993_S2789213/d07-x01-y01","/CLEO_1985_I205668/d10-x01-y01"] analyses["IdentifiedParticle"][313 ]["x" ][29.0 ] = ["/TPC_1984_I205869/d03-x01-y01"] analyses["IdentifiedParticle"][313 ]["x" ][91.2 ] = ["/DELPHI_1996_I420528/d01-x01-y01","/ALEPH_1996_S3486095/d39-x01-y01", "/OPAL_1997_S3608263/d01-x01-y01","/SLD_1999_S3743934/d08-x01-y01"] analyses["IdentifiedParticle"][313 ]["Other"][91.2 ] = ["/SLD_1999_S3743934/d28-x01-y01","/SLD_1999_S3743934/d28-x01-y02", "/SLD_1999_S3743934/d29-x01-y01"] # K* +/- analyses["IdentifiedParticle"][323 ]["x" ][10.0 ] = ["/ARGUS_1993_S2789213/d04-x01-y01","/CLEO_1985_I205668/d09-x01-y01"] analyses["IdentifiedParticle"][323 ]["x" ][14.8 ] = ["/TASSO_1990_I284251/d02-x01-y01"] analyses["IdentifiedParticle"][323 ]["x" ][21.5 ] = ["/TASSO_1990_I284251/d03-x01-y01"] analyses["IdentifiedParticle"][323 ]["x" ][34.5 ] = ["/TASSO_1990_I284251/d08-x01-y03"] analyses["IdentifiedParticle"][323 ]["x" ][35.0 ] = ["/TASSO_1990_I284251/d08-x01-y02","/CELLO_1990_I283026/d02-x01-y01", "/JADE_1984_I203145/d03-x01-y01"] analyses["IdentifiedParticle"][323 ]["x" ][42.6 ] = ["/TASSO_1990_I284251/d08-x01-y01"] analyses["IdentifiedParticle"][323 ]["x" ][91.2 ] = ["/OPAL_1993_I342766/d01-x01-y01","/DELPHI_1995_I377487/d10-x01-y01", "/ALEPH_1996_S3486095/d43-x01-y01"] analyses["IdentifiedParticle"][323 ]["Other"][35.0 ] = ["/TASSO_1990_I284251/d10-x01-y01","/TASSO_1990_I284251/d10-x01-y02"] # charm # D+/- analyses["IdentifiedParticle"][421 ]["x" ][10.47] = ["/ARGUS_1991_I315059/d03-x01-y01"] analyses["IdentifiedParticle"][421 ]["x" ][10.5 ] = ["/CLEO_2004_S5809304/d03-x01-y01","/CLEO_2004_S5809304/d04-x01-y01", "/BELLE_2005_I686014/d03-x01-y01"] analyses["IdentifiedParticle"][421 ]["x" ][29.0 ] = ["/HRS_1988_I23360/d02-x01-y01"] # D0 analyses["IdentifiedParticle"][411 ]["x" ][10.47] = ["/ARGUS_1991_I315059/d02-x01-y01"] analyses["IdentifiedParticle"][411 ]["x" ][10.5 ] = ["/CLEO_2004_S5809304/d02-x01-y01","/CLEO_2004_S5809304/d09-x01-y01", "/BELLE_2005_I686014/d03-x01-y02"] analyses["IdentifiedParticle"][411 ]["x" ][29.0 ] = ["/HRS_1988_I23360/d02-x01-y02"] # D* 0 analyses["IdentifiedParticle"][423 ]["x" ][10.47] = ["/ARGUS_1991_I315059/d04-x01-y01"] analyses["IdentifiedParticle"][423 ]["x" ][10.5]=["/CLEO_2004_S5809304/d07-x01-y01","/CLEO_2004_S5809304/d08-x01-y01", "/BELLE_2005_I686014/d03-x01-y06","/BELLE_2005_I686014/d03-x01-y07"] # D* +/- analyses["IdentifiedParticle"][413 ]["x" ][29.0 ] = ["/TPC_1986_I217416/d01-x01-y01","/TPC_1986_I217416/d01-x01-y02", "/HRS_1988_I23360/d01-x01-y01","/HRS_1988_I23360/d01-x01-y02"] analyses["IdentifiedParticle"][413 ]["x" ][34.4 ] = ["/JADE_1984_I202785/d01-x01-y01"] analyses["IdentifiedParticle"][413 ]["x" ][36.2 ] = ["/TASSO_1989_I278856/d01-x01-y01","/TASSO_1989_I278856/d01-x01-y02", "/TASSO_1989_I278856/d02-x01-y01","/TASSO_1989_I278856/d02-x01-y02"] analyses["IdentifiedParticle"][413 ]["x" ][91.2 ] = ["/ALEPH_1999_S4193598/d01-x01-y01"] analyses["IdentifiedParticle"][413 ]["x" ][10.5 ] = ["/CLEO_2004_S5809304/d05-x01-y01","/CLEO_2004_S5809304/d06-x01-y01","/BELLE_2005_I686014/d03-x01-y05"] analyses["IdentifiedParticle"][413 ]["Other"][34.4 ] = ["/JADE_1984_I202785/d03-x01-y01"] # D_2 analyses["IdentifiedParticle"][425 ]["x" ][10.0 ] = ["/ARGUS_1989_I268577/d02-x01-y01","/ARGUS_1989_I280943/d04-x01-y02"] analyses["IdentifiedParticle"][425 ]["x" ][10.6 ] = ["/CLEOII_1994_I372349/d01-x01-y01"] analyses["IdentifiedParticle"][10423]["x" ][10.0 ] = ["/ARGUS_1989_I280943/d04-x01-y01"] analyses["IdentifiedParticle"][10423]["x" ][10.6 ] = ["/CLEOII_1994_I372349/d01-x01-y02"] analyses["IdentifiedParticle"][10413]["x" ][10.6 ] = ["/CLEOII_1994_I378319/d04-x01-y02"] analyses["IdentifiedParticle"][415 ]["x" ][10.6 ] = ["/CLEOII_1994_I378319/d04-x01-y01"] # D_s+ analyses["IdentifiedParticle"][431 ]["x" ][10.5 ] = ["/CLEO_2000_I526554/d02-x01-y01","/CLEO_2000_I526554/d04-x01-y01"] analyses["IdentifiedParticle"][431 ]["x" ][10.58] = ["/BABAR_2002_I582184/d03-x01-y02","/BELLE_2005_I686014/d03-x01-y03"] # D_s*+ analyses["IdentifiedParticle"][433 ]["x" ][10.5 ] = ["/CLEO_2000_I526554/d01-x01-y01","/CLEO_2000_I526554/d03-x01-y01"] analyses["IdentifiedParticle"][433 ]["x" ][10.58] = ["/BABAR_2002_I582184/d04-x01-y02"] # D_s2 analyses["IdentifiedParticle"][435]["x" ][10.58] = ["/ARGUS_1995_I397794/d02-x01-y01"] # D_s1(2460) analyses["IdentifiedParticle"][20433]["x" ][10 ] = ["/BABAR_2006_I714447/d03-x01-y01","/BABAR_2006_I714447/d04-x01-y01"] # D_s0(2317) analyses["IdentifiedParticle"][10431]["x" ][10 ] = ["/BABAR_2006_I714447/d02-x01-y01"] # D_s1(2536) analyses["IdentifiedParticle"][10433]["x" ][10 ] = ["/ARGUS_1989_I282570/d02-x01-y01"] analyses["IdentifiedParticle"][10433]["x" ][10.5 ] = ["/CLEOII_1993_I352823/d03-x01-y01"] # charmonium analyses["IdentifiedParticle"][443 ]["p" ][10.6 ] = ["/BELLE_2002_I563840/d03-x01-y01","/BELLE_2002_I563840/d03-x01-y02"] analyses["IdentifiedParticle"][443 ]["x" ][91.2 ] = ["/OPAL_1996_S3257789/d01-x01-y01"] analyses["IdentifiedParticle"][443 ]["Other"][10.6 ] = ["/BELLE_2002_I563840/d02-x01-y01","/BELLE_2002_I563840/d02-x01-y02", "/BELLE_2002_I563840/d02-x02-y01","/BELLE_2002_I563840/d02-x02-y02", "/BELLE_2002_I563840/d02-x03-y01","/BELLE_2002_I563840/d02-x03-y02", "/BELLE_2002_I563840/d04-x01-y01","/BELLE_2002_I563840/d04-x01-y02", "/BELLE_2002_I563840/d04-x02-y01","/BELLE_2002_I563840/d04-x02-y02"] analyses["IdentifiedParticle"][100443]["p" ][10.6 ] = ["/BELLE_2002_I563840/d03-x02-y01"] # other analyses["IdentifiedParticle"]["321/2212"]["Ratio"][91.2 ] = ["/DELPHI_1998_I473409/d07-x01-y01"] # # Baryons # # light unflavoured # proton # x analyses["IdentifiedParticle"][2212]["x" ][3.635] = ["/DASP_1979_I132045/d27-x01-y01"] analyses["IdentifiedParticle"][2212]["x" ][4.04 ] = ["/DASP_1979_I132045/d28-x01-y01"] analyses["IdentifiedParticle"][2212]["x" ][4.17 ] = ["/DASP_1979_I132045/d29-x01-y01"] analyses["IdentifiedParticle"][2212]["x" ][4.30 ] = ["/DASP_1979_I132045/d30-x01-y01"] analyses["IdentifiedParticle"][2212]["x" ][4.41 ] = ["/DASP_1979_I132045/d31-x01-y01"] analyses["IdentifiedParticle"][2212]["x" ][4.72 ] = ["/DASP_1979_I132045/d32-x01-y01"] analyses["IdentifiedParticle"][2212]["x" ][5.0 ] = ["/DASP_1979_I132045/d33-x01-y01"] analyses["IdentifiedParticle"][2212]["x" ][5.2 ] = ["/DASP_1979_I132045/d34-x01-y01"] analyses["IdentifiedParticle"][2212]["x" ][10.0 ] = ["/ARGUS_1989_I276860/d12-x01-y02","/CLEO_1985_I205668/d03-x01-y01"] analyses["IdentifiedParticle"][2212]["x" ][12.0 ] = ["/TASSO_1980_I153656/d04-x01-y02"] analyses["IdentifiedParticle"][2212]["x" ][14.0 ] = ["/TASSO_1983_I181470/d14-x01-y01"] analyses["IdentifiedParticle"][2212]["x" ][22.0 ] = ["/TASSO_1983_I181470/d16-x01-y01"] analyses["IdentifiedParticle"][2212]["x" ][29.0 ] = ["/TPC_1988_I262143/d01-x01-y03","/TPC_1988_I262143/d05-x01-y03"] analyses["IdentifiedParticle"][2212]["x" ][30.0 ] = ["/TASSO_1980_I153656/d07-x01-y02"] analyses["IdentifiedParticle"][2212]["x" ][34.0 ] = ["/TASSO_1989_I267755/d09-x01-y01","/TASSO_1983_I181470/d18-x01-y01"] analyses["IdentifiedParticle"][2212]["x" ][44.0 ] = ["/TASSO_1989_I267755/d12-x01-y01"] analyses["IdentifiedParticle"][2212]["x" ][91.2 ] = ["/ALEPH_1995_I382179/d03-x01-y01","/DELPHI_1995_I394052/d06-x01-y01", "/DELPHI_1998_I473409/d23-x01-y01","/ALEPH_1996_S3486095/d27-x01-y01", "/SLD_2004_S5693039/d04-x01-y02","/SLD_1999_S3743934/d03-x01-y02"] # p analyses["IdentifiedParticle"][2212]["p" ][3.635] = ["/DASP_1979_I132045/d10-x01-y01"] analyses["IdentifiedParticle"][2212]["p" ][4.04 ] = ["/DASP_1979_I132045/d11-x01-y01"] analyses["IdentifiedParticle"][2212]["p" ][4.17 ] = ["/DASP_1979_I132045/d12-x01-y01"] analyses["IdentifiedParticle"][2212]["p" ][4.30 ] = ["/DASP_1979_I132045/d13-x01-y01"] analyses["IdentifiedParticle"][2212]["p" ][4.41 ] = ["/DASP_1979_I132045/d14-x01-y01"] analyses["IdentifiedParticle"][2212]["p" ][4.72 ] = ["/DASP_1979_I132045/d15-x01-y01"] analyses["IdentifiedParticle"][2212]["p" ][5.0 ] = ["/DASP_1979_I132045/d16-x01-y01"] analyses["IdentifiedParticle"][2212]["p" ][5.2 ] = ["/DASP_1979_I132045/d17-x01-y01"] analyses["IdentifiedParticle"][2212]["p" ][10.0 ] = ["/ARGUS_1989_I276860/d08-x01-y02"] analyses["IdentifiedParticle"][2212]["p" ][10.54] = ["/BABAR_2013_I1238276/d01-x01-y03","/BABAR_2013_I1238276/d02-x01-y03"] analyses["IdentifiedParticle"][2212]["p" ][12.0 ] = ["/TASSO_1980_I153656/d04-x01-y01"] analyses["IdentifiedParticle"][2212]["p" ][14.0 ] = ["/TASSO_1983_I181470/d23-x01-y01"] analyses["IdentifiedParticle"][2212]["p" ][22.0 ] = ["/TASSO_1983_I181470/d11-x01-y01"] analyses["IdentifiedParticle"][2212]["p" ][30.0 ] = ["/TASSO_1980_I153656/d07-x01-y01"] analyses["IdentifiedParticle"][2212]["p" ][34.0 ] = ["/TASSO_1989_I267755/d03-x01-y01","/JADE_1981_I166363/d01-x01-y01", "/TASSO_1983_I181470/d17-x01-y01"] analyses["IdentifiedParticle"][2212]["p" ][44.0 ] = ["/TASSO_1989_I267755/d06-x01-y01"] analyses["IdentifiedParticle"][2212]["p" ][91.2 ] = ["/DELPHI_1995_I394052/d04-x01-y01","/DELPHI_1998_I473409/d22-x01-y01", "/OPAL_1994_S2927284/d03-x01-y01",] # xi analyses["IdentifiedParticle"][2212]["xi" ][58.0 ] = ["/TOPAZ_1995_I381900/d02-x01-y03"] # ratio analyses["IdentifiedParticle"][2212]["Ratio"][12.0 ] = ["/TASSO_1980_I153656/d10-x01-y01"] analyses["IdentifiedParticle"][2212]["Ratio"][29.0 ] = ["/TPC_1988_I262143/d06-x01-y03","/TPC_1988_I262143/d07-x01-y02", "/TPC_1988_I262143/d07-x01-y03"] analyses["IdentifiedParticle"][2212]["Ratio"][30.0 ] = ["/TASSO_1980_I153656/d13-x01-y01"] analyses["IdentifiedParticle"][2212]["Ratio"][91.2 ] = ["/SLD_1999_S3743934/d03-x01-y01","/DELPHI_1998_I473409/d06-x01-y01"] analyses["IdentifiedParticle"][2212]["Other"][91.2 ] = ["/SLD_1999_S3743934/d32-x01-y01","/SLD_1999_S3743934/d32-x01-y02", "/SLD_1999_S3743934/d33-x01-y01","/SLD_2004_S5693039/d11-x01-y01", "/SLD_2004_S5693039/d11-x01-y02","/SLD_2004_S5693039/d11-x01-y03"] # Delta++ analyses["IdentifiedParticle"][2224]["x" ][91.2 ] = ["/OPAL_1995_S3198391/d01-x01-y01","/DELPHI_1995_I399737/d01-x01-y01"] # hyperons # lambda0 # x analyses["IdentifiedParticle"][3122]["x" ][10.0 ] = ["/ARGUS_1988_I251097/d05-x01-y01","/ARGUS_1988_I251097/d06-x01-y01"] analyses["IdentifiedParticle"][3122]["x" ][10.52] = ["/BELLE_2017_I1606201/d01-x01-y01","/CLEO_1985_I205668/d06-x01-y01"] analyses["IdentifiedParticle"][3122]["x" ][14.0 ] = ["/TASSO_1985_I205119/d04-x01-y01"] analyses["IdentifiedParticle"][3122]["x" ][22.0 ] = ["/TASSO_1985_I205119/d05-x01-y01"] analyses["IdentifiedParticle"][3122]["x" ][29.0 ] = ["/HRS_1992_I339573/d01-x01-y01"] analyses["IdentifiedParticle"][3122]["x" ][34.0 ] = ["/TASSO_1985_I205119/d06-x01-y01"] analyses["IdentifiedParticle"][3122]["x" ][34.8 ] = ["/TASSO_1989_I266893/d08-x01-y01"] analyses["IdentifiedParticle"][3122]["x" ][42.1 ] = ["/TASSO_1989_I266893/d14-x01-y01"] analyses["IdentifiedParticle"][3122]["x" ][35.0 ] = ["/CELLO_1990_I283026/d03-x01-y01"] analyses["IdentifiedParticle"][3122]["x" ][91.2 ] = ["/OPAL_1997_S3396100/d01-x01-y01","/ALEPH_1996_S3486095/d33-x01-y01", "/DELPHI_1993_I360638/d01-x01-y01","/SLD_1999_S3743934/d07-x01-y01"] # p analyses["IdentifiedParticle"][3122]["p" ][14.0 ] = ["/TASSO_1985_I205119/d10-x01-y01"] analyses["IdentifiedParticle"][3122]["p" ][22.0 ] = ["/TASSO_1985_I205119/d11-x01-y01"] analyses["IdentifiedParticle"][3122]["p" ][34.0 ] = ["/JADE_1981_I166363/d02-x01-y01","/TASSO_1985_I205119/d12-x01-y01"] analyses["IdentifiedParticle"][3122]["p" ][34.8 ] = ["/TASSO_1989_I266893/d03-x01-y01"] analyses["IdentifiedParticle"][3122]["p" ][42.1 ] = ["/TASSO_1989_I266893/d09-x01-y01"] # xi analyses["IdentifiedParticle"][3122]["xi" ][91.2 ] = ["/OPAL_1997_S3396100/d02-x01-y01","/ALEPH_2000_I507531/d17-x01-y01", "/ALEPH_2000_I507531/d19-x01-y01","/ALEPH_2000_I507531/d22-x01-y01", "/ALEPH_2000_I507531/d23-x01-y01","/ALEPH_2000_I507531/d24-x01-y01", "/ALEPH_2000_I507531/d25-x01-y01"] # other analyses["IdentifiedParticle"][3122]["Other"][34.8 ] = ["/TASSO_1989_I266893/d04-x01-y01","/TASSO_1989_I266893/d05-x01-y01", "/TASSO_1989_I266893/d06-x01-y01","/TASSO_1989_I266893/d07-x01-y01", "/TASSO_1989_I266893/d15-x01-y01","/TASSO_1989_I266893/d15-x01-y02", "/TASSO_1989_I266893/d15-x01-y03"] analyses["IdentifiedParticle"][3122]["Other"][42.1 ] = ["/TASSO_1989_I266893/d10-x01-y01","/TASSO_1989_I266893/d11-x01-y01", "/TASSO_1989_I266893/d12-x01-y01","/TASSO_1989_I266893/d13-x01-y01", "/TASSO_1989_I266893/d16-x01-y01","/TASSO_1989_I266893/d16-x01-y02", "/TASSO_1989_I266893/d16-x01-y03"] analyses["IdentifiedParticle"][3122]["Other"][91.2 ] = ["/DELPHI_1993_I360638/d03-x01-y01","/DELPHI_1993_I360638/d04-x01-y01", "/DELPHI_1993_I360638/d05-x01-y01","/DELPHI_1993_I360638/d06-x01-y01", "/SLD_1999_S3743934/d34-x01-y01","/SLD_1999_S3743934/d34-x01-y02", "/SLD_1999_S3743934/d35-x01-y01","/OPAL_1997_I447188/d03-x01-y01", "/OPAL_1997_I447188/d03-x01-y02","/OPAL_1997_I447188/d03-x01-y03", "/OPAL_2000_I474010/d04-x01-y01","/OPAL_2000_I474010/d05-x01-y01", "/DELPHI_1995_I382285/a_Lam","/DELPHI_1995_I382285/d01-x01-y02", "/ALEPH_1996_I415745/d03-x01-y01"] # Sigma+ analyses["IdentifiedParticle"][3222]["x" ][91.2 ] = ["/OPAL_1997_I421977/d01-x01-y01"] # sigma0 analyses["IdentifiedParticle"][3212]["x" ][10.52] = ["/BELLE_2017_I1606201/d02-x01-y01"] # sigma- analyses["IdentifiedParticle"][3112]["x" ][91.2 ] = ["/OPAL_1997_I421977/d02-x01-y01","/DELPHI_2000_I524694/d01-x01-y01"] # Sigma*+ analyses["IdentifiedParticle"][3224 ]["x" ][10.52] = ["/BELLE_2017_I1606201/d03-x01-y01"] analyses["IdentifiedParticle"][3224 ]["x" ][91.2 ] = ["/DELPHI_1995_S3137023/d03-x01-y01","/OPAL_1997_S3396100/d05-x01-y01"] analyses["IdentifiedParticle"][3224 ]["xi" ][91.2 ] = ["/OPAL_1997_S3396100/d06-x01-y01"] analyses["IdentifiedParticle"]["3224B"]["x" ][91.2 ] = ["/ALEPH_1996_S3486095/d35-x01-y01"] # sigma*- analyses["IdentifiedParticle"][3114 ]["x" ][91.2 ] = ["/OPAL_1997_S3396100/d07-x01-y01"] analyses["IdentifiedParticle"][3114 ]["xi" ][91.2 ] = ["/OPAL_1997_S3396100/d08-x01-y01"] # xi- analyses["IdentifiedParticle"][3312]["x" ][10.0 ] = ["/ARGUS_1988_I251097/d09-x01-y01"] analyses["IdentifiedParticle"][3312]["x" ][10.52] = ["/BELLE_2017_I1606201/d05-x01-y01","/CLEO_1985_I205668/d07-x01-y01"] analyses["IdentifiedParticle"][3312]["x" ][34.4 ] = ["/TASSO_1983_I192072/d02-x01-y01"] analyses["IdentifiedParticle"][3312]["x" ][34.8 ] = ["/TASSO_1989_I266893/d23-x01-y01"] analyses["IdentifiedParticle"][3312]["p" ][34.8 ] = ["/TASSO_1989_I266893/d18-x01-y01"] analyses["IdentifiedParticle"][3312]["x" ][91.2 ] = ["/OPAL_1997_S3396100/d03-x01-y01","/DELPHI_1995_S3137023/d02-x01-y01", "/ALEPH_1996_S3486095/d34-x01-y01"] analyses["IdentifiedParticle"][3312]["xi" ][91.2 ] = ["/OPAL_1997_S3396100/d04-x01-y01","/DELPHI_2006_I719387/d01-x03-y01",] analyses["IdentifiedParticle"][3312]["Other"][34.8 ] = ["/TASSO_1989_I266893/d19-x01-y01","/TASSO_1989_I266893/d20-x01-y01", "/TASSO_1989_I266893/d21-x01-y01","/TASSO_1989_I266893/d22-x01-y01"] # xi*0 analyses["IdentifiedParticle"][3324]["x" ][10.52] = ["/BELLE_2017_I1606201/d07-x01-y01"] analyses["IdentifiedParticle"][3324]["x" ][91.2 ] = ["/OPAL_1997_S3396100/d09-x01-y01","/ALEPH_1996_S3486095/d36-x01-y01"] analyses["IdentifiedParticle"][3324]["xi" ][91.2 ] = ["/OPAL_1997_S3396100/d10-x01-y01"] # omega analyses["IdentifiedParticle"][3334]["x" ][10.52] = ["/BELLE_2017_I1606201/d06-x01-y01"] # lambda 1520 analyses["IdentifiedParticle"][3124]["x" ][10.0 ] = ["/ARGUS_1989_I262415/d04-x01-y01"] analyses["IdentifiedParticle"][3124]["x" ][10.52] = ["/BELLE_2017_I1606201/d04-x01-y01"] analyses["IdentifiedParticle"][3124]["x" ][91.2 ] = ["/OPAL_1997_S3396100/d11-x01-y01","/DELPHI_2000_I524694/d03-x01-y01"] analyses["IdentifiedParticle"][3124]["xi" ][91.2 ] = ["/OPAL_1997_S3396100/d12-x01-y01"] # charm baryons # lambda_c analyses["IdentifiedParticle"][4122 ]["x" ][10.52] = ["/BELLE_2017_I1606201/d08-x01-y01"] analyses["IdentifiedParticle"][4122 ]["x" ][10.54] = ["/BABAR_2007_S6895344/d01-x01-y01","/BELLE_2005_I686014/d03-x01-y04"] analyses["IdentifiedParticle"][4122 ]["x" ][10.6 ] = ["/CLEO_1990_I298611/d01-x01-y01","/CLEO_1990_I298611/d02-x01-y01", "/CLEO_1990_I298611/d03-x01-y01","/CLEO_1990_I298611/d04-x01-y01", "/CLEO_1990_I298611/d05-x01-y01","/CLEO_1990_I298611/d06-x01-y01"] analyses["IdentifiedParticle"][4122 ]["Other"][10.5 ] = ["/CLEO_2001_I552541/d03-x01-y01","/CLEO_2001_I552541/d03-x01-y02", "/CLEO_2001_I552541/d03-x01-y03","/CLEO_2001_I552541/d03-x01-y04", "/CLEO_2001_I552541/d04-x01-y01","/CLEO_2001_I552541/d04-x01-y02", "/CLEO_2001_I552541/d04-x01-y03","/CLEO_2001_I552541/d04-x01-y04",] # sigma_c0 analyses["IdentifiedParticle"][4112 ]["x" ][10.52] = ["/BELLE_2017_I1606201/d11-x01-y01","/CLEOII_1994_I361356/d02-x01-y02"] analyses["IdentifiedParticle"][4222 ]["x" ][10. ] = ["/ARGUS_1988_I261672/d01-x01-y01","/CLEOII_1994_I361356/d02-x01-y01"] # sigma_c*0 analyses["IdentifiedParticle"][4114 ]["x" ][10.52] = ["/BELLE_2017_I1606201/d12-x01-y01"] analyses["IdentifiedParticle"][4224 ]["x" ][10. ] = ["/CLEOII_1997_I424575/d03-x01-y01"] # xi_c analyses["IdentifiedParticle"][4132 ]["x" ][10.52] = ["/BELLE_2017_I1606201/d14-x01-y01","/BELLE_2017_I1606201/d15-x01-y01"] analyses["IdentifiedParticle"][4132 ]["p" ][10.58] = ["/BABAR_2005_S6181155/d02-x01-y02"] analyses["IdentifiedParticle"][4232 ]["x" ][10.52] = ["/ARGUS_1990_I296522/d02-x01-y01"] analyses["IdentifiedParticle"][4232 ]["x" ][10.6 ] = ["/CLEOII_1995_I404590/d02-x01-y01"] # xi_c' analyses["IdentifiedParticle"][4312 ]["x" ][10.58] = ["/CLEOII_1999_I478217/d01-x01-y01"] # xi_c* analyses["IdentifiedParticle"][4314 ]["x" ][10.58] = ["/CLEOII_1995_I397770/d02-x01-y01"] analyses["IdentifiedParticle"][4324 ]["x" ][10.58] = ["/CLEOII_1996_I416471/d02-x01-y01"] # omega_c analyses["IdentifiedParticle"][4332 ]["x" ][10.52] = ["/BELLE_2017_I1606201/d13-x01-y01"] analyses["IdentifiedParticle"][4332 ]["x" ][10.6] = ["/BABAR_2007_I746745/d01-x01-y01"] # lambda_c(2595) analyses["IdentifiedParticle"][14122]["x" ][10.52] = ["/BELLE_2017_I1606201/d09-x01-y01"] analyses["IdentifiedParticle"][14122]["x" ][10.58] = ["/ARGUS_1993_I357132/d02-x01-y01","/CLEOII_1994_I381696/d05-x01-y01"] # lambda_c(2625) analyses["IdentifiedParticle"][4124 ]["x" ][10.52] = ["/BELLE_2017_I1606201/d10-x01-y01"] analyses["IdentifiedParticle"][4124 ]["x" ][10.58] = ["/ARGUS_1997_I440304/d02-x01-y01","/CLEOII_1994_I381696/d06-x01-y01"] # b fragmentation analyses["IdentifiedParticle"][511]["weak" ] = ["/DELPHI_2011_I890503/d01-x01-y01","/SLD_2002_S4869273/d01-x01-y01", "/ALEPH_2001_S4656318/d01-x01-y01","/OPAL_2003_I599181/d01-x01-y01"] analyses["IdentifiedParticle"][511]["weak_mean"] = ["/DELPHI_2011_I890503/d02-x01-y01","/ALEPH_2001_S4656318/d07-x01-y01", "/OPAL_2003_I599181/d02-x01-y01"] analyses["IdentifiedParticle"][511]["lead" ] = ["/ALEPH_2001_S4656318/d01-x01-y02"] analyses["IdentifiedParticle"][511]["lead_mean"] = ["/ALEPH_2001_S4656318/d07-x01-y02"] analyses["IdentifiedParticle"][513]["x"][91.2] = ["/DELPHI_1995_I395026/d04-x01-y01"] # multiplcities analyses["Multiplicity"]["321/2212"][91.2] = ["/DELPHI_1998_I473409/d01-x01-y05"] # mesons analyses["Multiplicity"][211 ][10. ] = ["/PDG_HADRON_MULTIPLICITIES/d01-x01-y01","/CLEO_1985_I205668/d12-x01-y01"] analyses["Multiplicity"][211 ][32.0 ] = ["/PDG_HADRON_MULTIPLICITIES/d01-x01-y02"] analyses["Multiplicity"][211 ][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d01-x01-y03","/DELPHI_1996_S3430090/d36-x01-y01", "/DELPHI_1998_I473409/d01-x01-y02","/SLD_2004_S5693039/d02-x02-y02", "/SLD_1999_S3743934/d24-x01-y01"] analyses["Multiplicity"][211 ][165.0] = ["/PDG_HADRON_MULTIPLICITIES/d01-x01-y04"] analyses["Multiplicity"][111 ][10. ] = ["/PDG_HADRON_MULTIPLICITIES/d02-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d02-x01-y01", "/ARGUS_1990_I278933/d01-x01-y01","/CLEO_1985_I205668/d15-x01-y01"] analyses["Multiplicity"][111 ][32.0 ] = ["/PDG_HADRON_MULTIPLICITIES/d02-x01-y02","/PDG_HADRON_MULTIPLICITIES_RATIOS/d02-x01-y02"] analyses["Multiplicity"][111 ][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d02-x01-y03","/PDG_HADRON_MULTIPLICITIES_RATIOS/d02-x01-y03", "/DELPHI_1996_S3430090/d36-x01-y02","/ALEPH_1996_S3486095/d44-x01-y02"] analyses["Multiplicity"][321 ][10. ] = ["/PDG_HADRON_MULTIPLICITIES/d03-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d03-x01-y01", "/CLEO_1985_I205668/d13-x01-y01"] analyses["Multiplicity"][321 ][32.0 ] = ["/PDG_HADRON_MULTIPLICITIES/d03-x01-y02","/PDG_HADRON_MULTIPLICITIES_RATIOS/d03-x01-y02"] analyses["Multiplicity"][321 ][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d03-x01-y03","/PDG_HADRON_MULTIPLICITIES_RATIOS/d03-x01-y03", "/DELPHI_1996_S3430090/d36-x01-y03","/DELPHI_1998_I473409/d01-x01-y03", "/SLD_2004_S5693039/d03-x02-y02","/SLD_1999_S3743934/d24-x02-y01"] analyses["Multiplicity"][321 ][165.0] = ["/PDG_HADRON_MULTIPLICITIES/d03-x01-y04","/PDG_HADRON_MULTIPLICITIES_RATIOS/d03-x01-y04"] analyses["Multiplicity"][311 ][10. ] = ["/PDG_HADRON_MULTIPLICITIES/d04-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d04-x01-y01", "/PLUTO_1981_I165122/d02-x01-y01","/CLEO_1985_I205668/d16-x01-y01"] analyses["Multiplicity"][311 ][30. ] = ["/TASSO_1990_I284251/d04-x01-y01"] analyses["Multiplicity"][311 ][32.0 ] = ["/PDG_HADRON_MULTIPLICITIES/d04-x01-y02","/PDG_HADRON_MULTIPLICITIES_RATIOS/d04-x01-y02"] analyses["Multiplicity"][311 ][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d04-x01-y03","/PDG_HADRON_MULTIPLICITIES_RATIOS/d04-x01-y03", "/DELPHI_1996_S3430090/d36-x01-y04","/ALEPH_1996_S3486095/d44-x01-y05","/SLD_1999_S3743934/d24-x03-y01"] analyses["Multiplicity"][311 ][165.0] = ["/PDG_HADRON_MULTIPLICITIES/d04-x01-y04","/PDG_HADRON_MULTIPLICITIES_RATIOS/d04-x01-y04"] analyses["Multiplicity"][221 ][4. ] = ["/DASP_1979_I132410/d01-x01-y01"] analyses["Multiplicity"][221 ][10. ] = ["/PDG_HADRON_MULTIPLICITIES/d05-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d05-x01-y01","/ARGUS_1990_I278933/d02-x01-y01"] analyses["Multiplicity"][221 ][32.0 ] = ["/PDG_HADRON_MULTIPLICITIES/d05-x01-y02","/PDG_HADRON_MULTIPLICITIES_RATIOS/d05-x01-y02"] analyses["Multiplicity"][221 ][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d05-x01-y03","/PDG_HADRON_MULTIPLICITIES_RATIOS/d05-x01-y03", "/DELPHI_1996_S3430090/d36-x01-y05","/ALEPH_1996_S3486095/d44-x01-y03"] analyses["Multiplicity"][331 ][10. ] = ["/PDG_HADRON_MULTIPLICITIES/d06-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d06-x01-y01"] analyses["Multiplicity"][331 ][32.0 ] = ["/PDG_HADRON_MULTIPLICITIES/d06-x01-y02","/PDG_HADRON_MULTIPLICITIES_RATIOS/d06-x01-y02"] analyses["Multiplicity"][331 ][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d06-x01-y03","/PDG_HADRON_MULTIPLICITIES_RATIOS/d06-x01-y03", "/DELPHI_1996_S3430090/d36-x01-y06","/ALEPH_1996_S3486095/d44-x01-y04"] analyses["Multiplicity"][411 ][10. ] = ["/PDG_HADRON_MULTIPLICITIES/d07-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d07-x01-y01"] analyses["Multiplicity"][411 ][10.47] = ["/ARGUS_1991_I315059/d01-x01-y02"] analyses["Multiplicity"][411 ][10.58] = ["/CLEO_2004_S5809304/d01-x01-y01","/BELLE_2005_I686014/d02-x01-y02"] analyses["Multiplicity"][411 ][32.0 ] = ["/PDG_HADRON_MULTIPLICITIES/d07-x01-y02","/PDG_HADRON_MULTIPLICITIES_RATIOS/d07-x01-y02"] analyses["Multiplicity"][411 ][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d07-x01-y03","/PDG_HADRON_MULTIPLICITIES_RATIOS/d07-x01-y03","/DELPHI_1996_S3430090/d36-x01-y07"] analyses["Multiplicity"][421 ][10. ] = ["/PDG_HADRON_MULTIPLICITIES/d08-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d08-x01-y01"] analyses["Multiplicity"][421 ][10.47] = ["/ARGUS_1991_I315059/d01-x01-y01"] analyses["Multiplicity"][421 ][10.58] = ["/CLEO_2004_S5809304/d01-x01-y02","/CLEO_2004_S5809304/d01-x01-y03","/BELLE_2005_I686014/d02-x01-y01"] analyses["Multiplicity"][421 ][32.0 ] = ["/PDG_HADRON_MULTIPLICITIES/d08-x01-y02","/PDG_HADRON_MULTIPLICITIES_RATIOS/d08-x01-y02"] analyses["Multiplicity"][421 ][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d08-x01-y03","/PDG_HADRON_MULTIPLICITIES_RATIOS/d08-x01-y03","/DELPHI_1996_S3430090/d36-x01-y08"] analyses["Multiplicity"][431 ][10. ] = ["/PDG_HADRON_MULTIPLICITIES/d09-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d09-x01-y01"] analyses["Multiplicity"][431 ][10.58] = ["/BABAR_2002_I582184/d01-x01-y01","/BELLE_2005_I686014/d02-x01-y03"] analyses["Multiplicity"][431 ][32.0 ] = ["/PDG_HADRON_MULTIPLICITIES/d09-x01-y02","/PDG_HADRON_MULTIPLICITIES_RATIOS/d09-x01-y02"] analyses["Multiplicity"][431 ][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d09-x01-y03","/PDG_HADRON_MULTIPLICITIES_RATIOS/d09-x01-y03"] analyses["Multiplicity"][433 ][10.58] = ["/BABAR_2002_I582184/d01-x01-y02"] analyses["Multiplicity"][413 ][10.47] = ["/ARGUS_1991_I315059/d01-x01-y03"] analyses["Multiplicity"]["511B"][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d10-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d10-x01-y01","/DELPHI_1996_S3430090/d36-x01-y09"] analyses["Multiplicity"][521 ][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d11-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d11-x01-y01"] analyses["Multiplicity"][531 ][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d12-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d12-x01-y01"] analyses["Multiplicity"][9010221][10. ] = ["/PDG_HADRON_MULTIPLICITIES/d13-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d13-x01-y01"] analyses["Multiplicity"][9010221][32.0 ] = ["/PDG_HADRON_MULTIPLICITIES/d13-x01-y02","/PDG_HADRON_MULTIPLICITIES_RATIOS/d13-x01-y02"] analyses["Multiplicity"][9010221][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d13-x01-y03","/PDG_HADRON_MULTIPLICITIES_RATIOS/d13-x01-y03","/DELPHI_1996_S3430090/d37-x01-y01"] analyses["Multiplicity"][9000211][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d14-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d14-x01-y01"] analyses["Multiplicity"][113 ][10. ] = ["/PDG_HADRON_MULTIPLICITIES/d15-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d15-x01-y01", "/ARGUS_1993_S2789213/d01-x01-y02","/CLEO_1985_I205668/d19-x01-y01"] analyses["Multiplicity"][113 ][32.0 ] = ["/PDG_HADRON_MULTIPLICITIES/d15-x01-y02","/PDG_HADRON_MULTIPLICITIES_RATIOS/d15-x01-y02"] analyses["Multiplicity"][113 ][34.0 ] = ["/TASSO_1982_I179022/d01-x01-y01"] analyses["Multiplicity"][113 ][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d15-x01-y03","/PDG_HADRON_MULTIPLICITIES_RATIOS/d15-x01-y03", "/ALEPH_1996_S3486095/d44-x01-y06","/DELPHI_1996_S3430090/d38-x01-y01"] analyses["Multiplicity"][213 ][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d16-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d16-x01-y01"] analyses["Multiplicity"][223 ][10. ] = ["/PDG_HADRON_MULTIPLICITIES/d17-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d17-x01-y01","/ARGUS_1993_S2789213/d01-x01-y01"] analyses["Multiplicity"][223 ][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d17-x01-y02","/PDG_HADRON_MULTIPLICITIES_RATIOS/d17-x01-y02", "/ALEPH_1996_S3486095/d44-x01-y07"] analyses["Multiplicity"][323 ][10. ] = ["/PDG_HADRON_MULTIPLICITIES/d18-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d18-x01-y01", "/ARGUS_1993_S2789213/d01-x01-y04","/CLEO_1985_I205668/d20-x01-y01"] analyses["Multiplicity"][323 ][32.0 ] = ["/PDG_HADRON_MULTIPLICITIES/d18-x01-y02","/PDG_HADRON_MULTIPLICITIES_RATIOS/d18-x01-y02"] analyses["Multiplicity"][323 ][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d18-x01-y03","/PDG_HADRON_MULTIPLICITIES_RATIOS/d18-x01-y03", "/OPAL_1993_I342766/d02-x01-y01","/DELPHI_1996_S3430090/d38-x01-y02","/ALEPH_1996_S3486095/d44-x01-y09"] analyses["Multiplicity"][313 ][10. ] = ["/PDG_HADRON_MULTIPLICITIES/d19-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d19-x01-y01", "/ARGUS_1993_S2789213/d01-x01-y03","/CLEO_1985_I205668/d21-x01-y01"] analyses["Multiplicity"][313 ][30. ] = ["/TASSO_1990_I284251/d09-x01-y01"] analyses["Multiplicity"][313 ][32.0 ] = ["/PDG_HADRON_MULTIPLICITIES/d19-x01-y02","/PDG_HADRON_MULTIPLICITIES_RATIOS/d19-x01-y02"] analyses["Multiplicity"][313 ][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d19-x01-y03","/PDG_HADRON_MULTIPLICITIES_RATIOS/d19-x01-y03", "/DELPHI_1996_S3430090/d38-x01-y03","/ALEPH_1996_S3486095/d44-x01-y10","/SLD_1999_S3743934/d24-x04-y01"] analyses["Multiplicity"][333 ][10. ] = ["/PDG_HADRON_MULTIPLICITIES/d20-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d20-x01-y01", "/ARGUS_1993_S2789213/d01-x01-y05","/CLEO_1985_I205668/d22-x01-y01"] analyses["Multiplicity"][333 ][32.0 ] = ["/PDG_HADRON_MULTIPLICITIES/d20-x01-y02","/PDG_HADRON_MULTIPLICITIES_RATIOS/d20-x01-y02"] analyses["Multiplicity"][333 ][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d20-x01-y03","/PDG_HADRON_MULTIPLICITIES_RATIOS/d20-x01-y03", "/DELPHI_1996_S3430090/d38-x01-y04","/ALEPH_1996_S3486095/d44-x01-y08","/SLD_1999_S3743934/d24-x05-y01"] analyses["Multiplicity"][413 ][10. ] = ["/PDG_HADRON_MULTIPLICITIES/d21-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d21-x01-y01"] analyses["Multiplicity"][413 ][10.58] = ["/CLEO_2004_S5809304/d01-x01-y04","/CLEO_2004_S5809304/d01-x01-y05", "/BELLE_2005_I686014/d02-x01-y06","/BELLE_2005_I686014/d02-x01-y07"] analyses["Multiplicity"][413 ][32.0 ] = ["/PDG_HADRON_MULTIPLICITIES/d21-x01-y02","/PDG_HADRON_MULTIPLICITIES_RATIOS/d21-x01-y02"] analyses["Multiplicity"][413 ][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d21-x01-y03","/PDG_HADRON_MULTIPLICITIES_RATIOS/d21-x01-y03", "/DELPHI_1996_S3430090/d38-x01-y05","/OPAL_1995_I382219/d03-x01-y01"] analyses["Multiplicity"][423 ][10. ] = ["/PDG_HADRON_MULTIPLICITIES/d22-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d22-x01-y01"] analyses["Multiplicity"][423 ][10.58] = ["/CLEO_2004_S5809304/d01-x01-y06","/CLEO_2004_S5809304/d01-x01-y07","/BELLE_2005_I686014/d02-x01-y05"] analyses["Multiplicity"][423 ][32.0 ] = ["/PDG_HADRON_MULTIPLICITIES/d22-x01-y02","/PDG_HADRON_MULTIPLICITIES_RATIOS/d22-x01-y02"] analyses["Multiplicity"][425 ][10.0 ] = ["/ARGUS_1989_I268577/d01-x01-y01","/ARGUS_1989_I280943/d01-x01-y02", "/CLEOII_1994_I372349/d03-x01-y01","/CLEOII_1994_I372349/d03-x01-y02"] analyses["Multiplicity"][10413][10.0 ] = ["/CLEOII_1994_I378319/d05-x01-y03"] analyses["Multiplicity"][10423][10.0 ] = ["/ARGUS_1989_I280943/d01-x01-y01","/CLEOII_1994_I372349/d03-x01-y03"] analyses["Multiplicity"][433 ][10. ] = ["/PDG_HADRON_MULTIPLICITIES/d23-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d23-x01-y01"] analyses["Multiplicity"][433 ][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d23-x01-y02","/PDG_HADRON_MULTIPLICITIES_RATIOS/d23-x01-y02"] analyses["Multiplicity"][415 ][10. ] = ["/CLEOII_1994_I378319/d05-x01-y01","/CLEOII_1994_I378319/d05-x01-y02"] analyses["Multiplicity"][513 ][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d24-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d24-x01-y01", "/DELPHI_1995_I395026/d02-x01-y01","/ALEPH_1995_I398426/d01-x01-y01", "/L3_1995_I381046/d01-x01-y01","/OPAL_1996_I428493/d01-x01-y01", "/DELPHI_1995_I395026/d01-x01-y01"] analyses["Multiplicity"][443 ][10. ] = ["/PDG_HADRON_MULTIPLICITIES/d25-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d25-x01-y01"] analyses["Multiplicity"][443 ][10.6 ] = ["/BABAR_2001_I558091/d01-x01-y01","/BELLE_2002_I563840/d01-x01-y01", "/BELLE_2002_I563840/d01-x02-y01","/BELLE_2002_I563840/d01-x02-y02"] analyses["Multiplicity"][443 ][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d25-x01-y02","/PDG_HADRON_MULTIPLICITIES_RATIOS/d25-x01-y02", "/OPAL_1996_S3257789/d02-x01-y01"] analyses["Multiplicity"][100443 ][10.6 ] = ["/BELLE_2002_I563840/d01-x02-y03"] analyses["Multiplicity"][100443 ][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d26-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d26-x01-y01", "/OPAL_1996_S3257789/d02-x01-y02"] analyses["Multiplicity"][553 ][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d27-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d27-x01-y01"] analyses["Multiplicity"][20223 ][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d28-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d28-x01-y01"] analyses["Multiplicity"][20333 ][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d29-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d29-x01-y01"] analyses["Multiplicity"][20443 ][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d30-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d30-x01-y01"] analyses["Multiplicity"][225 ][10. ] = ["/PDG_HADRON_MULTIPLICITIES/d31-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d31-x01-y01", "/CLEO_1985_I205668/d23-x01-y01"] analyses["Multiplicity"][225 ][32.0 ] = ["/PDG_HADRON_MULTIPLICITIES/d31-x01-y02","/PDG_HADRON_MULTIPLICITIES_RATIOS/d31-x01-y02"] analyses["Multiplicity"][225 ][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d31-x01-y03","/PDG_HADRON_MULTIPLICITIES_RATIOS/d31-x01-y03","/DELPHI_1996_S3430090/d39-x01-y01"] analyses["Multiplicity"][335 ][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d32-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d32-x01-y01"] analyses["Multiplicity"][325 ][32.0 ] = ["/PDG_HADRON_MULTIPLICITIES/d33-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d33-x01-y01"] analyses["Multiplicity"][315 ][32.0 ] = ["/PDG_HADRON_MULTIPLICITIES/d34-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d34-x01-y01"] analyses["Multiplicity"][315 ][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d34-x01-y02","/PDG_HADRON_MULTIPLICITIES_RATIOS/d34-x01-y02","/DELPHI_1996_S3430090/d39-x01-y02"] analyses["Multiplicity"][515 ][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d35-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d35-x01-y01"] analyses["Multiplicity"][10431][10. ] = ["/BABAR_2006_I714447/d01-x01-y01"] analyses["Multiplicity"][10433][10. ] = ["/BABAR_2006_I714447/d01-x01-y02","/BABAR_2006_I714447/d01-x01-y03", "/BABAR_2006_I714447/d01-x01-y04","/BABAR_2006_I714447/d01-x01-y05", "/ARGUS_1989_I282570/d01-x01-y01","/ARGUS_1989_I282570/d01-x01-y02"] analyses["Multiplicity"][20433][10. ] = ["/BABAR_2006_I714447/d01-x01-y06","/CLEOII_1993_I352823/d02-x01-y01", "/CLEOII_1993_I352823/d02-x01-y02"] analyses["Multiplicity"][20433][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d36-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d36-x01-y01"] analyses["Multiplicity"][435 ][10.58] = ["/ARGUS_1995_I397794/d01-x01-y01","/ARGUS_1995_I397794/d01-x02-y01"] analyses["Multiplicity"][435 ][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d37-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d37-x01-y01"] #baryons analyses["Multiplicity"][2212][10. ] = ["/PDG_HADRON_MULTIPLICITIES/d38-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d38-x01-y01", "/CLEO_1985_I205668/d14-x01-y01"] analyses["Multiplicity"][2212][32.0 ] = ["/PDG_HADRON_MULTIPLICITIES/d38-x01-y02","/PDG_HADRON_MULTIPLICITIES_RATIOS/d38-x01-y02"] analyses["Multiplicity"][2212][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d38-x01-y03","/PDG_HADRON_MULTIPLICITIES_RATIOS/d38-x01-y03", "/DELPHI_1996_S3430090/d40-x01-y01","/DELPHI_1998_I473409/d01-x01-y04", "/SLD_2004_S5693039/d04-x02-y02","/SLD_1999_S3743934/d24-x06-y01"] analyses["Multiplicity"][2212][165.0] = ["/PDG_HADRON_MULTIPLICITIES/d38-x01-y04","/PDG_HADRON_MULTIPLICITIES_RATIOS/d38-x01-y04"] analyses["Multiplicity"][3122][10. ] = ["/PDG_HADRON_MULTIPLICITIES/d39-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d39-x01-y01", "/ARGUS_1988_I251097/d02-x01-y01","/CLEO_1985_I205668/d17-x01-y01", "/BELLE_2017_I1606201/d16-x01-y01"] analyses["Multiplicity"][3122][32.0 ] = ["/PDG_HADRON_MULTIPLICITIES/d39-x01-y02","/PDG_HADRON_MULTIPLICITIES_RATIOS/d39-x01-y02"] analyses["Multiplicity"][3122][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d39-x01-y03","/PDG_HADRON_MULTIPLICITIES_RATIOS/d39-x01-y03", "/DELPHI_1996_S3430090/d40-x01-y02","/ALEPH_1996_S3486095/d44-x01-y11","/DELPHI_1993_I360638/d02-x01-y01", "/SLD_1999_S3743934/d24-x07-y01", "/OPAL_2000_I474010/d01-x01-y01","/OPAL_2000_I474010/d01-x01-y02","/OPAL_2000_I474010/d01-x01-y03", "/OPAL_2000_I474010/d02-x01-y01","/OPAL_2000_I474010/d02-x01-y02","/OPAL_2000_I474010/d02-x01-y03", "/OPAL_2000_I474010/d03-x01-y01","/OPAL_2000_I474010/d03-x01-y02","/OPAL_2000_I474010/d03-x01-y03"] analyses["Multiplicity"][3122][165.0] = ["/PDG_HADRON_MULTIPLICITIES/d39-x01-y04","/PDG_HADRON_MULTIPLICITIES_RATIOS/d39-x01-y04"] analyses["Multiplicity"][3212][10. ] = ["/PDG_HADRON_MULTIPLICITIES/d40-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d40-x01-y01", "/ARGUS_1988_I251097/d02-x01-y03","/BELLE_2017_I1606201/d16-x01-y02"] analyses["Multiplicity"][3212][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d40-x01-y02","/PDG_HADRON_MULTIPLICITIES_RATIOS/d40-x01-y02"] analyses["Multiplicity"][3112][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d41-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d41-x01-y01"] analyses["Multiplicity"][3222][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d42-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d42-x01-y01","/ALEPH_1996_S3486095/d44-x01-y12"] analyses["Multiplicity"][3312][10. ] = ["/PDG_HADRON_MULTIPLICITIES/d44-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d44-x01-y01", "/ARGUS_1988_I251097/d02-x01-y02","/BELLE_2017_I1606201/d16-x01-y05", "/CLEO_1985_I205668/d18-x01-y01"] analyses["Multiplicity"][3312][32.0 ] = ["/PDG_HADRON_MULTIPLICITIES/d44-x01-y02","/PDG_HADRON_MULTIPLICITIES_RATIOS/d44-x01-y02"] analyses["Multiplicity"][3312][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d44-x01-y03","/PDG_HADRON_MULTIPLICITIES_RATIOS/d44-x01-y03", "/DELPHI_1996_S3430090/d40-x01-y03","/ALEPH_1996_S3486095/d44-x01-y13"] analyses["Multiplicity"][2224][10. ] = ["/PDG_HADRON_MULTIPLICITIES/d45-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d45-x01-y01", "/ARGUS_1989_I278932/d02-x01-y02"] analyses["Multiplicity"][2224][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d45-x01-y02","/PDG_HADRON_MULTIPLICITIES_RATIOS/d45-x01-y02","/DELPHI_1996_S3430090/d40-x01-y05"] analyses["Multiplicity"][3114][10. ] = ["/PDG_HADRON_MULTIPLICITIES/d46-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d46-x01-y01","/ARGUS_1988_I251097/d02-x01-y04"] analyses["Multiplicity"][3114][32.0 ] = ["/PDG_HADRON_MULTIPLICITIES/d46-x01-y02","/PDG_HADRON_MULTIPLICITIES_RATIOS/d46-x01-y02"] analyses["Multiplicity"][3114][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d46-x01-y03","/PDG_HADRON_MULTIPLICITIES_RATIOS/d46-x01-y03"] analyses["Multiplicity"][3224][10. ] = ["/PDG_HADRON_MULTIPLICITIES/d47-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d47-x01-y01", "/ARGUS_1988_I251097/d02-x01-y05","/BELLE_2017_I1606201/d16-x01-y03"] analyses["Multiplicity"][3224][32.0 ] = ["/PDG_HADRON_MULTIPLICITIES/d47-x01-y02","/PDG_HADRON_MULTIPLICITIES_RATIOS/d47-x01-y02"] analyses["Multiplicity"][3224][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d47-x01-y03","/PDG_HADRON_MULTIPLICITIES_RATIOS/d47-x01-y03"] analyses["Multiplicity"][3324][10. ] = ["/PDG_HADRON_MULTIPLICITIES/d49-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d49-x01-y01", "/ARGUS_1988_I251097/d02-x01-y06","/BELLE_2017_I1606201/d16-x01-y07"] analyses["Multiplicity"][3324][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d49-x01-y02","/PDG_HADRON_MULTIPLICITIES_RATIOS/d49-x01-y02", "/DELPHI_1996_S3430090/d40-x01-y07","/ALEPH_1996_S3486095/d44-x01-y15"] analyses["Multiplicity"][3334][10. ] = ["/PDG_HADRON_MULTIPLICITIES/d50-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d50-x01-y01", "/ARGUS_1988_I251097/d02-x01-y07","/BELLE_2017_I1606201/d16-x01-y06"] analyses["Multiplicity"][3334][32.0 ] = ["/PDG_HADRON_MULTIPLICITIES/d50-x01-y02","/PDG_HADRON_MULTIPLICITIES_RATIOS/d50-x01-y02"] analyses["Multiplicity"][3334][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d50-x01-y03","/PDG_HADRON_MULTIPLICITIES_RATIOS/d50-x01-y03", "/DELPHI_1996_S3430090/d40-x01-y04","/ALEPH_1996_S3486095/d44-x01-y16"] analyses["Multiplicity"][4122][10. ] = ["/PDG_HADRON_MULTIPLICITIES/d51-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d51-x01-y01", "/BABAR_2007_S6895344/d02-x01-y01","/BELLE_2005_I686014/d02-x01-y04","/BELLE_2017_I1606201/d16-x01-y08"] analyses["Multiplicity"][4122][32.0 ] = ["/PDG_HADRON_MULTIPLICITIES/d51-x01-y02","/PDG_HADRON_MULTIPLICITIES_RATIOS/d51-x01-y02"] analyses["Multiplicity"][4122][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d51-x01-y03","/PDG_HADRON_MULTIPLICITIES_RATIOS/d51-x01-y03"] analyses["Multiplicity"][5122][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d52-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d52-x01-y01","/DELPHI_1996_S3430090/d40-x01-y08"] analyses["Multiplicity"][4222][10. ] = ["/PDG_HADRON_MULTIPLICITIES/d53-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d53-x01-y01"] analyses["Multiplicity"][3124][10. ] = ["/PDG_HADRON_MULTIPLICITIES/d54-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d54-x01-y01", "/ARGUS_1989_I262415/d01-x01-y02","/ARGUS_1989_I262415/d01-x02-y02","/BELLE_2017_I1606201/d16-x01-y04"] analyses["Multiplicity"][3124][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d54-x01-y02","/PDG_HADRON_MULTIPLICITIES_RATIOS/d54-x01-y02"] analyses["Multiplicity"][4324][10. ] = ["/CLEOII_1996_I416471/d03-x01-y01"] analyses["Multiplicity"][4314][10. ] = ["/CLEOII_1995_I397770/d03-x01-y01"] # analyses["Multiplicity"]["3222B"][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d43-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d43-x01-y01"] analyses["Multiplicity"]["3224B"][10. ] = ["/PDG_HADRON_MULTIPLICITIES/d48-x01-y01","/PDG_HADRON_MULTIPLICITIES_RATIOS/d48-x01-y01"] analyses["Multiplicity"]["3224B"][32.0 ] = ["/PDG_HADRON_MULTIPLICITIES/d48-x01-y02","/PDG_HADRON_MULTIPLICITIES_RATIOS/d48-x01-y02"] analyses["Multiplicity"]["3224B"][91.2 ] = ["/PDG_HADRON_MULTIPLICITIES/d48-x01-y03","/PDG_HADRON_MULTIPLICITIES_RATIOS/d48-x01-y03", "/DELPHI_1996_S3430090/d40-x01-y06","/ALEPH_1996_S3486095/d44-x01-y14"] analyses["Multiplicity"][4132][10.52] = ["/BABAR_2005_S6181155/d03-x01-y01","/ARGUS_1990_I296522/d01-x01-y01", "/ARGUS_1990_I296522/d01-x01-y02","/ARGUS_1990_I296522/d01-x02-y01", "/ARGUS_1990_I296522/d01-x02-y02","/BELLE_2017_I1606201/d16-x01-y13","/BELLE_2017_I1606201/d16-x01-y14"] analyses["Multiplicity"][4232][10.52] = ["/ARGUS_1990_I296522/d01-x01-y03","/ARGUS_1990_I296522/d01-x02-y03"] analyses["Multiplicity"][14122][10.6] = ["/ARGUS_1993_I357132/d01-x01-y01","/BELLE_2017_I1606201/d16-x01-y09", "/CLEOII_1994_I381696/d04-x01-y01"] analyses["Multiplicity"][4124 ][10.6] = ["/ARGUS_1997_I440304/d01-x01-y01","/ARGUS_1997_I440304/d01-x02-y01", "/BELLE_2017_I1606201/d16-x01-y10","/CLEOII_1994_I381696/d04-x01-y02"] analyses["Multiplicity"][4332 ][10.] = ["/BELLE_2017_I1606201/d16-x01-y15","/BABAR_2007_I746745/d03-x01-y01"] analyses["Multiplicity"][4334 ][10.] = ["/BABAR_2006_I724557/d01-x01-y01"] analyses["Multiplicity"][4212][10.52] = ["/BELLE_2017_I1606201/d16-x01-y11"] analyses["Multiplicity"][4214][10.52] = ["/BELLE_2017_I1606201/d16-x01-y12"] # event shapes # thrust based # thrust analyses["EventShapes"]["T"][9.98 ] = ["/ARGUS_1986_I227324/d02-x01-y02"] analyses["EventShapes"]["T"][9.5149] = ["/LENA_1981_I164397/d04-x01-y01"] analyses["EventShapes"]["T"][9.9903] = ["/LENA_1981_I164397/d04-x01-y02"] analyses["EventShapes"]["T"][14.0 ] = ["/TASSO_1990_S2148048/d08-x01-y01"] analyses["EventShapes"]["T"][22.0 ] = ["/TASSO_1990_S2148048/d08-x01-y02"] analyses["EventShapes"]["T"][29.0 ] = ["/HRS_1985_I201482/d03-x01-y01","/HRS_1985_I201482/d04-x01-y01"] analyses["EventShapes"]["T"][35.0 ] = ["/TASSO_1990_S2148048/d08-x01-y03","/TASSO_1988_I263859/d03-x01-y01", "/JADE_1998_S3612880/d06-x01-y01"] analyses["EventShapes"]["T"][44.0 ] = ["/TASSO_1990_S2148048/d08-x01-y04","/JADE_1998_S3612880/d02-x01-y01"] analyses["EventShapes"]["T"][45.0 ] = ["/DELPHI_2003_I620250/d01-x01-y01"] analyses["EventShapes"]["T"][55.2 ] = ["/AMY_1990_I283337/d12-x01-y01"] analyses["EventShapes"]["T"][58.0 ] = ["/TOPAZ_1993_I361661/d01-x01-y01"] analyses["EventShapes"]["T"][66.0 ] = ["/DELPHI_2003_I620250/d01-x01-y02"] analyses["EventShapes"]["T"][76.0 ] = ["/DELPHI_2003_I620250/d01-x01-y03"] analyses["EventShapes"]["T"][91.2 ] = ["/DELPHI_1996_S3430090/d11-x01-y01","/ALEPH_1996_S3486095/d03-x01-y01", "/OPAL_2004_S6132243/d01-x01-y01","/ALEPH_2004_S5765862/d54-x01-y01"] analyses["EventShapes"]["T"][133.0] = ["/ALEPH_2004_S5765862/d55-x01-y01","/OPAL_2004_S6132243/d01-x01-y02", "/DELPHI_1999_I499183/d13-x01-y01"] analyses["EventShapes"]["T"][161.0] = ["/ALEPH_2004_S5765862/d56-x01-y01","/DELPHI_1999_I499183/d13-x01-y02", "/OPAL_1997_I440721/d03-x01-y01"] analyses["EventShapes"]["T"][172.0] = ["/ALEPH_2004_S5765862/d57-x01-y01","/DELPHI_1999_I499183/d13-x01-y03", "/OPAL_2000_I513476/d01-x01-y01"] analyses["EventShapes"]["T"][177.0] = ["/OPAL_2004_S6132243/d01-x01-y03"] analyses["EventShapes"]["T"][183.0] = ["/DELPHI_2003_I620250/d38-x01-y01","/ALEPH_2004_S5765862/d58-x01-y01", "/DELPHI_1999_I499183/d14-x01-y01","/OPAL_2000_I513476/d01-x01-y02"] analyses["EventShapes"]["T"][189.0] = ["/DELPHI_2003_I620250/d38-x01-y02","/ALEPH_2004_S5765862/d59-x01-y01", "/OPAL_2000_I513476/d01-x01-y03"] analyses["EventShapes"]["T"][192.0] = ["/DELPHI_2003_I620250/d38-x01-y03"] analyses["EventShapes"]["T"][196.0] = ["/DELPHI_2003_I620250/d38-x01-y04"] analyses["EventShapes"]["T"][200.0] = ["/DELPHI_2003_I620250/d39-x01-y01","/ALEPH_2004_S5765862/d60-x01-y01"] analyses["EventShapes"]["T"][197.0] = ["/OPAL_2004_S6132243/d01-x01-y04"] analyses["EventShapes"]["T"][202.0] = ["/DELPHI_2003_I620250/d39-x01-y02"] analyses["EventShapes"]["T"][205.0] = ["/DELPHI_2003_I620250/d39-x01-y03"] analyses["EventShapes"]["T"][206.0] = ["/ALEPH_2004_S5765862/d61-x01-y01"] analyses["EventShapes"]["T"][207.0] = ["/DELPHI_2003_I620250/d39-x01-y04"] analyses["EventShapes"]["T"][41.4 ] = ["/L3_2004_I652683/d21-x01-y01"] analyses["EventShapes"]["T"][55.3 ] = ["/L3_2004_I652683/d21-x01-y02"] analyses["EventShapes"]["T"][65.4 ] = ["/L3_2004_I652683/d21-x01-y03"] analyses["EventShapes"]["T"][75.7 ] = ["/L3_2004_I652683/d22-x01-y01"] analyses["EventShapes"]["T"][82.3 ] = ["/L3_2004_I652683/d22-x01-y02"] analyses["EventShapes"]["T"][85.1 ] = ["/L3_2004_I652683/d22-x01-y03"] analyses["EventShapes"]["T"][130.1] = ["/L3_2004_I652683/d23-x01-y01"] analyses["EventShapes"]["T"][136.3] = ["/L3_2004_I652683/d23-x01-y02"] analyses["EventShapes"]["T"][161.3] = ["/L3_2004_I652683/d23-x01-y03"] analyses["EventShapes"]["T"][172.3] = ["/L3_2004_I652683/d24-x01-y01"] analyses["EventShapes"]["T"][182.8] = ["/L3_2004_I652683/d24-x01-y02"] analyses["EventShapes"]["T"][188.6] = ["/L3_2004_I652683/d24-x01-y03"] analyses["EventShapes"]["T"][194.4] = ["/L3_2004_I652683/d25-x01-y01"] analyses["EventShapes"]["T"][200.2] = ["/L3_2004_I652683/d25-x01-y02"] analyses["EventShapes"]["T"][206.2] = ["/L3_2004_I652683/d25-x01-y03"] analyses["EventShapes"]["Moment_T"][91.2 ] = ["/OPAL_2004_S6132243/d15-x01-y01"] analyses["EventShapes"]["Moment_T"][133.0] = ["/OPAL_2004_S6132243/d15-x01-y02"] analyses["EventShapes"]["Moment_T"][177.0] = ["/OPAL_2004_S6132243/d15-x01-y03"] analyses["EventShapes"]["Moment_T"][197.0] = ["/OPAL_2004_S6132243/d15-x01-y04"] analyses["EventShapesFlavour"]["T"][2][91.2] = ["/L3_2004_I652683/d47-x01-y01"] analyses["EventShapesFlavour"]["T"][5][91.2] = ["/L3_2004_I652683/d47-x01-y02"] analyses["EventShapesFlavour"]["HeavyJetMass"][2][91.2] = ["/L3_2004_I652683/d48-x01-y01"] analyses["EventShapesFlavour"]["HeavyJetMass"][5][91.2] = ["/L3_2004_I652683/d48-x01-y02"] analyses["EventShapesFlavour"]["BT"][2][91.2] = ["/L3_2004_I652683/d49-x01-y01"] analyses["EventShapesFlavour"]["BT"][5][91.2] = ["/L3_2004_I652683/d49-x01-y02"] analyses["EventShapesFlavour"]["BW"][2][91.2] = ["/L3_2004_I652683/d50-x01-y01"] analyses["EventShapesFlavour"]["BW"][5][91.2] = ["/L3_2004_I652683/d50-x01-y02"] analyses["EventShapesFlavour"]["C"][2][91.2] = ["/L3_2004_I652683/d51-x01-y01"] analyses["EventShapesFlavour"]["C"][5][91.2] = ["/L3_2004_I652683/d51-x01-y02"] analyses["EventShapesFlavour"]["D"][2][91.2] = ["/L3_2004_I652683/d52-x01-y01"] analyses["EventShapesFlavour"]["D"][5][91.2] = ["/L3_2004_I652683/d52-x01-y02"] analyses["EventShapes"]["Moment_H" ][91.2 ] = ["/OPAL_2004_S6132243/d16-x01-y01"] analyses["EventShapes"]["Moment_H" ][133.0] = ["/OPAL_2004_S6132243/d16-x01-y02"] analyses["EventShapes"]["Moment_H" ][177.0] = ["/OPAL_2004_S6132243/d16-x01-y03"] analyses["EventShapes"]["Moment_H" ][197.0] = ["/OPAL_2004_S6132243/d16-x01-y04"] analyses["EventShapes"]["Moment_C" ][91.2 ] = ["/OPAL_2004_S6132243/d17-x01-y01"] analyses["EventShapes"]["Moment_C" ][133.0] = ["/OPAL_2004_S6132243/d17-x01-y02"] analyses["EventShapes"]["Moment_C" ][177.0] = ["/OPAL_2004_S6132243/d17-x01-y03"] analyses["EventShapes"]["Moment_C" ][197.0] = ["/OPAL_2004_S6132243/d17-x01-y04"] analyses["EventShapes"]["Moment_BT"][91.2 ] = ["/OPAL_2004_S6132243/d18-x01-y01"] analyses["EventShapes"]["Moment_BT"][133.0] = ["/OPAL_2004_S6132243/d18-x01-y02"] analyses["EventShapes"]["Moment_BT"][177.0] = ["/OPAL_2004_S6132243/d18-x01-y03"] analyses["EventShapes"]["Moment_BT"][197.0] = ["/OPAL_2004_S6132243/d18-x01-y04"] analyses["EventShapes"]["Moment_BW"][91.2 ] = ["/OPAL_2004_S6132243/d19-x01-y01"] analyses["EventShapes"]["Moment_BW"][133.0] = ["/OPAL_2004_S6132243/d19-x01-y02"] analyses["EventShapes"]["Moment_BW"][177.0] = ["/OPAL_2004_S6132243/d19-x01-y03"] analyses["EventShapes"]["Moment_BW"][197.0] = ["/OPAL_2004_S6132243/d19-x01-y04"] analyses["EventShapes"]["Moment_y" ][91.2 ] = ["/OPAL_2004_S6132243/d20-x01-y01"] analyses["EventShapes"]["Moment_y" ][133.0] = ["/OPAL_2004_S6132243/d20-x01-y02"] analyses["EventShapes"]["Moment_y" ][177.0] = ["/OPAL_2004_S6132243/d20-x01-y03"] analyses["EventShapes"]["Moment_y" ][197.0] = ["/OPAL_2004_S6132243/d20-x01-y04"] analyses["EventShapes"]["Moment_M" ][91.2 ] = ["/OPAL_2004_S6132243/d21-x01-y01"] analyses["EventShapes"]["Moment_M" ][133.0] = ["/OPAL_2004_S6132243/d21-x01-y02"] analyses["EventShapes"]["Moment_M" ][177.0] = ["/OPAL_2004_S6132243/d21-x01-y03"] analyses["EventShapes"]["Moment_M" ][197.0] = ["/OPAL_2004_S6132243/d21-x01-y04"] analyses["EventShapes"]["Moment_m" ][91.2 ] = ["/OPAL_2004_S6132243/d22-x01-y01"] analyses["EventShapes"]["Moment_m" ][133.0] = ["/OPAL_2004_S6132243/d22-x01-y02"] analyses["EventShapes"]["Moment_m" ][177.0] = ["/OPAL_2004_S6132243/d22-x01-y03"] analyses["EventShapes"]["Moment_m" ][197.0] = ["/OPAL_2004_S6132243/d22-x01-y04"] analyses["EventShapes"]["Moment_S" ][91.2 ] = ["/OPAL_2004_S6132243/d23-x01-y01"] analyses["EventShapes"]["Moment_S" ][133.0] = ["/OPAL_2004_S6132243/d23-x01-y02"] analyses["EventShapes"]["Moment_S" ][177.0] = ["/OPAL_2004_S6132243/d23-x01-y03"] analyses["EventShapes"]["Moment_S" ][197.0] = ["/OPAL_2004_S6132243/d23-x01-y04"] analyses["EventShapes"]["Moment_O" ][91.2 ] = ["/OPAL_2004_S6132243/d24-x01-y01"] analyses["EventShapes"]["Moment_O" ][133.0] = ["/OPAL_2004_S6132243/d24-x01-y02"] analyses["EventShapes"]["Moment_O" ][177.0] = ["/OPAL_2004_S6132243/d24-x01-y03"] analyses["EventShapes"]["Moment_O" ][197.0] = ["/OPAL_2004_S6132243/d24-x01-y04"] analyses["EventShapes"]["Moment_L" ][91.2 ] = ["/OPAL_2004_S6132243/d25-x01-y01"] analyses["EventShapes"]["Moment_L" ][133.0] = ["/OPAL_2004_S6132243/d25-x01-y02"] analyses["EventShapes"]["Moment_L" ][177.0] = ["/OPAL_2004_S6132243/d25-x01-y03"] analyses["EventShapes"]["Moment_L" ][197.0] = ["/OPAL_2004_S6132243/d25-x01-y04"] analyses["EventShapes"]["Moment_BN"][91.2 ] = ["/OPAL_2004_S6132243/d26-x01-y01"] analyses["EventShapes"]["Moment_BN"][133.0] = ["/OPAL_2004_S6132243/d26-x01-y02"] analyses["EventShapes"]["Moment_BN"][177.0] = ["/OPAL_2004_S6132243/d26-x01-y03"] analyses["EventShapes"]["Moment_BN"][197.0] = ["/OPAL_2004_S6132243/d26-x01-y04"] analyses["EventShapes"]["Major"][45.0 ] = ["/DELPHI_2003_I620250/d02-x01-y01"] analyses["EventShapes"]["Major"][55.2 ] = ["/AMY_1990_I283337/d13-x01-y01"] analyses["EventShapes"]["Major"][66.0 ] = ["/DELPHI_2003_I620250/d02-x01-y02"] analyses["EventShapes"]["Major"][76.0 ] = ["/DELPHI_2003_I620250/d02-x01-y03"] analyses["EventShapes"]["Major"][91.2 ] = ["/DELPHI_1996_S3430090/d12-x01-y01","/OPAL_2004_S6132243/d07-x01-y01", "/ALEPH_2004_S5765862/d94-x01-y01"] analyses["EventShapes"]["Major"][133.0] = ["/ALEPH_2004_S5765862/d95-x01-y01","/OPAL_2004_S6132243/d07-x01-y02", "/DELPHI_1999_I499183/d15-x01-y01"] analyses["EventShapes"]["Major"][161.0] = ["/ALEPH_2004_S5765862/d96-x01-y01","/DELPHI_1999_I499183/d15-x01-y02", "/OPAL_1997_I440721/d04-x01-y01"] analyses["EventShapes"]["Major"][172.0] = ["/ALEPH_2004_S5765862/d97-x01-y01","/DELPHI_1999_I499183/d15-x01-y03", "/OPAL_2000_I513476/d02-x01-y01"] analyses["EventShapes"]["Major"][177.0] = ["/OPAL_2004_S6132243/d07-x01-y03"] analyses["EventShapes"]["Major"][183.0] = ["/DELPHI_2003_I620250/d40-x01-y01","/ALEPH_2004_S5765862/d98-x01-y01", "/DELPHI_1999_I499183/d16-x01-y01","/OPAL_2000_I513476/d02-x01-y02"] analyses["EventShapes"]["Major"][189.0] = ["/DELPHI_2003_I620250/d40-x01-y02","/ALEPH_2004_S5765862/d99-x01-y01", "/OPAL_2000_I513476/d02-x01-y03"] analyses["EventShapes"]["Major"][192.0] = ["/DELPHI_2003_I620250/d40-x01-y03"] analyses["EventShapes"]["Major"][196.0] = ["/DELPHI_2003_I620250/d40-x01-y04"] analyses["EventShapes"]["Major"][197.0] = ["/OPAL_2004_S6132243/d07-x01-y04"] analyses["EventShapes"]["Major"][200.0] = ["/DELPHI_2003_I620250/d41-x01-y01","/ALEPH_2004_S5765862/d100-x01-y01"] analyses["EventShapes"]["Major"][202.0] = ["/DELPHI_2003_I620250/d41-x01-y02"] analyses["EventShapes"]["Major"][205.0] = ["/DELPHI_2003_I620250/d41-x01-y03"] analyses["EventShapes"]["Major"][206.0] = ["/ALEPH_2004_S5765862/d101-x01-y01"] analyses["EventShapes"]["Major"][207.0] = ["/DELPHI_2003_I620250/d41-x01-y04"] analyses["EventShapes"]["Minor"][45.0 ] = ["/DELPHI_2003_I620250/d03-x01-y01"] analyses["EventShapes"]["Minor"][55.2 ] = ["/AMY_1990_I283337/d14-x01-y01"] analyses["EventShapes"]["Minor"][66.0 ] = ["/DELPHI_2003_I620250/d03-x01-y02"] analyses["EventShapes"]["Minor"][76.0 ] = ["/DELPHI_2003_I620250/d03-x01-y03"] analyses["EventShapes"]["Minor"][91.2 ] = ["/DELPHI_1996_S3430090/d13-x01-y01","/ALEPH_2004_S5765862/d102-x01-y01", "/ALEPH_1996_S3486095/d04-x01-y01","/OPAL_2004_S6132243/d08-x01-y01"] analyses["EventShapes"]["Minor"][133.0] = ["/ALEPH_2004_S5765862/d103-x01-y01","/OPAL_2004_S6132243/d08-x01-y02", "/DELPHI_1999_I499183/d17-x01-y01"] analyses["EventShapes"]["Minor"][161.0] = ["/ALEPH_2004_S5765862/d104-x01-y01","/DELPHI_1999_I499183/d17-x01-y02", "/OPAL_1997_I440721/d05-x01-y01"] analyses["EventShapes"]["Minor"][172.0] = ["/ALEPH_2004_S5765862/d105-x01-y01","/DELPHI_1999_I499183/d17-x01-y03", "/OPAL_2000_I513476/d03-x01-y01"] analyses["EventShapes"]["Minor"][177.0] = ["/OPAL_2004_S6132243/d08-x01-y03"] analyses["EventShapes"]["Minor"][183.0] = ["/DELPHI_2003_I620250/d42-x01-y01","/ALEPH_2004_S5765862/d106-x01-y01", "/DELPHI_1999_I499183/d18-x01-y01","/OPAL_2000_I513476/d03-x01-y02"] analyses["EventShapes"]["Minor"][189.0] = ["/DELPHI_2003_I620250/d42-x01-y02","/ALEPH_2004_S5765862/d107-x01-y01", "/OPAL_2000_I513476/d03-x01-y03"] analyses["EventShapes"]["Minor"][192.0] = ["/DELPHI_2003_I620250/d42-x01-y03"] analyses["EventShapes"]["Minor"][196.0] = ["/DELPHI_2003_I620250/d42-x01-y04"] analyses["EventShapes"]["Minor"][197.0] = ["/OPAL_2004_S6132243/d08-x01-y04"] analyses["EventShapes"]["Minor"][200.0] = ["/DELPHI_2003_I620250/d43-x01-y01","/ALEPH_2004_S5765862/d108-x01-y01"] analyses["EventShapes"]["Minor"][202.0] = ["/DELPHI_2003_I620250/d43-x01-y02"] analyses["EventShapes"]["Minor"][205.0] = ["/DELPHI_2003_I620250/d43-x01-y03"] analyses["EventShapes"]["Minor"][206.0] = ["/ALEPH_2004_S5765862/d109-x01-y01"] analyses["EventShapes"]["Minor"][207.0] = ["/DELPHI_2003_I620250/d43-x01-y04"] analyses["EventShapes"]["O"][45.0 ] = ["/DELPHI_2003_I620250/d06-x01-y01"] analyses["EventShapes"]["O"][55.2 ] = ["/AMY_1990_I283337/d15-x01-y01"] analyses["EventShapes"]["O"][66.0 ] = ["/DELPHI_2003_I620250/d06-x01-y02"] analyses["EventShapes"]["O"][76.0 ] = ["/DELPHI_2003_I620250/d06-x01-y03"] analyses["EventShapes"]["O"][91.2 ] = ["/ALEPH_2004_S5765862/d133-x01-y01","/DELPHI_1996_S3430090/d14-x01-y01", "/ALEPH_1996_S3486095/d08-x01-y01","/OPAL_2004_S6132243/d11-x01-y01"] analyses["EventShapes"]["O"][133.0] = ["/ALEPH_2004_S5765862/d134-x01-y01","/OPAL_2004_S6132243/d11-x01-y02", "/DELPHI_1999_I499183/d19-x01-y01"] analyses["EventShapes"]["O"][161.0] = ["/ALEPH_2004_S5765862/d135-x01-y01","/DELPHI_1999_I499183/d19-x01-y02", "/OPAL_1997_I440721/d06-x01-y01"] analyses["EventShapes"]["O"][172.0] = ["/ALEPH_2004_S5765862/d136-x01-y01","/DELPHI_1999_I499183/d19-x01-y03", "/OPAL_2000_I513476/d05-x01-y01"] analyses["EventShapes"]["O"][177.0] = ["/OPAL_2004_S6132243/d11-x01-y03"] analyses["EventShapes"]["O"][183.0] = ["/DELPHI_2003_I620250/d44-x01-y01","/ALEPH_2004_S5765862/d137-x01-y01", "/DELPHI_1999_I499183/d20-x01-y01","/OPAL_2000_I513476/d05-x01-y02"] analyses["EventShapes"]["O"][189.0] = ["/DELPHI_2003_I620250/d44-x01-y02","/ALEPH_2004_S5765862/d138-x01-y01", "/OPAL_2000_I513476/d05-x01-y03"] analyses["EventShapes"]["O"][192.0] = ["/DELPHI_2003_I620250/d44-x01-y03"] analyses["EventShapes"]["O"][196.0] = ["/DELPHI_2003_I620250/d44-x01-y04"] analyses["EventShapes"]["O"][197.0] = ["/OPAL_2004_S6132243/d11-x01-y04"] analyses["EventShapes"]["O"][200.0] = ["/DELPHI_2003_I620250/d45-x01-y01","/ALEPH_2004_S5765862/d139-x01-y01"] analyses["EventShapes"]["O"][202.0] = ["/DELPHI_2003_I620250/d45-x01-y02"] analyses["EventShapes"]["O"][205.0] = ["/DELPHI_2003_I620250/d45-x01-y03"] analyses["EventShapes"]["O"][206.0] = ["/ALEPH_2004_S5765862/d140-x01-y01"] analyses["EventShapes"]["O"][207.0] = ["/DELPHI_2003_I620250/d45-x01-y04"] # jet broadenings # wide analyses["EventShapes"]["BW"][35.0 ] = ["/JADE_1998_S3612880/d09-x01-y01"] analyses["EventShapes"]["BW"][41.4 ] = ["/L3_2004_I652683/d36-x01-y01"] analyses["EventShapes"]["BW"][44.0 ] = ["/JADE_1998_S3612880/d05-x01-y01"] analyses["EventShapes"]["BW"][45.0 ] = ["/DELPHI_2003_I620250/d13-x01-y01"] analyses["EventShapes"]["BW"][55.3 ] = ["/L3_2004_I652683/d36-x01-y02"] analyses["EventShapes"]["BW"][65.4 ] = ["/L3_2004_I652683/d36-x01-y03"] analyses["EventShapes"]["BW"][66.0 ] = ["/DELPHI_2003_I620250/d13-x01-y02"] analyses["EventShapes"]["BW"][75.7 ] = ["/L3_2004_I652683/d37-x01-y01"] analyses["EventShapes"]["BW"][76.0 ] = ["/DELPHI_2003_I620250/d13-x01-y03"] analyses["EventShapes"]["BW"][82.3 ] = ["/L3_2004_I652683/d37-x01-y02"] analyses["EventShapes"]["BW"][85.1 ] = ["/L3_2004_I652683/d37-x01-y03"] analyses["EventShapes"]["BW"][91.2 ] = ["/DELPHI_1996_S3430090/d23-x01-y01","/ALEPH_2004_S5765862/d78-x01-y01", "/OPAL_2004_S6132243/d05-x01-y01"] analyses["EventShapes"]["BW"][130.1] = ["/L3_2004_I652683/d38-x01-y01"] analyses["EventShapes"]["BW"][133.0] = ["/OPAL_2004_S6132243/d05-x01-y02","/ALEPH_2004_S5765862/d79-x01-y01", "/DELPHI_1999_I499183/d33-x01-y01"] analyses["EventShapes"]["BW"][136.3] = ["/L3_2004_I652683/d38-x01-y02"] analyses["EventShapes"]["BW"][161.0] = ["/ALEPH_2004_S5765862/d80-x01-y01","/DELPHI_1999_I499183/d33-x01-y02", "/OPAL_1997_I440721/d12-x01-y01"] analyses["EventShapes"]["BW"][161.3] = ["/L3_2004_I652683/d38-x01-y03"] analyses["EventShapes"]["BW"][172.0] = ["/ALEPH_2004_S5765862/d81-x01-y01","/DELPHI_1999_I499183/d33-x01-y03", "/OPAL_2000_I513476/d10-x01-y01"] analyses["EventShapes"]["BW"][172.3] = ["/L3_2004_I652683/d39-x01-y01"] analyses["EventShapes"]["BW"][177.0] = ["/OPAL_2004_S6132243/d05-x01-y03"] analyses["EventShapes"]["BW"][182.8] = ["/L3_2004_I652683/d39-x01-y02"] analyses["EventShapes"]["BW"][183.0] = ["/DELPHI_2003_I620250/d46-x01-y01","/ALEPH_2004_S5765862/d82-x01-y01", "/DELPHI_1999_I499183/d34-x01-y01","/OPAL_2000_I513476/d10-x01-y02"] analyses["EventShapes"]["BW"][188.6] = ["/L3_2004_I652683/d39-x01-y03"] analyses["EventShapes"]["BW"][189.0] = ["/DELPHI_2003_I620250/d46-x01-y02","/ALEPH_2004_S5765862/d83-x01-y01", "/OPAL_2000_I513476/d10-x01-y03"] analyses["EventShapes"]["BW"][192.0] = ["/DELPHI_2003_I620250/d46-x01-y03"] analyses["EventShapes"]["BW"][194.4] = ["/L3_2004_I652683/d40-x01-y01"] analyses["EventShapes"]["BW"][196.0] = ["/DELPHI_2003_I620250/d46-x01-y04"] analyses["EventShapes"]["BW"][197.0] = ["/OPAL_2004_S6132243/d05-x01-y04"] analyses["EventShapes"]["BW"][200.0] = ["/DELPHI_2003_I620250/d47-x01-y01","/ALEPH_2004_S5765862/d84-x01-y01"] analyses["EventShapes"]["BW"][200.2] = ["/L3_2004_I652683/d40-x01-y02"] analyses["EventShapes"]["BW"][202.0] = ["/DELPHI_2003_I620250/d47-x01-y02"] analyses["EventShapes"]["BW"][205.0] = ["/DELPHI_2003_I620250/d47-x01-y03"] analyses["EventShapes"]["BW"][206.0] = ["/ALEPH_2004_S5765862/d85-x01-y01"] analyses["EventShapes"]["BW"][206.2] = ["/L3_2004_I652683/d40-x01-y03"] analyses["EventShapes"]["BW"][207.0] = ["/DELPHI_2003_I620250/d47-x01-y04"] # narrow analyses["EventShapes"]["BN"][45.0 ] = ["/DELPHI_2003_I620250/d14-x01-y01"] analyses["EventShapes"]["BN"][66.0 ] = ["/DELPHI_2003_I620250/d14-x01-y02"] analyses["EventShapes"]["BN"][76.0 ] = ["/DELPHI_2003_I620250/d14-x01-y03"] analyses["EventShapes"]["BN"][91.2 ] = ["/DELPHI_1996_S3430090/d24-x01-y01","/OPAL_2004_S6132243/d13-x01-y01"] analyses["EventShapes"]["BN"][133.0] = ["/OPAL_2004_S6132243/d13-x01-y02","/DELPHI_1999_I499183/d35-x01-y01"] analyses["EventShapes"]["BN"][161.0] = ["/DELPHI_1999_I499183/d35-x01-y02"] analyses["EventShapes"]["BN"][172.0] = ["/DELPHI_1999_I499183/d35-x01-y03"] analyses["EventShapes"]["BN"][177.0] = ["/OPAL_2004_S6132243/d13-x01-y03"] analyses["EventShapes"]["BN"][183.0] = ["/DELPHI_1999_I499183/d36-x01-y01"] analyses["EventShapes"]["BN"][197.0] = ["/OPAL_2004_S6132243/d13-x01-y04"] # total analyses["EventShapes"]["BT"][35.0 ] = ["/JADE_1998_S3612880/d08-x01-y01"] analyses["EventShapes"]["BT"][41.4 ] = ["/L3_2004_I652683/d31-x01-y01"] analyses["EventShapes"]["BT"][44.0 ] = ["/JADE_1998_S3612880/d04-x01-y01"] analyses["EventShapes"]["BT"][45.0 ] = ["/DELPHI_2003_I620250/d15-x01-y01"] analyses["EventShapes"]["BT"][55.3 ] = ["/L3_2004_I652683/d31-x01-y02"] analyses["EventShapes"]["BT"][65.4 ] = ["/L3_2004_I652683/d31-x01-y03"] analyses["EventShapes"]["BT"][66.0 ] = ["/DELPHI_2003_I620250/d15-x01-y02"] analyses["EventShapes"]["BT"][75.7 ] = ["/L3_2004_I652683/d32-x01-y01"] analyses["EventShapes"]["BT"][76.0 ] = ["/DELPHI_2003_I620250/d15-x01-y03"] analyses["EventShapes"]["BT"][82.3 ] = ["/L3_2004_I652683/d32-x01-y02"] analyses["EventShapes"]["BT"][85.1 ] = ["/L3_2004_I652683/d32-x01-y03"] analyses["EventShapes"]["BT"][91.2 ] = ["/DELPHI_1996_S3430090/d25-x01-y01","/OPAL_2004_S6132243/d04-x01-y01", "/ALEPH_2004_S5765862/d70-x01-y01"] analyses["EventShapes"]["BT"][130.1] = ["/L3_2004_I652683/d33-x01-y01"] analyses["EventShapes"]["BT"][133.0] = ["/OPAL_2004_S6132243/d04-x01-y02","/ALEPH_2004_S5765862/d71-x01-y01", "/DELPHI_1999_I499183/d37-x01-y01"] analyses["EventShapes"]["BT"][136.3] = ["/L3_2004_I652683/d33-x01-y02"] analyses["EventShapes"]["BT"][161.0] = ["/ALEPH_2004_S5765862/d72-x01-y01","/DELPHI_1999_I499183/d37-x01-y02", "/OPAL_1997_I440721/d11-x01-y01"] analyses["EventShapes"]["BT"][161.3] = ["/L3_2004_I652683/d33-x01-y03"] analyses["EventShapes"]["BT"][172.0] = ["/ALEPH_2004_S5765862/d73-x01-y01","/DELPHI_1999_I499183/d37-x01-y03", "/OPAL_2000_I513476/d09-x01-y01"] analyses["EventShapes"]["BT"][172.3] = ["/L3_2004_I652683/d34-x01-y01"] analyses["EventShapes"]["BT"][177.0] = ["/OPAL_2004_S6132243/d04-x01-y03"] analyses["EventShapes"]["BT"][182.8] = ["/L3_2004_I652683/d34-x01-y02"] analyses["EventShapes"]["BT"][183.0] = ["/DELPHI_2003_I620250/d48-x01-y01","/ALEPH_2004_S5765862/d74-x01-y01", "/DELPHI_1999_I499183/d38-x01-y01","/OPAL_2000_I513476/d09-x01-y02"] analyses["EventShapes"]["BT"][188.6] = ["/L3_2004_I652683/d34-x01-y03"] analyses["EventShapes"]["BT"][189.0] = ["/DELPHI_2003_I620250/d48-x01-y02","/ALEPH_2004_S5765862/d75-x01-y01", "/OPAL_2000_I513476/d09-x01-y03"] analyses["EventShapes"]["BT"][192.0] = ["/DELPHI_2003_I620250/d48-x01-y03"] analyses["EventShapes"]["BT"][194.4] = ["/L3_2004_I652683/d35-x01-y01"] analyses["EventShapes"]["BT"][196.0] = ["/DELPHI_2003_I620250/d48-x01-y04"] analyses["EventShapes"]["BT"][197.0] = ["/OPAL_2004_S6132243/d04-x01-y04"] analyses["EventShapes"]["BT"][200.0] = ["/DELPHI_2003_I620250/d49-x01-y01","/ALEPH_2004_S5765862/d76-x01-y01"] analyses["EventShapes"]["BT"][200.2] = ["/L3_2004_I652683/d35-x01-y02"] analyses["EventShapes"]["BT"][202.0] = ["/DELPHI_2003_I620250/d49-x01-y02"] analyses["EventShapes"]["BT"][205.0] = ["/DELPHI_2003_I620250/d49-x01-y03"] analyses["EventShapes"]["BT"][206.0] = ["/ALEPH_2004_S5765862/d77-x01-y01"] analyses["EventShapes"]["BT"][206.2] = ["/L3_2004_I652683/d35-x01-y03"] analyses["EventShapes"]["BT"][207.0] = ["/DELPHI_2003_I620250/d49-x01-y04"] # difference analyses["EventShapes"]["Bdiff"][45.0 ] = ["/DELPHI_2003_I620250/d16-x01-y01"] analyses["EventShapes"]["Bdiff"][66.0 ] = ["/DELPHI_2003_I620250/d16-x01-y02"] analyses["EventShapes"]["Bdiff"][76.0 ] = ["/DELPHI_2003_I620250/d16-x01-y03"] analyses["EventShapes"]["Bdiff"][91.2 ] = ["/DELPHI_1996_S3430090/d26-x01-y01"] analyses["EventShapes"]["Bdiff"][133.0] = ["/DELPHI_1999_I499183/d39-x01-y01"] analyses["EventShapes"]["Bdiff"][161.0] = ["/DELPHI_1999_I499183/d39-x01-y02"] analyses["EventShapes"]["Bdiff"][172.0] = ["/DELPHI_1999_I499183/d39-x01-y03"] analyses["EventShapes"]["Bdiff"][183.0] = ["/DELPHI_2003_I620250/d50-x01-y01","/DELPHI_1999_I499183/d40-x01-y01"] analyses["EventShapes"]["Bdiff"][189.0] = ["/DELPHI_2003_I620250/d50-x01-y02"] analyses["EventShapes"]["Bdiff"][192.0] = ["/DELPHI_2003_I620250/d50-x01-y03"] analyses["EventShapes"]["Bdiff"][196.0] = ["/DELPHI_2003_I620250/d50-x01-y04"] analyses["EventShapes"]["Bdiff"][200.0] = ["/DELPHI_2003_I620250/d51-x01-y01"] analyses["EventShapes"]["Bdiff"][202.0] = ["/DELPHI_2003_I620250/d51-x01-y02"] analyses["EventShapes"]["Bdiff"][205.0] = ["/DELPHI_2003_I620250/d51-x01-y03"] analyses["EventShapes"]["Bdiff"][207.0] = ["/DELPHI_2003_I620250/d51-x01-y04"] # C and D analyses["EventShapes"]["C"][45.0 ] = ["/DELPHI_2003_I620250/d17-x01-y01"] analyses["EventShapes"]["C"][66.0 ] = ["/DELPHI_2003_I620250/d17-x01-y02"] analyses["EventShapes"]["C"][76.0 ] = ["/DELPHI_2003_I620250/d17-x01-y03"] analyses["EventShapes"]["C"][91.2 ] = ["/DELPHI_1996_S3430090/d18-x01-y01","/ALEPH_1996_S3486095/d07-x01-y01", "/ALEPH_2004_S5765862/d86-x01-y01","/OPAL_2004_S6132243/d03-x01-y01"] analyses["EventShapes"]["C"][133.0] = ["/OPAL_2004_S6132243/d03-x01-y02","/ALEPH_2004_S5765862/d87-x01-y01", "/DELPHI_1999_I499183/d41-x01-y01"] analyses["EventShapes"]["C"][161.0] = ["/ALEPH_2004_S5765862/d88-x01-y01","/DELPHI_1999_I499183/d41-x01-y02", "/OPAL_1997_I440721/d09-x01-y01"] analyses["EventShapes"]["C"][172.0] = ["/ALEPH_2004_S5765862/d89-x01-y01","/DELPHI_1999_I499183/d41-x01-y03", "/OPAL_2000_I513476/d06-x01-y01"] analyses["EventShapes"]["C"][177.0] = ["/OPAL_2004_S6132243/d03-x01-y03"] analyses["EventShapes"]["C"][183.0] = ["/DELPHI_2003_I620250/d52-x01-y01","/ALEPH_2004_S5765862/d90-x01-y01", "/DELPHI_1999_I499183/d42-x01-y01","/OPAL_2000_I513476/d06-x01-y02"] analyses["EventShapes"]["C"][189.0] = ["/DELPHI_2003_I620250/d52-x01-y02","/ALEPH_2004_S5765862/d91-x01-y01", "/OPAL_2000_I513476/d06-x01-y03"] analyses["EventShapes"]["C"][192.0] = ["/DELPHI_2003_I620250/d52-x01-y03"] analyses["EventShapes"]["C"][196.0] = ["/DELPHI_2003_I620250/d52-x01-y04"] analyses["EventShapes"]["C"][197.0] = ["/OPAL_2004_S6132243/d03-x01-y04"] analyses["EventShapes"]["C"][200.0] = ["/DELPHI_2003_I620250/d53-x01-y01","/ALEPH_2004_S5765862/d92-x01-y01"] analyses["EventShapes"]["C"][202.0] = ["/DELPHI_2003_I620250/d53-x01-y02"] analyses["EventShapes"]["C"][205.0] = ["/DELPHI_2003_I620250/d53-x01-y03"] analyses["EventShapes"]["C"][206.0] = ["/ALEPH_2004_S5765862/d93-x01-y01"] analyses["EventShapes"]["C"][207.0] = ["/DELPHI_2003_I620250/d53-x01-y04"] analyses["EventShapes"]["C"][130.1] = ["/L3_2004_I652683/d41-x01-y01"] analyses["EventShapes"]["C"][136.3] = ["/L3_2004_I652683/d41-x01-y02"] analyses["EventShapes"]["C"][161.3] = ["/L3_2004_I652683/d41-x01-y03"] analyses["EventShapes"]["C"][172.3] = ["/L3_2004_I652683/d42-x01-y01"] analyses["EventShapes"]["C"][182.8] = ["/L3_2004_I652683/d42-x01-y02"] analyses["EventShapes"]["C"][188.6] = ["/L3_2004_I652683/d42-x01-y03"] analyses["EventShapes"]["C"][194.4] = ["/L3_2004_I652683/d43-x01-y01"] analyses["EventShapes"]["C"][200.2] = ["/L3_2004_I652683/d43-x01-y02"] analyses["EventShapes"]["C"][206.2] = ["/L3_2004_I652683/d43-x01-y03"] # D parameter analyses["EventShapes"]["D"][91.2 ] = ["/DELPHI_1996_S3430090/d19-x01-y01","/OPAL_2004_S6132243/d14-x01-y01"] analyses["EventShapes"]["D"][130.1] = ["/L3_2004_I652683/d44-x01-y01"] analyses["EventShapes"]["D"][133.0] = ["/OPAL_2004_S6132243/d14-x01-y02","/DELPHI_1999_I499183/d43-x01-y01"] analyses["EventShapes"]["D"][136.3] = ["/L3_2004_I652683/d44-x01-y02"] analyses["EventShapes"]["D"][161.0] = ["/DELPHI_1999_I499183/d43-x01-y02"] analyses["EventShapes"]["D"][161.3] = ["/L3_2004_I652683/d44-x01-y03"] analyses["EventShapes"]["D"][172.0] = ["/DELPHI_1999_I499183/d43-x01-y03"] analyses["EventShapes"]["D"][172.3] = ["/L3_2004_I652683/d45-x01-y01"] analyses["EventShapes"]["D"][177.0] = ["/OPAL_2004_S6132243/d14-x01-y03"] analyses["EventShapes"]["D"][182.8] = ["/L3_2004_I652683/d45-x01-y02"] analyses["EventShapes"]["D"][183.0] = ["/DELPHI_2003_I620250/d54-x01-y01","/DELPHI_1999_I499183/d44-x01-y01"] analyses["EventShapes"]["D"][188.6] = ["/L3_2004_I652683/d45-x01-y03"] analyses["EventShapes"]["D"][189.0] = ["/DELPHI_2003_I620250/d54-x01-y02"] analyses["EventShapes"]["D"][192.0] = ["/DELPHI_2003_I620250/d54-x01-y03"] analyses["EventShapes"]["D"][194.4] = ["/L3_2004_I652683/d46-x01-y01"] analyses["EventShapes"]["D"][196.0] = ["/DELPHI_2003_I620250/d54-x01-y04"] analyses["EventShapes"]["D"][197.0] = ["/OPAL_2004_S6132243/d14-x01-y04"] analyses["EventShapes"]["D"][200.0] = ["/DELPHI_2003_I620250/d55-x01-y01"] analyses["EventShapes"]["D"][200.2] = ["/L3_2004_I652683/d46-x01-y02"] analyses["EventShapes"]["D"][202.0] = ["/DELPHI_2003_I620250/d55-x01-y02"] analyses["EventShapes"]["D"][205.0] = ["/DELPHI_2003_I620250/d55-x01-y03"] analyses["EventShapes"]["D"][206.2] = ["/L3_2004_I652683/d46-x01-y03"] analyses["EventShapes"]["D"][207.0] = ["/DELPHI_2003_I620250/d55-x01-y04"] # hemispheres # heavy jet mass analyses["EventShapes"]["HeavyJetMass"][14.0 ] = ["/TASSO_1989_I279165/d02-x01-y01"] analyses["EventShapes"]["HeavyJetMass"][22.0 ] = ["/TASSO_1989_I279165/d02-x01-y02"] analyses["EventShapes"]["HeavyJetMass"][34.8 ] = ["/TASSO_1989_I279165/d02-x01-y03"] analyses["EventShapes"]["HeavyJetMass"][35.0 ] = ["/JADE_1998_S3612880/d07-x01-y01"] analyses["EventShapes"]["HeavyJetMass"][41.4 ] = ["/L3_2004_I652683/d26-x01-y01"] analyses["EventShapes"]["HeavyJetMass"][43.5 ] = ["/TASSO_1989_I279165/d02-x01-y04"] analyses["EventShapes"]["HeavyJetMass"][44.0 ] = ["/JADE_1998_S3612880/d03-x01-y01"] analyses["EventShapes"]["HeavyJetMass"][45.0 ] = ["/DELPHI_2003_I620250/d07-x01-y01","/DELPHI_2003_I620250/d08-x01-y01"] analyses["EventShapes"]["HeavyJetMass"][55.2 ] = ["/AMY_1990_I283337/d21-x01-y01"] analyses["EventShapes"]["HeavyJetMass"][55.3 ] = ["/L3_2004_I652683/d26-x01-y02"] analyses["EventShapes"]["HeavyJetMass"][58.0 ] = ["/TOPAZ_1993_I361661/d02-x01-y01"] analyses["EventShapes"]["HeavyJetMass"][65.4 ] = ["/L3_2004_I652683/d26-x01-y03"] analyses["EventShapes"]["HeavyJetMass"][66.0 ] = ["/DELPHI_2003_I620250/d07-x01-y02","/DELPHI_2003_I620250/d08-x01-y02"] analyses["EventShapes"]["HeavyJetMass"][75.7 ] = ["/L3_2004_I652683/d27-x01-y01"] analyses["EventShapes"]["HeavyJetMass"][76.0 ] = ["/DELPHI_2003_I620250/d07-x01-y03","/DELPHI_2003_I620250/d08-x01-y03"] analyses["EventShapes"]["HeavyJetMass"][82.3 ] = ["/L3_2004_I652683/d27-x01-y02"] analyses["EventShapes"]["HeavyJetMass"][85.1 ] = ["/L3_2004_I652683/d27-x01-y03"] analyses["EventShapes"]["HeavyJetMass"][91.2 ] = ["/DELPHI_1996_S3430090/d20-x01-y01","/ALEPH_1996_S3486095/d06-x01-y01", "/OPAL_2004_S6132243/d02-x01-y01","/ALEPH_2004_S5765862/d62-x01-y01"] analyses["EventShapes"]["HeavyJetMass"][130.1] = ["/L3_2004_I652683/d28-x01-y01"] analyses["EventShapes"]["HeavyJetMass"][133.0] = ["/OPAL_2004_S6132243/d02-x01-y02","/ALEPH_2004_S5765862/d63-x01-y01", "/DELPHI_1999_I499183/d27-x01-y01"] analyses["EventShapes"]["HeavyJetMass"][136.3] = ["/L3_2004_I652683/d28-x01-y02"] analyses["EventShapes"]["HeavyJetMass"][161.0] = ["/ALEPH_2004_S5765862/d64-x01-y01","/DELPHI_1999_I499183/d27-x01-y02", "/OPAL_1997_I440721/d10-x01-y01"] analyses["EventShapes"]["HeavyJetMass"][161.3] = ["/L3_2004_I652683/d28-x01-y03"] analyses["EventShapes"]["HeavyJetMass"][172.0] = ["/ALEPH_2004_S5765862/d65-x01-y01","/DELPHI_1999_I499183/d27-x01-y03", "/OPAL_2000_I513476/d07-x01-y01"] analyses["EventShapes"]["HeavyJetMass"][172.3] = ["/L3_2004_I652683/d29-x01-y01"] analyses["EventShapes"]["HeavyJetMass"][177.0] = ["/OPAL_2004_S6132243/d02-x01-y03"] analyses["EventShapes"]["HeavyJetMass"][182.8] = ["/L3_2004_I652683/d29-x01-y02"] analyses["EventShapes"]["HeavyJetMass"][183.0] = ["/DELPHI_2003_I620250/d56-x01-y01","/DELPHI_2003_I620250/d58-x01-y01", "/DELPHI_2003_I620250/d60-x01-y01","/ALEPH_2004_S5765862/d66-x01-y01", "/DELPHI_1999_I499183/d28-x01-y01","/OPAL_2000_I513476/d07-x01-y02"] analyses["EventShapes"]["HeavyJetMass"][188.6] = ["/L3_2004_I652683/d29-x01-y03"] analyses["EventShapes"]["HeavyJetMass"][189.0] = ["/DELPHI_2003_I620250/d56-x01-y02","/DELPHI_2003_I620250/d58-x01-y02", "/DELPHI_2003_I620250/d60-x01-y02","/ALEPH_2004_S5765862/d67-x01-y01", "/OPAL_2000_I513476/d07-x01-y03"] analyses["EventShapes"]["HeavyJetMass"][192.0] = ["/DELPHI_2003_I620250/d56-x01-y03","/DELPHI_2003_I620250/d58-x01-y03", "/DELPHI_2003_I620250/d60-x01-y03"] analyses["EventShapes"]["HeavyJetMass"][194.4] = ["/L3_2004_I652683/d30-x01-y01"] analyses["EventShapes"]["HeavyJetMass"][196.0] = ["/DELPHI_2003_I620250/d56-x01-y04","/DELPHI_2003_I620250/d58-x01-y04", "/DELPHI_2003_I620250/d60-x01-y04"] analyses["EventShapes"]["HeavyJetMass"][197.0] = ["/OPAL_2004_S6132243/d02-x01-y04"] analyses["EventShapes"]["HeavyJetMass"][200.0] = ["/DELPHI_2003_I620250/d57-x01-y01","/DELPHI_2003_I620250/d59-x01-y01", "/DELPHI_2003_I620250/d61-x01-y01","/ALEPH_2004_S5765862/d68-x01-y01"] analyses["EventShapes"]["HeavyJetMass"][200.2] = ["/L3_2004_I652683/d30-x01-y02"] analyses["EventShapes"]["HeavyJetMass"][202.0] = ["/DELPHI_2003_I620250/d57-x01-y02","/DELPHI_2003_I620250/d59-x01-y02", "/DELPHI_2003_I620250/d61-x01-y02"] analyses["EventShapes"]["HeavyJetMass"][205.0] = ["/DELPHI_2003_I620250/d57-x01-y03","/DELPHI_2003_I620250/d59-x01-y03", "/DELPHI_2003_I620250/d61-x01-y03"] analyses["EventShapes"]["HeavyJetMass"][206.0] = ["/ALEPH_2004_S5765862/d69-x01-y01"] analyses["EventShapes"]["HeavyJetMass"][206.2] = ["/L3_2004_I652683/d30-x01-y03"] analyses["EventShapes"]["HeavyJetMass"][207.0] = ["/DELPHI_2003_I620250/d57-x01-y04","/DELPHI_2003_I620250/d59-x01-y04", "/DELPHI_2003_I620250/d61-x01-y04"] # jet mass difference analyses["EventShapes"]["JetMassDifference"][14.0 ] = ["/TASSO_1989_I279165/d01-x01-y01"] analyses["EventShapes"]["JetMassDifference"][22.0 ] = ["/TASSO_1989_I279165/d01-x01-y02"] analyses["EventShapes"]["JetMassDifference"][34.8 ] = ["/TASSO_1989_I279165/d01-x01-y03"] analyses["EventShapes"]["JetMassDifference"][43.5 ] = ["/TASSO_1989_I279165/d01-x01-y04"] analyses["EventShapes"]["JetMassDifference"][45.0 ] = ["/DELPHI_2003_I620250/d10-x01-y01"] analyses["EventShapes"]["JetMassDifference"][55.2 ] = ["/AMY_1990_I283337/d22-x01-y01"] analyses["EventShapes"]["JetMassDifference"][66.0 ] = ["/DELPHI_2003_I620250/d10-x01-y02"] analyses["EventShapes"]["JetMassDifference"][76.0 ] = ["/DELPHI_2003_I620250/d10-x01-y03"] analyses["EventShapes"]["JetMassDifference"][91.2 ] = ["/DELPHI_1996_S3430090/d22-x01-y01","/ALEPH_2004_S5765862/d110-x01-y01"] analyses["EventShapes"]["JetMassDifference"][133.0] = ["/ALEPH_2004_S5765862/d111-x01-y01","/DELPHI_1999_I499183/d31-x01-y01"] analyses["EventShapes"]["JetMassDifference"][161.0] = ["/ALEPH_2004_S5765862/d112-x01-y01","/DELPHI_1999_I499183/d31-x01-y02"] analyses["EventShapes"]["JetMassDifference"][172.0] = ["/ALEPH_2004_S5765862/d113-x01-y01","/DELPHI_1999_I499183/d31-x01-y03"] analyses["EventShapes"]["JetMassDifference"][183.0] = ["/DELPHI_2003_I620250/d64-x01-y01","/ALEPH_2004_S5765862/d114-x01-y01", "/DELPHI_1999_I499183/d32-x01-y01"] analyses["EventShapes"]["JetMassDifference"][189.0] = ["/DELPHI_2003_I620250/d64-x01-y02","/ALEPH_2004_S5765862/d115-x01-y01"] analyses["EventShapes"]["JetMassDifference"][192.0] = ["/DELPHI_2003_I620250/d64-x01-y03"] analyses["EventShapes"]["JetMassDifference"][196.0] = ["/DELPHI_2003_I620250/d64-x01-y04"] analyses["EventShapes"]["JetMassDifference"][200.0] = ["/DELPHI_2003_I620250/d65-x01-y01","/ALEPH_2004_S5765862/d116-x01-y01"] analyses["EventShapes"]["JetMassDifference"][202.0] = ["/DELPHI_2003_I620250/d65-x01-y02"] analyses["EventShapes"]["JetMassDifference"][205.0] = ["/DELPHI_2003_I620250/d65-x01-y03"] analyses["EventShapes"]["JetMassDifference"][206.0] = ["/ALEPH_2004_S5765862/d117-x01-y01"] analyses["EventShapes"]["JetMassDifference"][207.0] = ["/DELPHI_2003_I620250/d65-x01-y04"] # light jet mass analyses["EventShapes"]["LightJetMass"][14.0 ] = ["/TASSO_1989_I279165/d03-x01-y01"] analyses["EventShapes"]["LightJetMass"][22.0 ] = ["/TASSO_1989_I279165/d03-x01-y02"] analyses["EventShapes"]["LightJetMass"][34.8 ] = ["/TASSO_1989_I279165/d03-x01-y03"] analyses["EventShapes"]["LightJetMass"][43.5 ] = ["/TASSO_1989_I279165/d03-x01-y04"] analyses["EventShapes"]["LightJetMass"][45.0 ] = ["/DELPHI_2003_I620250/d09-x01-y01"] analyses["EventShapes"]["LightJetMass"][55.2 ] = ["/AMY_1990_I283337/d20-x01-y01"] analyses["EventShapes"]["LightJetMass"][66.0 ] = ["/DELPHI_2003_I620250/d09-x01-y02"] analyses["EventShapes"]["LightJetMass"][76.0 ] = ["/DELPHI_2003_I620250/d09-x01-y03"] analyses["EventShapes"]["LightJetMass"][91.2 ] = ["/DELPHI_1996_S3430090/d21-x01-y01","/OPAL_2004_S6132243/d12-x01-y01"] analyses["EventShapes"]["LightJetMass"][133.0] = ["/OPAL_2004_S6132243/d12-x01-y02","/DELPHI_1999_I499183/d29-x01-y01"] analyses["EventShapes"]["LightJetMass"][161.0] = ["/DELPHI_1999_I499183/d29-x01-y02"] analyses["EventShapes"]["LightJetMass"][172.0] = ["/DELPHI_1999_I499183/d29-x01-y03"] analyses["EventShapes"]["LightJetMass"][177.0] = ["/OPAL_2004_S6132243/d12-x01-y03"] analyses["EventShapes"]["LightJetMass"][183.0] = ["/DELPHI_2003_I620250/d62-x01-y01","/DELPHI_1999_I499183/d30-x01-y01"] analyses["EventShapes"]["LightJetMass"][189.0] = ["/DELPHI_2003_I620250/d62-x01-y02"] analyses["EventShapes"]["LightJetMass"][192.0] = ["/DELPHI_2003_I620250/d62-x01-y03"] analyses["EventShapes"]["LightJetMass"][196.0] = ["/DELPHI_2003_I620250/d62-x01-y04"] analyses["EventShapes"]["LightJetMass"][197.0] = ["/OPAL_2004_S6132243/d12-x01-y04"] analyses["EventShapes"]["LightJetMass"][200.0] = ["/DELPHI_2003_I620250/d63-x01-y01"] analyses["EventShapes"]["LightJetMass"][202.0] = ["/DELPHI_2003_I620250/d63-x01-y02"] analyses["EventShapes"]["LightJetMass"][205.0] = ["/DELPHI_2003_I620250/d63-x01-y03"] analyses["EventShapes"]["LightJetMass"][207.0] = ["/DELPHI_2003_I620250/d63-x01-y04"] # total jet mass analyses["EventShapes"]["TotalJetMass"][45.0 ] = ["/DELPHI_2003_I620250/d11-x01-y01","/DELPHI_2003_I620250/d12-x01-y01"] analyses["EventShapes"]["TotalJetMass"][66.0 ] = ["/DELPHI_2003_I620250/d11-x01-y02","/DELPHI_2003_I620250/d12-x01-y02"] analyses["EventShapes"]["TotalJetMass"][76.0 ] = ["/DELPHI_2003_I620250/d11-x01-y03","/DELPHI_2003_I620250/d12-x01-y03"] # jets # y12 analyses["EventShapes"]["y12_dur"][91.2 ] = ["/ALEPH_2004_S5765862/d149-x01-y01"] analyses["EventShapes"]["y12_dur"][133.0] = ["/ALEPH_2004_S5765862/d150-x01-y01"] analyses["EventShapes"]["y12_dur"][161.0] = ["/ALEPH_2004_S5765862/d151-x01-y01"] analyses["EventShapes"]["y12_dur"][172.0] = ["/ALEPH_2004_S5765862/d152-x01-y01"] analyses["EventShapes"]["y12_dur"][183.0] = ["/ALEPH_2004_S5765862/d153-x01-y01"] analyses["EventShapes"]["y12_dur"][189.0] = ["/ALEPH_2004_S5765862/d154-x01-y01"] analyses["EventShapes"]["y12_dur"][200.0] = ["/ALEPH_2004_S5765862/d155-x01-y01"] analyses["EventShapes"]["y12_dur"][206.0] = ["/ALEPH_2004_S5765862/d156-x01-y01"] # y23 analyses["EventShapes"]["y23_dur"][22.0 ] = ["/JADE_1998_S3612880/d12-x01-y01"] analyses["EventShapes"]["y23_dur"][35.0 ] = ["/JADE_OPAL_2000_S4300807/d24-x01-y01","/JADE_1998_S3612880/d11-x01-y01"] analyses["EventShapes"]["y23_dur"][44.0 ] = ["/JADE_OPAL_2000_S4300807/d25-x01-y01","/JADE_1998_S3612880/d10-x01-y01"] analyses["EventShapes"]["y23_dur"][58.0 ] = ["/TOPAZ_1993_I361661/d03-x01-y01"] analyses["EventShapes"]["y23_dur"][91.2 ] = ["/ALEPH_2004_S5765862/d157-x01-y01","/ALEPH_1996_S3486095/d05-x01-y01", "/OPAL_2004_S6132243/d06-x01-y01","/JADE_OPAL_2000_S4300807/d26-x01-y01", "/DELPHI_1996_S3430090/d27-x01-y01"] analyses["EventShapes"]["y23_dur"][133.0] = ["/ALEPH_2004_S5765862/d158-x01-y01","/OPAL_2004_S6132243/d06-x01-y02", "/JADE_OPAL_2000_S4300807/d27-x01-y01"] analyses["EventShapes"]["y23_dur"][161.0] = ["/ALEPH_2004_S5765862/d159-x01-y01","/JADE_OPAL_2000_S4300807/d28-x01-y01", "/OPAL_1997_I440721/d20-x01-y01"] analyses["EventShapes"]["y23_dur"][172.0] = ["/ALEPH_2004_S5765862/d160-x01-y01","/JADE_OPAL_2000_S4300807/d29-x01-y01", "/OPAL_2000_I513476/d11-x01-y01"] analyses["EventShapes"]["y23_dur"][177.0] = ["/OPAL_2004_S6132243/d06-x01-y03"] analyses["EventShapes"]["y23_dur"][183.0] = ["/ALEPH_2004_S5765862/d161-x01-y01","/JADE_OPAL_2000_S4300807/d30-x01-y01", "/OPAL_2000_I513476/d11-x01-y02"] analyses["EventShapes"]["y23_dur"][189.0] = ["/ALEPH_2004_S5765862/d162-x01-y01","/JADE_OPAL_2000_S4300807/d31-x01-y01", "/OPAL_2000_I513476/d11-x01-y03"] analyses["EventShapes"]["y23_dur"][197.0] = ["/OPAL_2004_S6132243/d06-x01-y04"] analyses["EventShapes"]["y23_dur"][200.0] = ["/ALEPH_2004_S5765862/d163-x01-y01"] analyses["EventShapes"]["y23_dur"][206.0] = ["/ALEPH_2004_S5765862/d164-x01-y01"] # y34 analyses["EventShapes"]["y34_dur"][35.0 ] = ["/JADE_OPAL_2000_S4300807/d24-x01-y02"] analyses["EventShapes"]["y34_dur"][44.0 ] = ["/JADE_OPAL_2000_S4300807/d25-x01-y02"] analyses["EventShapes"]["y34_dur"][91.2 ] = ["/ALEPH_2004_S5765862/d165-x01-y01","/JADE_OPAL_2000_S4300807/d26-x01-y02", "/DELPHI_1996_S3430090/d29-x01-y01"] analyses["EventShapes"]["y34_dur"][133.0] = ["/ALEPH_2004_S5765862/d166-x01-y01","/JADE_OPAL_2000_S4300807/d27-x01-y02"] analyses["EventShapes"]["y34_dur"][161.0] = ["/ALEPH_2004_S5765862/d167-x01-y01","/JADE_OPAL_2000_S4300807/d28-x01-y02"] analyses["EventShapes"]["y34_dur"][172.0] = ["/ALEPH_2004_S5765862/d168-x01-y01","/JADE_OPAL_2000_S4300807/d29-x01-y02"] analyses["EventShapes"]["y34_dur"][183.0] = ["/ALEPH_2004_S5765862/d169-x01-y01","/JADE_OPAL_2000_S4300807/d30-x01-y02"] analyses["EventShapes"]["y34_dur"][189.0] = ["/ALEPH_2004_S5765862/d170-x01-y01","/JADE_OPAL_2000_S4300807/d31-x01-y02"] analyses["EventShapes"]["y34_dur"][206.0] = ["/ALEPH_2004_S5765862/d172-x01-y01"] # y45 analyses["EventShapes"]["y45_dur"][35.0 ] = ["/JADE_OPAL_2000_S4300807/d24-x01-y03"] analyses["EventShapes"]["y45_dur"][44.0 ] = ["/JADE_OPAL_2000_S4300807/d25-x01-y03"] analyses["EventShapes"]["y45_dur"][91.2 ] = ["/ALEPH_2004_S5765862/d173-x01-y01","/JADE_OPAL_2000_S4300807/d26-x01-y03", "/DELPHI_1996_S3430090/d31-x01-y01"] analyses["EventShapes"]["y45_dur"][133.0] = ["/ALEPH_2004_S5765862/d174-x01-y01","/JADE_OPAL_2000_S4300807/d27-x01-y03"] analyses["EventShapes"]["y45_dur"][161.0] = ["/ALEPH_2004_S5765862/d175-x01-y01","/JADE_OPAL_2000_S4300807/d28-x01-y03"] analyses["EventShapes"]["y45_dur"][172.0] = ["/ALEPH_2004_S5765862/d176-x01-y01","/JADE_OPAL_2000_S4300807/d29-x01-y03"] analyses["EventShapes"]["y45_dur"][183.0] = ["/ALEPH_2004_S5765862/d177-x01-y01","/JADE_OPAL_2000_S4300807/d30-x01-y03"] analyses["EventShapes"]["y45_dur"][189.0] = ["/ALEPH_2004_S5765862/d178-x01-y01","/JADE_OPAL_2000_S4300807/d31-x01-y03"] analyses["EventShapes"]["y45_dur"][200.0] = ["/ALEPH_2004_S5765862/d179-x01-y01"] # y56 analyses["EventShapes"]["y56_dur"][35.0 ] = ["/JADE_OPAL_2000_S4300807/d24-x01-y04"] analyses["EventShapes"]["y56_dur"][44.0 ] = ["/JADE_OPAL_2000_S4300807/d25-x01-y04"] analyses["EventShapes"]["y56_dur"][91.2 ] = ["/ALEPH_2004_S5765862/d180-x01-y01","/JADE_OPAL_2000_S4300807/d26-x01-y04"] analyses["EventShapes"]["y56_dur"][133.0] = ["/ALEPH_2004_S5765862/d181-x01-y01","/JADE_OPAL_2000_S4300807/d27-x01-y04"] analyses["EventShapes"]["y56_dur"][161.0] = ["/ALEPH_2004_S5765862/d182-x01-y01","/JADE_OPAL_2000_S4300807/d28-x01-y04"] analyses["EventShapes"]["y56_dur"][172.0] = ["/ALEPH_2004_S5765862/d183-x01-y01","/JADE_OPAL_2000_S4300807/d29-x01-y04"] analyses["EventShapes"]["y56_dur"][183.0] = ["/ALEPH_2004_S5765862/d184-x01-y01","/JADE_OPAL_2000_S4300807/d30-x01-y04"] analyses["EventShapes"]["y56_dur"][189.0] = ["/ALEPH_2004_S5765862/d185-x01-y01","/JADE_OPAL_2000_S4300807/d31-x01-y04"] analyses["EventShapes"]["y56_dur"][200.0] = ["/ALEPH_2004_S5765862/d186-x01-y01"] # jade scheme analyses["EventShapes"]["y23_jade"][57.7 ] = ["/AMY_1995_I406129/d02-x01-y01","/AMY_1995_I406129/d03-x01-y01", "/AMY_1995_I406129/d04-x01-y01","/AMY_1995_I406129/d06-x01-y01"] analyses["EventShapes"]["y23_jade"][91.2 ] = ["/DELPHI_1996_S3430090/d28-x01-y01"] analyses["EventShapes"]["y34_jade"][91.2 ] = ["/DELPHI_1996_S3430090/d30-x01-y01"] analyses["EventShapes"]["y45_jade"][91.2 ] = ["/DELPHI_1996_S3430090/d32-x01-y01"] # jet fractions # 1 jet analyses["EventShapes"]["1jet_dur"][91.2 ] = ["/ALEPH_2004_S5765862/d187-x01-y01"] analyses["EventShapes"]["1jet_dur"][133.0] = ["/ALEPH_2004_S5765862/d188-x01-y01"] analyses["EventShapes"]["1jet_dur"][161.0] = ["/ALEPH_2004_S5765862/d189-x01-y01"] analyses["EventShapes"]["1jet_dur"][172.0] = ["/ALEPH_2004_S5765862/d190-x01-y01"] analyses["EventShapes"]["1jet_dur"][183.0] = ["/ALEPH_2004_S5765862/d191-x01-y01"] analyses["EventShapes"]["1jet_dur"][189.0] = ["/ALEPH_2004_S5765862/d192-x01-y01"] analyses["EventShapes"]["1jet_dur"][200.0] = ["/ALEPH_2004_S5765862/d193-x01-y01"] analyses["EventShapes"]["1jet_dur"][206.0] = ["/ALEPH_2004_S5765862/d194-x01-y01"] # 2 jet analyses["EventShapes"]["2jet_dur"][35.0 ] = ["/JADE_OPAL_2000_S4300807/d16-x01-y01"] analyses["EventShapes"]["2jet_dur"][44.0 ] = ["/JADE_OPAL_2000_S4300807/d17-x01-y01"] analyses["EventShapes"]["2jet_dur"][91.2 ] = ["/ALEPH_2004_S5765862/d195-x01-y01","/JADE_OPAL_2000_S4300807/d18-x01-y01"] analyses["EventShapes"]["2jet_dur"][133.0] = ["/ALEPH_2004_S5765862/d196-x01-y01","/JADE_OPAL_2000_S4300807/d19-x01-y01"] analyses["EventShapes"]["2jet_dur"][161.0] = ["/ALEPH_2004_S5765862/d197-x01-y01","/JADE_OPAL_2000_S4300807/d20-x01-y01"] analyses["EventShapes"]["2jet_dur"][172.0] = ["/ALEPH_2004_S5765862/d198-x01-y01","/JADE_OPAL_2000_S4300807/d21-x01-y01"] analyses["EventShapes"]["2jet_dur"][183.0] = ["/ALEPH_2004_S5765862/d199-x01-y01","/JADE_OPAL_2000_S4300807/d22-x01-y01"] analyses["EventShapes"]["2jet_dur"][189.0] = ["/ALEPH_2004_S5765862/d200-x01-y01","/JADE_OPAL_2000_S4300807/d23-x01-y01"] analyses["EventShapes"]["2jet_dur"][200.0] = ["/ALEPH_2004_S5765862/d201-x01-y01"] analyses["EventShapes"]["2jet_dur"][206.0] = ["/ALEPH_2004_S5765862/d202-x01-y01"] # 3 jet analyses["EventShapes"]["3jet_dur"][35.0 ] = ["/JADE_OPAL_2000_S4300807/d16-x01-y02"] analyses["EventShapes"]["3jet_dur"][44.0 ] = ["/JADE_OPAL_2000_S4300807/d17-x01-y02"] analyses["EventShapes"]["3jet_dur"][91.2 ] = ["/ALEPH_2004_S5765862/d203-x01-y01","/JADE_OPAL_2000_S4300807/d18-x01-y02"] analyses["EventShapes"]["3jet_dur"][133.0] = ["/ALEPH_2004_S5765862/d204-x01-y01","/JADE_OPAL_2000_S4300807/d19-x01-y02"] analyses["EventShapes"]["3jet_dur"][161.0] = ["/ALEPH_2004_S5765862/d205-x01-y01","/JADE_OPAL_2000_S4300807/d20-x01-y02"] analyses["EventShapes"]["3jet_dur"][172.0] = ["/ALEPH_2004_S5765862/d206-x01-y01","/JADE_OPAL_2000_S4300807/d21-x01-y02"] analyses["EventShapes"]["3jet_dur"][183.0] = ["/ALEPH_2004_S5765862/d207-x01-y01","/JADE_OPAL_2000_S4300807/d22-x01-y02"] analyses["EventShapes"]["3jet_dur"][189.0] = ["/ALEPH_2004_S5765862/d208-x01-y01","/JADE_OPAL_2000_S4300807/d23-x01-y02"] analyses["EventShapes"]["3jet_dur"][200.0] = ["/ALEPH_2004_S5765862/d209-x01-y01"] analyses["EventShapes"]["3jet_dur"][206.0] = ["/ALEPH_2004_S5765862/d210-x01-y01"] # 4 jet analyses["EventShapes"]["4jet_dur"][35.0 ] = ["/JADE_OPAL_2000_S4300807/d16-x01-y03"] analyses["EventShapes"]["4jet_dur"][44.0 ] = ["/JADE_OPAL_2000_S4300807/d17-x01-y03"] analyses["EventShapes"]["4jet_dur"][91.2 ] = ["/ALEPH_2004_S5765862/d211-x01-y01","/JADE_OPAL_2000_S4300807/d18-x01-y03"] analyses["EventShapes"]["4jet_dur"][133.0] = ["/ALEPH_2004_S5765862/d212-x01-y01","/JADE_OPAL_2000_S4300807/d19-x01-y03"] analyses["EventShapes"]["4jet_dur"][161.0] = ["/ALEPH_2004_S5765862/d213-x01-y01","/JADE_OPAL_2000_S4300807/d20-x01-y03"] analyses["EventShapes"]["4jet_dur"][172.0] = ["/ALEPH_2004_S5765862/d214-x01-y01","/JADE_OPAL_2000_S4300807/d21-x01-y03"] analyses["EventShapes"]["4jet_dur"][183.0] = ["/ALEPH_2004_S5765862/d215-x01-y01","/JADE_OPAL_2000_S4300807/d22-x01-y03"] analyses["EventShapes"]["4jet_dur"][189.0] = ["/ALEPH_2004_S5765862/d216-x01-y01","/JADE_OPAL_2000_S4300807/d23-x01-y03"] analyses["EventShapes"]["4jet_dur"][200.0] = ["/ALEPH_2004_S5765862/d217-x01-y01"] analyses["EventShapes"]["4jet_dur"][206.0] = ["/ALEPH_2004_S5765862/d218-x01-y01"] # 5 jet analyses["EventShapes"]["5jet_dur"][35.0 ] = ["/JADE_OPAL_2000_S4300807/d16-x01-y04"] analyses["EventShapes"]["5jet_dur"][44.0 ] = ["/JADE_OPAL_2000_S4300807/d17-x01-y04"] analyses["EventShapes"]["5jet_dur"][91.2 ] = ["/ALEPH_2004_S5765862/d219-x01-y01","/JADE_OPAL_2000_S4300807/d18-x01-y04"] analyses["EventShapes"]["5jet_dur"][133.0] = ["/ALEPH_2004_S5765862/d220-x01-y01","/JADE_OPAL_2000_S4300807/d19-x01-y04"] analyses["EventShapes"]["5jet_dur"][161.0] = ["/ALEPH_2004_S5765862/d221-x01-y01","/JADE_OPAL_2000_S4300807/d20-x01-y04"] analyses["EventShapes"]["5jet_dur"][172.0] = ["/ALEPH_2004_S5765862/d222-x01-y01","/JADE_OPAL_2000_S4300807/d21-x01-y04"] analyses["EventShapes"]["5jet_dur"][183.0] = ["/ALEPH_2004_S5765862/d223-x01-y01","/JADE_OPAL_2000_S4300807/d22-x01-y04"] analyses["EventShapes"]["5jet_dur"][189.0] = ["/ALEPH_2004_S5765862/d224-x01-y01","/JADE_OPAL_2000_S4300807/d23-x01-y04"] analyses["EventShapes"]["5jet_dur"][200.0] = ["/ALEPH_2004_S5765862/d225-x01-y01"] analyses["EventShapes"]["5jet_dur"][206.0] = ["/ALEPH_2004_S5765862/d226-x01-y01"] # 6 jet analyses["EventShapes"]["6jet_dur"][35.0 ] = ["/JADE_OPAL_2000_S4300807/d16-x01-y05"] analyses["EventShapes"]["6jet_dur"][44.0 ] = ["/JADE_OPAL_2000_S4300807/d17-x01-y05"] analyses["EventShapes"]["6jet_dur"][91.2 ] = ["/ALEPH_2004_S5765862/d227-x01-y01","/JADE_OPAL_2000_S4300807/d18-x01-y05"] analyses["EventShapes"]["6jet_dur"][133.0] = ["/ALEPH_2004_S5765862/d228-x01-y01","/JADE_OPAL_2000_S4300807/d19-x01-y05"] analyses["EventShapes"]["6jet_dur"][161.0] = ["/ALEPH_2004_S5765862/d229-x01-y01","/JADE_OPAL_2000_S4300807/d20-x01-y05"] analyses["EventShapes"]["6jet_dur"][172.0] = ["/ALEPH_2004_S5765862/d230-x01-y01","/JADE_OPAL_2000_S4300807/d21-x01-y05"] analyses["EventShapes"]["6jet_dur"][183.0] = ["/ALEPH_2004_S5765862/d231-x01-y01","/JADE_OPAL_2000_S4300807/d22-x01-y05"] analyses["EventShapes"]["6jet_dur"][189.0] = ["/ALEPH_2004_S5765862/d232-x01-y01","/JADE_OPAL_2000_S4300807/d23-x01-y05"] analyses["EventShapes"]["6jet_dur"][200.0] = ["/ALEPH_2004_S5765862/d233-x01-y01"] analyses["EventShapes"]["6jet_dur"][206.0] = ["/ALEPH_2004_S5765862/d234-x01-y01"] # four jet angles analyses["FourJet"]["BZ" ][91.2] = ["/OPAL_2001_S4553896/d03-x01-y01"] analyses["FourJet"]["KSW" ][91.2] = ["/OPAL_2001_S4553896/d04-x01-y01"] analyses["FourJet"]["NR" ][91.2] = ["/OPAL_2001_S4553896/d05-x01-y01"] analyses["FourJet"]["alpha34"][91.2] = ["/OPAL_2001_S4553896/d06-x01-y01"] # EEC analyses["EventShapes"]["EEC" ][7.7 ] = ["/PLUTO_1981_I156315/d01-x01-y01"] analyses["EventShapes"]["EEC" ][9.4 ] = ["/PLUTO_1981_I156315/d01-x01-y02"] analyses["EventShapes"]["EEC" ][12.0] = ["/PLUTO_1981_I156315/d01-x01-y03"] analyses["EventShapes"]["EEC" ][13.0] = ["/PLUTO_1981_I156315/d01-x01-y04"] analyses["EventShapes"]["EEC" ][14.0] = ["/TASSO_1987_I248660/d01-x01-y01","/JADE_1984_I202784/d01-x01-y01"] analyses["EventShapes"]["EEC" ][17.0] = ["/PLUTO_1981_I156315/d01-x01-y05"] analyses["EventShapes"]["EEC" ][22.0] = ["/TASSO_1987_I248660/d02-x01-y01","/JADE_1984_I202784/d01-x01-y02", "/CELLO_1982_I12010/d01-x01-y01","/PLUTO_1981_I156315/d01-x01-y06"] analyses["EventShapes"]["EEC" ][27.6] = ["/PLUTO_1981_I156315/d01-x01-y07"] analyses["EventShapes"]["EEC" ][29.0] = ["/MAC_1985_I202924/d01-x01-y01","/MAC_1985_I202924/d01-x01-y02"] analyses["EventShapes"]["EEC" ][30.8] = ["/PLUTO_1981_I156315/d01-x01-y08"] analyses["EventShapes"]["EEC" ][34.0] = ["/JADE_1984_I202784/d01-x01-y03","/CELLO_1982_I12010/d01-x01-y02"] analyses["EventShapes"]["EEC" ][34.6] = ["/PLUTO_1985_I215869/d01-x01-y01"] analyses["EventShapes"]["EEC" ][34.8] = ["/TASSO_1987_I248660/d03-x01-y01"] analyses["EventShapes"]["EEC" ][43.5] = ["/TASSO_1987_I248660/d04-x01-y01"] analyses["EventShapes"]["EEC" ][53.3] = ["/TOPAZ_1989_I279575/d01-x01-y01","/TOPAZ_1989_I279575/d01-x01-y02"] analyses["EventShapes"]["EEC" ][91.2] = ["/DELPHI_1996_S3430090/d33-x01-y01"] analyses["EventShapes"]["EEC" ][59.5] = ["/TOPAZ_1989_I279575/d02-x01-y01","/TOPAZ_1989_I279575/d02-x01-y02"] # AEEC analyses["EventShapes"]["AEEC"][8.65] = ["/PLUTO_1981_I156315/d04-x01-y01"] analyses["EventShapes"]["AEEC"][14.0] = ["/JADE_1984_I202784/d02-x01-y01"] analyses["EventShapes"]["AEEC"][22.0] = ["/JADE_1984_I202784/d02-x01-y02","/CELLO_1982_I12010/d03-x01-y01"] analyses["EventShapes"]["AEEC"][29.0] = ["/MAC_1985_I202924/d01-x01-y03"] analyses["EventShapes"]["AEEC"][30.8] = ["/PLUTO_1981_I156315/d05-x01-y01"] analyses["EventShapes"]["AEEC"][34.0] = ["/JADE_1984_I202784/d02-x01-y03","/CELLO_1982_I12010/d03-x01-y02"] analyses["EventShapes"]["AEEC"][53.3] = ["/TOPAZ_1989_I279575/d01-x01-y03"] analyses["EventShapes"]["AEEC"][59.5] = ["/TOPAZ_1989_I279575/d02-x01-y03"] analyses["EventShapes"]["AEEC"][91.2] = ["/DELPHI_1996_S3430090/d34-x01-y01"] # sphericity based analyses["EventShapes"]["S"][9.98 ] = ["/ARGUS_1986_I227324/d01-x01-y02"] analyses["EventShapes"]["S"][12.0 ] = ["/TASSO_1980_I153511/d01-x01-y01"] analyses["EventShapes"]["S"][14.0 ] = ["/TASSO_1990_S2148048/d06-x01-y01"] analyses["EventShapes"]["S"][22.0 ] = ["/TASSO_1990_S2148048/d06-x01-y02"] analyses["EventShapes"]["S"][29.0 ] = ["/HRS_1985_I201482/d01-x01-y01"] analyses["EventShapes"]["S"][30.8 ] = ["/TASSO_1980_I153511/d02-x01-y01"] analyses["EventShapes"]["S"][35.0 ] = ["/TASSO_1990_S2148048/d06-x01-y03","/TASSO_1988_I263859/d01-x01-y01"] analyses["EventShapes"]["S"][44.0 ] = ["/TASSO_1990_S2148048/d06-x01-y04"] analyses["EventShapes"]["S"][45.0 ] = ["/DELPHI_2003_I620250/d04-x01-y01"] analyses["EventShapes"]["S"][55.2 ] = ["/AMY_1990_I283337/d16-x01-y01"] analyses["EventShapes"]["S"][66.0 ] = ["/DELPHI_2003_I620250/d04-x01-y02"] analyses["EventShapes"]["S"][76.0 ] = ["/DELPHI_2003_I620250/d04-x01-y03"] analyses["EventShapes"]["S"][91.2 ] = ["/ALEPH_2004_S5765862/d141-x01-y01","/DELPHI_1996_S3430090/d15-x01-y01", "/ALEPH_1996_S3486095/d01-x01-y01","/OPAL_2004_S6132243/d10-x01-y01"] analyses["EventShapes"]["S"][133.0] = ["/ALEPH_2004_S5765862/d142-x01-y01","/OPAL_2004_S6132243/d10-x01-y02", "/DELPHI_1999_I499183/d21-x01-y01"] analyses["EventShapes"]["S"][161.0] = ["/ALEPH_2004_S5765862/d143-x01-y01","/DELPHI_1999_I499183/d21-x01-y02", "/OPAL_1997_I440721/d07-x01-y01"] analyses["EventShapes"]["S"][172.0] = ["/ALEPH_2004_S5765862/d144-x01-y01","/DELPHI_1999_I499183/d21-x01-y03", "/OPAL_2000_I513476/d08-x01-y01"] analyses["EventShapes"]["S"][177.0] = ["/OPAL_2004_S6132243/d10-x01-y03"] analyses["EventShapes"]["S"][183.0] = ["/DELPHI_2003_I620250/d66-x01-y01","/ALEPH_2004_S5765862/d145-x01-y01", "/DELPHI_1999_I499183/d22-x01-y01", "/OPAL_2000_I513476/d08-x01-y02"] analyses["EventShapes"]["S"][189.0] = ["/DELPHI_2003_I620250/d66-x01-y02","/ALEPH_2004_S5765862/d146-x01-y01", "/OPAL_2000_I513476/d08-x01-y03"] analyses["EventShapes"]["S"][192.0] = ["/DELPHI_2003_I620250/d66-x01-y03"] analyses["EventShapes"]["S"][196.0] = ["/DELPHI_2003_I620250/d66-x01-y04"] analyses["EventShapes"]["S"][197.0] = ["/OPAL_2004_S6132243/d10-x01-y04"] analyses["EventShapes"]["S"][200.0] = ["/DELPHI_2003_I620250/d67-x01-y01","/ALEPH_2004_S5765862/d147-x01-y01"] analyses["EventShapes"]["S"][202.0] = ["/DELPHI_2003_I620250/d67-x01-y02"] analyses["EventShapes"]["S"][205.0] = ["/DELPHI_2003_I620250/d67-x01-y03"] analyses["EventShapes"]["S"][206.0] = ["/ALEPH_2004_S5765862/d148-x01-y01"] analyses["EventShapes"]["S"][207.0] = ["/DELPHI_2003_I620250/d67-x01-y04"] analyses["EventShapes"]["P"][45.0 ] = ["/DELPHI_2003_I620250/d05-x01-y01"] analyses["EventShapes"]["P"][66.0 ] = ["/DELPHI_2003_I620250/d05-x01-y02"] analyses["EventShapes"]["P"][76.0 ] = ["/DELPHI_2003_I620250/d05-x01-y03"] analyses["EventShapes"]["P"][91.2 ] = ["/DELPHI_1996_S3430090/d17-x01-y01"] analyses["EventShapes"]["P"][133.0] = ["/ALEPH_2004_S5765862/d126-x01-y01","/DELPHI_1999_I499183/d23-x01-y01"] analyses["EventShapes"]["P"][161.0] = ["/ALEPH_2004_S5765862/d127-x01-y01","/DELPHI_1999_I499183/d23-x01-y02"] analyses["EventShapes"]["P"][172.0] = ["/ALEPH_2004_S5765862/d128-x01-y01","/DELPHI_1999_I499183/d23-x01-y03"] analyses["EventShapes"]["P"][183.0] = ["/DELPHI_2003_I620250/d68-x01-y01","/ALEPH_2004_S5765862/d129-x01-y01", "/DELPHI_1999_I499183/d24-x01-y01"] analyses["EventShapes"]["P"][189.0] = ["/DELPHI_2003_I620250/d68-x01-y02","/ALEPH_2004_S5765862/d130-x01-y01"] analyses["EventShapes"]["P"][192.0] = ["/DELPHI_2003_I620250/d68-x01-y03"] analyses["EventShapes"]["P"][196.0] = ["/DELPHI_2003_I620250/d68-x01-y04"] analyses["EventShapes"]["P"][200.0] = ["/DELPHI_2003_I620250/d69-x01-y01","/ALEPH_2004_S5765862/d131-x01-y01"] analyses["EventShapes"]["P"][202.0] = ["/DELPHI_2003_I620250/d69-x01-y02"] analyses["EventShapes"]["P"][205.0] = ["/DELPHI_2003_I620250/d69-x01-y03"] analyses["EventShapes"]["P"][206.0] = ["/ALEPH_2004_S5765862/d132-x01-y01"] analyses["EventShapes"]["P"][207.0] = ["/DELPHI_2003_I620250/d69-x01-y04"] analyses["EventShapes"]["A"][12.0 ] = ["/TASSO_1980_I153511/d03-x01-y01"] analyses["EventShapes"]["A"][14.0 ] = ["/TASSO_1990_S2148048/d07-x01-y01"] analyses["EventShapes"]["A"][22.0 ] = ["/TASSO_1990_S2148048/d07-x01-y02","/HRS_1985_I201482/d06-x01-y01"] analyses["EventShapes"]["A"][30.8 ] = ["/TASSO_1980_I153511/d04-x01-y01"] analyses["EventShapes"]["A"][35.0 ] = ["/TASSO_1990_S2148048/d07-x01-y03","/TASSO_1988_I263859/d02-x01-y01"] analyses["EventShapes"]["A"][44.0 ] = ["/TASSO_1990_S2148048/d07-x01-y04"] analyses["EventShapes"]["A"][55.2 ] = ["/AMY_1990_I283337/d17-x01-y01"] analyses["EventShapes"]["A"][91.2 ] = ["/ALEPH_2004_S5765862/d118-x01-y01","/DELPHI_1996_S3430090/d16-x01-y01", "/ALEPH_1996_S3486095/d02-x01-y01","/OPAL_2004_S6132243/d09-x01-y01"] analyses["EventShapes"]["A"][133.0] = ["/ALEPH_2004_S5765862/d119-x01-y01","/OPAL_2004_S6132243/d09-x01-y02", "/DELPHI_1999_I499183/d25-x01-y01"] analyses["EventShapes"]["A"][161.0] = ["/ALEPH_2004_S5765862/d120-x01-y01","/DELPHI_1999_I499183/d25-x01-y02", "/OPAL_1997_I440721/d08-x01-y01"] analyses["EventShapes"]["A"][172.0] = ["/ALEPH_2004_S5765862/d121-x01-y01","/DELPHI_1999_I499183/d25-x01-y03", "/OPAL_2000_I513476/d04-x01-y01"] analyses["EventShapes"]["A"][177.0] = ["/OPAL_2004_S6132243/d09-x01-y03"] analyses["EventShapes"]["A"][183.0] = ["/DELPHI_2003_I620250/d70-x01-y01","/ALEPH_2004_S5765862/d122-x01-y01", "/DELPHI_1999_I499183/d26-x01-y01","/OPAL_2000_I513476/d04-x01-y02"] analyses["EventShapes"]["A"][189.0] = ["/DELPHI_2003_I620250/d70-x01-y02","/ALEPH_2004_S5765862/d123-x01-y01", "/OPAL_2000_I513476/d04-x01-y03"] analyses["EventShapes"]["A"][192.0] = ["/DELPHI_2003_I620250/d70-x01-y03"] analyses["EventShapes"]["A"][196.0] = ["/DELPHI_2003_I620250/d70-x01-y04"] analyses["EventShapes"]["A"][197.0] = ["/OPAL_2004_S6132243/d09-x01-y04"] analyses["EventShapes"]["A"][200.0] = ["/DELPHI_2003_I620250/d71-x01-y01","/ALEPH_2004_S5765862/d124-x01-y01"] analyses["EventShapes"]["A"][202.0] = ["/DELPHI_2003_I620250/d71-x01-y02"] analyses["EventShapes"]["A"][205.0] = ["/DELPHI_2003_I620250/d71-x01-y03"] analyses["EventShapes"]["A"][206.0] = ["/ALEPH_2004_S5765862/d125-x01-y01"] analyses["EventShapes"]["A"][207.0] = ["/DELPHI_2003_I620250/d71-x01-y04"] # other analyses["EventShapes"]["Qx" ][55.2] = ["/AMY_1990_I283337/d18-x01-y01"] analyses["EventShapes"]["Q21"][55.2] = ["/AMY_1990_I283337/d19-x01-y01"] analyses["QED"] = ["/ALEPH_1996_S3196992/d03-x01-y01","/ALEPH_1996_S3196992/d04-x01-y01", "/ALEPH_1996_S3196992/d01-x01-y01","/ALEPH_1996_S3196992/d02-x01-y01", "/ALEPH_1996_S3196992/d05-x01-y01","/ALEPH_1996_S3196992/d06-x01-y01", "/ALEPH_1996_S3196992/d07-x01-y01","/ALEPH_1996_S3196992/d08-x01-y01", "/OPAL_1993_S2692198/d01-x01-y01","/OPAL_1993_S2692198/d02-x01-y01", "/OPAL_1993_S2692198/d03-x01-y01","/OPAL_1993_S2692198/d03-x01-y02", "/OPAL_1993_S2692198/d03-x01-y03","/OPAL_1993_S2692198/d03-x01-y04", "/OPAL_1993_S2692198/d04-x01-y01","/OPAL_1993_S2692198/d04-x01-y02", "/OPAL_1993_S2692198/d04-x01-y03","/OPAL_1993_S2692198/d04-x01-y04",] # tau decays # 2 body analyses["TauDecays"]["1pi" ]["MC" ] = ["/MC_TAU_Decay/h_1B_xpi"] analyses["TauDecays"]["KK" ]["data"] = ["/BABAR_2018_I1679886/d01-x01-y01"] analyses["TauDecays"]["KK" ]["MC" ] = ["/MC_TAU_Decay/h_2B_m2KK","/MC_TAU_Decay/h_2B_mKK"] analyses["TauDecays"]["Kpi" ]["data"] = ["/BELLE_2007_I753243/d01-x01-y01"] analyses["TauDecays"]["Kpi" ]["MC" ] = ["/MC_TAU_Decay/h_2B_m2KpiA","/MC_TAU_Decay/h_2B_m2KpiB", "/MC_TAU_Decay/h_2B_mKpiA","/MC_TAU_Decay/h_2B_mKpiB"] analyses["TauDecays"]["2pi" ]["data"] = ["/BELLE_2008_I786560/d01-x01-y01","/ALEPH_2014_I1267648/d01-x01-y01", "/CLEO_1999_I508944/d01-x01-y01"] analyses["TauDecays"]["2pi" ]["MC" ] = ["/MC_TAU_Decay/h_2B_m2pipi","/MC_TAU_Decay/h_2B_mpipi"] analyses["TauDecays"]["3pi" ]["data"] = ["/BELLE_2010_I841618/d01-x01-y01","/BABAR_2007_S7266081/d01-x01-y01", "/BABAR_2007_S7266081/d02-x01-y01","/BABAR_2007_S7266081/d11-x01-y01", "/ALEPH_2014_I1267648/d02-x01-y01","/ALEPH_2014_I1267648/d04-x01-y01"] analyses["TauDecays"]["3pi" ]["MC" ] = ["/MC_TAU_Decay/h_3B_pi0pi0pim_1","/MC_TAU_Decay/h_3B_pi0pi0pim_2","/MC_TAU_Decay/h_3B_pi0pi0pim_3", "/MC_TAU_Decay/h_3B_pippimpim_1","/MC_TAU_Decay/h_3B_pippimpim_2","/MC_TAU_Decay/h_3B_pippimpim_3"] analyses["TauDecays"]["Kpipi"]["data"] = ["/BELLE_2010_I841618/d02-x01-y01" ,"/BABAR_2007_S7266081/d03-x01-y01", "/BABAR_2007_S7266081/d04-x01-y01","/BABAR_2007_S7266081/d05-x01-y01", "/BABAR_2007_S7266081/d12-x01-y01"] analyses["TauDecays"]["Kpipi"]["MC" ] = ["/MC_TAU_Decay/h_3B_pi0pi0km_1","/MC_TAU_Decay/h_3B_pi0pi0km_2","/MC_TAU_Decay/h_3B_pi0pi0km_3", "/MC_TAU_Decay/h_3B_pimk0pi0_1","/MC_TAU_Decay/h_3B_pimk0pi0_2","/MC_TAU_Decay/h_3B_pimk0pi0_3", "/MC_TAU_Decay/h_3B_pimk0pi0_4"] analyses["TauDecays"]["KKpi" ]["data"] = ["/BELLE_2010_I841618/d03-x01-y01","/BABAR_2007_S7266081/d06-x01-y01", "/BABAR_2007_S7266081/d07-x01-y01","/BABAR_2007_S7266081/d08-x01-y01", "/BABAR_2007_S7266081/d13-x01-y01"] analyses["TauDecays"]["KKpi" ]["MC" ] = ["/MC_TAU_Decay/h_3B_klpimkl_1","/MC_TAU_Decay/h_3B_klpimkl_2","/MC_TAU_Decay/h_3B_klpimkl_3", "/MC_TAU_Decay/h_3B_kmpi0k0_1","/MC_TAU_Decay/h_3B_kmpi0k0_2","/MC_TAU_Decay/h_3B_kmpi0k0_3", "/MC_TAU_Decay/h_3B_kmpi0k0_4","/MC_TAU_Decay/h_3B_kmpimkp_1","/MC_TAU_Decay/h_3B_kmpimkp_2", "/MC_TAU_Decay/h_3B_kmpimkp_3","/MC_TAU_Decay/h_3B_kmpimkp_4","/MC_TAU_Decay/h_3B_kmpimpip_1", "/MC_TAU_Decay/h_3B_kmpimpip_2","/MC_TAU_Decay/h_3B_kmpimpip_3","/MC_TAU_Decay/h_3B_kmpimpip_4", "/MC_TAU_Decay/h_3B_kspimkl_1","/MC_TAU_Decay/h_3B_kspimkl_2","/MC_TAU_Decay/h_3B_kspimkl_3", "/MC_TAU_Decay/h_3B_kspimkl_4","/MC_TAU_Decay/h_3B_kspimks_1","/MC_TAU_Decay/h_3B_kspimks_2", "/MC_TAU_Decay/h_3B_kspimks_3"] analyses["TauDecays"]["3K" ]["data"] = ["/BELLE_2010_I841618/d04-x01-y01","/BABAR_2007_S7266081/d09-x01-y01", "/BABAR_2007_S7266081/d10-x01-y01","/BABAR_2007_S7266081/d14-x01-y01"] analyses["TauDecays"]["Keta"]["data"] = ["/CLEOII_1996_I415409/d01-x01-y01"] analyses["TauDecays"]["Keta"]["MC" ] = ["/MC_TAU_Decay/h_2B_m2Keta","/MC_TAU_Decay/h_2B_mKeta"] analyses["TauDecays"]["lnu" ]["MC" ] = ["/MC_TAU_Decay/h_2B_m2enu","/MC_TAU_Decay/h_2B_m2munu", "/MC_TAU_Decay/h_2B_menu","/MC_TAU_Decay/h_2B_mmunu"] analyses["TauDecays"]["2pieta"]["MC" ] = ["/MC_TAU_Decay/h_3B_pimpi0eta_1","/MC_TAU_Decay/h_3B_pimpi0eta_2", "/MC_TAU_Decay/h_3B_pimpi0eta_3","/MC_TAU_Decay/h_3B_pimpi0eta_4"] analyses["TauDecays"]["2pigamma"]["MC" ] = ["/MC_TAU_Decay/h_3B_pimpi0gamma_1","/MC_TAU_Decay/h_3B_pimpi0gamma_2", "/MC_TAU_Decay/h_3B_pimpi0gamma_3","/MC_TAU_Decay/h_3B_pimpi0gamma_4"] analyses["TauDecays"]["4pi"]["data"] = ["/ALEPH_2014_I1267648/d03-x01-y01","/ALEPH_2014_I1267648/d05-x01-y01", "/ALEPH_1996_I421984/d01-x01-y01","/ALEPH_1996_I421984/d02-x01-y01", "/ALEPH_1996_I421984/d03-x01-y01","/ALEPH_1996_I421984/d06-x01-y01"] analyses["TauDecays"]["4pi"]["MC" ] = ["/MC_TAU_Decay/h_4B_pipi_1","/MC_TAU_Decay/h_4B_pipi_2", "/MC_TAU_Decay/h_4B_pipi_3","/MC_TAU_Decay/h_4B_pipi_4", "/MC_TAU_Decay/h_4B_pipi_5","/MC_TAU_Decay/h_4B_pipi_6", "/MC_TAU_Decay/h_4B_pipipi_1","/MC_TAU_Decay/h_4B_pipipi_2", "/MC_TAU_Decay/h_4B_pipipi_3","/MC_TAU_Decay/h_4B_pipipi_4", "/MC_TAU_Decay/h_4B_pipipi_5","/MC_TAU_Decay/h_4B_pipipipi_1", "/MC_TAU_Decay/h_4B_pipipipi_2"] analyses["TauDecays"]["5pi"]["MC" ] = ["/MC_TAU_Decay/h_5B_pipi1_1","/MC_TAU_Decay/h_5B_pipi1_2", "/MC_TAU_Decay/h_5B_pipi1_3","/MC_TAU_Decay/h_5B_pipi1_4", "/MC_TAU_Decay/h_5B_pipi1_5","/MC_TAU_Decay/h_5B_pipi2_1", "/MC_TAU_Decay/h_5B_pipi2_2","/MC_TAU_Decay/h_5B_pipi3_1", "/MC_TAU_Decay/h_5B_pipi3_2","/MC_TAU_Decay/h_5B_pipi3_3", "/MC_TAU_Decay/h_5B_pipipi1_1","/MC_TAU_Decay/h_5B_pipipi1_2", "/MC_TAU_Decay/h_5B_pipipi1_3","/MC_TAU_Decay/h_5B_pipipi1_4", "/MC_TAU_Decay/h_5B_pipipi1_5","/MC_TAU_Decay/h_5B_pipipi2_1", "/MC_TAU_Decay/h_5B_pipipi2_2","/MC_TAU_Decay/h_5B_pipipi3_1", "/MC_TAU_Decay/h_5B_pipipi3_2","/MC_TAU_Decay/h_5B_pipipi3_3", "/MC_TAU_Decay/h_5B_pipipipi1_1","/MC_TAU_Decay/h_5B_pipipipi1_2", "/MC_TAU_Decay/h_5B_pipipipi1_3","/MC_TAU_Decay/h_5B_pipipipi2_1", "/MC_TAU_Decay/h_5B_pipipipi2_2","/MC_TAU_Decay/h_5B_pipipipi3_1", "/MC_TAU_Decay/h_5B_pipipipi3_2","/MC_TAU_Decay/h_5B_q1", "/MC_TAU_Decay/h_5B_q2","/MC_TAU_Decay/h_5B_q3"] analyses["TauDecays"]["6pi"]["data"] = ["/CLEOII_1994_I373188/d01-x01-y01"] analyses["EventShapes"]["2jet_jade"][35.0 ] = ["/JADE_OPAL_2000_S4300807/d07-x01-y01"] analyses["EventShapes"]["3jet_jade"][35.0 ] = ["/JADE_OPAL_2000_S4300807/d07-x01-y02"] analyses["EventShapes"]["4jet_jade"][35.0 ] = ["/JADE_OPAL_2000_S4300807/d07-x01-y03"] analyses["EventShapes"]["5jet_jade"][35.0 ] = ["/JADE_OPAL_2000_S4300807/d07-x01-y04"] analyses["EventShapes"]["6jet_jade"][35.0 ] = ["/JADE_OPAL_2000_S4300807/d07-x01-y05"] analyses["EventShapes"]["2jet_jade"][44.0 ] = ["/JADE_OPAL_2000_S4300807/d08-x01-y01"] analyses["EventShapes"]["3jet_jade"][44.0 ] = ["/JADE_OPAL_2000_S4300807/d08-x01-y02"] analyses["EventShapes"]["4jet_jade"][44.0 ] = ["/JADE_OPAL_2000_S4300807/d08-x01-y03"] analyses["EventShapes"]["5jet_jade"][44.0 ] = ["/JADE_OPAL_2000_S4300807/d08-x01-y04"] analyses["EventShapes"]["6jet_jade"][44.0 ] = ["/JADE_OPAL_2000_S4300807/d08-x01-y05"] analyses["EventShapes"]["2jet_jade"][91.2 ] = ["/JADE_OPAL_2000_S4300807/d09-x01-y01"] analyses["EventShapes"]["3jet_jade"][91.2 ] = ["/JADE_OPAL_2000_S4300807/d09-x01-y02"] analyses["EventShapes"]["4jet_jade"][91.2 ] = ["/JADE_OPAL_2000_S4300807/d09-x01-y03"] analyses["EventShapes"]["5jet_jade"][91.2 ] = ["/JADE_OPAL_2000_S4300807/d09-x01-y04"] analyses["EventShapes"]["6jet_jade"][91.2 ] = ["/JADE_OPAL_2000_S4300807/d09-x01-y05"] analyses["EventShapes"]["2jet_jade"][133.0] = ["/JADE_OPAL_2000_S4300807/d10-x01-y01"] analyses["EventShapes"]["3jet_jade"][133.0] = ["/JADE_OPAL_2000_S4300807/d10-x01-y02"] analyses["EventShapes"]["4jet_jade"][133.0] = ["/JADE_OPAL_2000_S4300807/d10-x01-y03"] analyses["EventShapes"]["5jet_jade"][133.0] = ["/JADE_OPAL_2000_S4300807/d10-x01-y04"] analyses["EventShapes"]["6jet_jade"][133.0] = ["/JADE_OPAL_2000_S4300807/d10-x01-y05"] analyses["EventShapes"]["2jet_jade"][161.0] = ["/JADE_OPAL_2000_S4300807/d11-x01-y01"] analyses["EventShapes"]["3jet_jade"][161.0] = ["/JADE_OPAL_2000_S4300807/d11-x01-y02"] analyses["EventShapes"]["4jet_jade"][161.0] = ["/JADE_OPAL_2000_S4300807/d11-x01-y03"] analyses["EventShapes"]["5jet_jade"][161.0] = ["/JADE_OPAL_2000_S4300807/d11-x01-y04"] analyses["EventShapes"]["6jet_jade"][161.0] = ["/JADE_OPAL_2000_S4300807/d11-x01-y05"] analyses["EventShapes"]["2jet_jade"][172.0] = ["/JADE_OPAL_2000_S4300807/d12-x01-y01"] analyses["EventShapes"]["3jet_jade"][172.0] = ["/JADE_OPAL_2000_S4300807/d12-x01-y02"] analyses["EventShapes"]["4jet_jade"][172.0] = ["/JADE_OPAL_2000_S4300807/d12-x01-y03"] analyses["EventShapes"]["5jet_jade"][172.0] = ["/JADE_OPAL_2000_S4300807/d12-x01-y04"] analyses["EventShapes"]["6jet_jade"][172.0] = ["/JADE_OPAL_2000_S4300807/d12-x01-y05"] analyses["EventShapes"]["2jet_jade"][183.0] = ["/JADE_OPAL_2000_S4300807/d13-x01-y01"] analyses["EventShapes"]["3jet_jade"][183.0] = ["/JADE_OPAL_2000_S4300807/d13-x01-y02"] analyses["EventShapes"]["4jet_jade"][183.0] = ["/JADE_OPAL_2000_S4300807/d13-x01-y03"] analyses["EventShapes"]["5jet_jade"][183.0] = ["/JADE_OPAL_2000_S4300807/d13-x01-y04"] analyses["EventShapes"]["6jet_jade"][183.0] = ["/JADE_OPAL_2000_S4300807/d13-x01-y05"] analyses["EventShapes"]["2jet_jade"][189.0] = ["/JADE_OPAL_2000_S4300807/d14-x01-y01"] analyses["EventShapes"]["3jet_jade"][189.0] = ["/JADE_OPAL_2000_S4300807/d14-x01-y02"] analyses["EventShapes"]["4jet_jade"][189.0] = ["/JADE_OPAL_2000_S4300807/d14-x01-y03"] analyses["EventShapes"]["5jet_jade"][189.0] = ["/JADE_OPAL_2000_S4300807/d14-x01-y04"] analyses["EventShapes"]["6jet_jade"][189.0] = ["/JADE_OPAL_2000_S4300807/d14-x01-y05"] # polarization # rho +/- analyses["Polarization"][213]["rho00"][91.2] = ["/OPAL_2000_I502750/d01-x01-y01"] analyses["Polarization"][213]["cos" ][91.2] = ["/OPAL_2000_I502750/ctheta_rho_0","/OPAL_2000_I502750/ctheta_rho_1", "/OPAL_2000_I502750/ctheta_rho_2","/OPAL_2000_I502750/ctheta_rho_3", "/OPAL_2000_I502750/ctheta_rho_4","/OPAL_2000_I502750/ctheta_rho_all"] # omega analyses["Polarization"][223]["rho00"][91.2] = ["/OPAL_2000_I502750/d02-x01-y01","/OPAL_2000_I502750/d02-x02-y01"] analyses["Polarization"][223]["cos" ][91.2] = ["/OPAL_2000_I502750/ctheta_omega_0","/OPAL_2000_I502750/ctheta_omega_1", "/OPAL_2000_I502750/ctheta_omega_2","/OPAL_2000_I502750/ctheta_omega_3", "/OPAL_2000_I502750/ctheta_omega_4","/OPAL_2000_I502750/ctheta_omega_all"] # phi analyses["Polarization"][333]["rho00"][91.2] = ["/OPAL_1997_I440103/d01-x01-y01"] analyses["Polarization"][333]["rho10"][91.2] = ["/OPAL_1997_I440103/d01-x01-y02","/OPAL_1997_I440103/d01-x01-y04","/OPAL_1997_I440103/d01-x01-y05"] analyses["Polarization"][333]["rho11"][91.2] = ["/OPAL_1997_I440103/d01-x01-y03"] analyses["Polarization"][333]["cos" ][91.2] = ["/OPAL_1997_I440103/d05-x01-y01"] analyses["Polarization"][333]["phi" ][91.2] = ["/OPAL_1997_I440103/d05-x01-y02","/OPAL_1997_I440103/d05-x01-y03"] # K*0 analyses["Polarization"][313]["rho00"][91.2] = ["/OPAL_1997_S3608263/d02-x01-y01"] analyses["Polarization"][313]["rho10"][91.2] = ["/OPAL_1997_S3608263/d02-x01-y01"] analyses["Polarization"][313]["rho11"][91.2] = ["/OPAL_1997_S3608263/d02-x01-y02","/OPAL_1997_S3608263/d03-x01-y01", "/OPAL_1997_S3608263/d03-x02-y01","/OPAL_1997_S3608263/d04-x01-y01", "/OPAL_1997_S3608263/d04-x01-y02","/OPAL_1997_S3608263/d04-x02-y01", "/OPAL_1997_S3608263/d04-x02-y02"] analyses["Polarization"][313]["cos"][91.2] = ["/OPAL_1997_S3608263/ctheta_00","/OPAL_1997_S3608263/ctheta_01", "/OPAL_1997_S3608263/ctheta_02","/OPAL_1997_S3608263/ctheta_03", "/OPAL_1997_S3608263/ctheta_04","/OPAL_1997_S3608263/ctheta_05", "/OPAL_1997_S3608263/ctheta_06","/OPAL_1997_S3608263/ctheta_07", "/OPAL_1997_S3608263/ctheta_08","/OPAL_1997_S3608263/ctheta_09", "/OPAL_1997_S3608263/ctheta_10","/OPAL_1997_S3608263/ctheta_11", "/OPAL_1997_S3608263/ctheta_large"] analyses["Polarization"][313]["phi"][91.2] = ["/OPAL_1997_S3608263/alpha_00","/OPAL_1997_S3608263/alpha_01", "/OPAL_1997_S3608263/alpha_02","/OPAL_1997_S3608263/alpha_03", "/OPAL_1997_S3608263/alpha_04","/OPAL_1997_S3608263/alpha_05", "/OPAL_1997_S3608263/alpha_06","/OPAL_1997_S3608263/alpha_07", "/OPAL_1997_S3608263/alpha_08","/OPAL_1997_S3608263/alpha_09", "/OPAL_1997_S3608263/alpha_10","/OPAL_1997_S3608263/alpha_11", "/OPAL_1997_S3608263/alpha_high_00","/OPAL_1997_S3608263/alpha_high_01", "/OPAL_1997_S3608263/alpha_high_02","/OPAL_1997_S3608263/alpha_high_03", "/OPAL_1997_S3608263/alpha_low_00","/OPAL_1997_S3608263/alpha_low_01", "/OPAL_1997_S3608263/alpha_low_02","/OPAL_1997_S3608263/alpha_low_03",] # D* analyses["Polarization"][413]["rho00"][10.5] = ["/CLEO_1991_I314060/d01-x01-y02","/CLEO_1998_I467595/d04-x01-y01"] analyses["Polarization"][413]["alpha"][10.5] = ["/CLEO_1991_I314060/d01-x01-y01","/CLEO_1991_I314060/d01-x01-y03", "/CLEO_1998_I467595/d03-x01-y01"] analyses["Polarization"][413]["cos" ][10.5] = ["/CLEO_1991_I314060/d02-x01-y01","/CLEO_1991_I314060/d02-x01-y02", "/CLEO_1991_I314060/d02-x01-y03","/CLEO_1991_I314060/d02-x01-y04", "/CLEO_1991_I314060/d02-x01-y05","/CLEO_1991_I314060/d02-x01-y06", "/CLEO_1998_I467595/d05-x01-y01","/CLEO_1998_I467595/d05-x01-y02", "/CLEO_1998_I467595/d05-x01-y03","/CLEO_1998_I467595/d05-x01-y04", "/CLEO_1998_I467595/d05-x01-y05","/CLEO_1998_I467595/d05-x01-y06"] analyses["Polarization"][413]["rho00"][29.0] = ["/TPC_1991_I316132/d02-x01-y01","/TPC_1991_I316132/d02-x02-y01", "/HRS_1987_I250823/d01-x01-y01","/HRS_1987_I250823/d01-x02-y01", "/HRS_1987_I250823/d01-x03-y01","/HRS_1987_I250823/d02-x01-y01", "/HRS_1987_I250823/d03-x01-y01","/HRS_1987_I250823/d03-x02-y01", "/HRS_1987_I250823/d04-x01-y01","/HRS_1987_I250823/d05-x01-y01", "/HRS_1987_I250823/d06-x01-y01"] analyses["Polarization"][413]["rho10"][29.0] = ["/TPC_1991_I316132/d02-x01-y03","/TPC_1991_I316132/d02-x02-y03", "/HRS_1987_I250823/d01-x01-y03","/HRS_1987_I250823/d01-x02-y03", "/HRS_1987_I250823/d01-x03-y03","/HRS_1987_I250823/d02-x01-y03", "/HRS_1987_I250823/d03-x01-y03","/HRS_1987_I250823/d03-x02-y03", "/HRS_1987_I250823/d04-x01-y03","/HRS_1987_I250823/d05-x01-y03", "/HRS_1987_I250823/d06-x01-y03"] analyses["Polarization"][413]["rho11"][29.0] = ["/TPC_1991_I316132/d02-x01-y02","/TPC_1991_I316132/d02-x02-y02", "/HRS_1987_I250823/d01-x01-y02","/HRS_1987_I250823/d01-x02-y02", "/HRS_1987_I250823/d01-x03-y02","/HRS_1987_I250823/d02-x01-y02", "/HRS_1987_I250823/d03-x01-y02","/HRS_1987_I250823/d03-x02-y02", "/HRS_1987_I250823/d04-x01-y02","/HRS_1987_I250823/d05-x01-y02", "/HRS_1987_I250823/d06-x01-y02"] analyses["Polarization"][413]["alpha"][29.0] = ["/TPC_1991_I316132/d01-x01-y01","/TPC_1991_I316132/d01-x02-y01"] analyses["Polarization"][413]["cos"][29.0] = ["/TPC_1991_I316132/ctheta_0","/TPC_1991_I316132/ctheta_1", "/TPC_1991_I316132/ctheta_2","/TPC_1991_I316132/ctheta_3", "/TPC_1991_I316132/ctheta_4","/TPC_1991_I316132/ctheta_5", "/TPC_1991_I316132/ctheta_all",] analyses["Polarization"][413]["phi"][29.0] = ["/TPC_1991_I316132/h_01_0","/TPC_1991_I316132/h_01_1", "/TPC_1991_I316132/h_01_2","/TPC_1991_I316132/h_01_3", "/TPC_1991_I316132/h_01_4","/TPC_1991_I316132/h_01_5", "/TPC_1991_I316132/h_01_all","/TPC_1991_I316132/phi_0", "/TPC_1991_I316132/phi_1","/TPC_1991_I316132/phi_2", "/TPC_1991_I316132/phi_3","/TPC_1991_I316132/phi_4", "/TPC_1991_I316132/phi_5","/TPC_1991_I316132/phi_all"] analyses["Polarization"][413]["rho00"][91.2] = ["/OPAL_1997_I440103/d03-x01-y01"] analyses["Polarization"][413]["rho11"][91.2] = ["/OPAL_1997_I440103/d03-x01-y02"] analyses["Polarization"][413]["cos" ][91.2] = ["/OPAL_1997_I440103/d06-x01-y01"] analyses["Polarization"][413]["phi" ][91.2] = ["/OPAL_1997_I440103/d07-x01-y01"] # B* analyses["Polarization"][513]["rho00"][91.2] = ["/ALEPH_1995_I398426/d02-x01-y01","/DELPHI_1995_I395026/d03-x01-y01", "/OPAL_1996_I428493/d02-x01-y01","/OPAL_1997_I440103/d04-x01-y01"] analyses["Polarization"][513]["cos" ][91.2] = ["/DELPHI_1995_I395026/d05-x01-y01","/OPAL_1996_I428493/d03-x01-y01", "/OPAL_1997_I440103/d08-x01-y01","/ALEPH_1995_I398426/d03-x01-y01"] # Lambda0 analyses["Polarization"][3122]["rho11"][10.58] = ["/BELLE_2019_I1687566/d01-x01-y01","/BELLE_2019_I1687566/d01-x01-y02", "/BELLE_2019_I1687566/d01-x02-y01","/BELLE_2019_I1687566/d01-x02-y02", "/BELLE_2019_I1687566/d01-x03-y01","/BELLE_2019_I1687566/d01-x03-y02", "/BELLE_2019_I1687566/d01-x04-y01","/BELLE_2019_I1687566/d01-x04-y02", "/BELLE_2019_I1687566/d02-x01-y01","/BELLE_2019_I1687566/d02-x01-y02", "/BELLE_2019_I1687566/d02-x01-y03","/BELLE_2019_I1687566/d02-x01-y04", "/BELLE_2019_I1687566/d02-x01-y05","/BELLE_2019_I1687566/d02-x01-y06", "/BELLE_2019_I1687566/d02-x01-y07","/BELLE_2019_I1687566/d02-x01-y08", "/BELLE_2019_I1687566/d02-x02-y01","/BELLE_2019_I1687566/d02-x02-y02", "/BELLE_2019_I1687566/d02-x02-y03","/BELLE_2019_I1687566/d02-x02-y04", "/BELLE_2019_I1687566/d02-x02-y05","/BELLE_2019_I1687566/d02-x02-y06", "/BELLE_2019_I1687566/d02-x02-y07","/BELLE_2019_I1687566/d02-x02-y08", "/BELLE_2019_I1687566/d02-x03-y01","/BELLE_2019_I1687566/d02-x03-y02", "/BELLE_2019_I1687566/d02-x03-y03","/BELLE_2019_I1687566/d02-x03-y04", "/BELLE_2019_I1687566/d02-x03-y05","/BELLE_2019_I1687566/d02-x03-y06", "/BELLE_2019_I1687566/d02-x03-y07","/BELLE_2019_I1687566/d02-x03-y08", "/BELLE_2019_I1687566/d02-x04-y01","/BELLE_2019_I1687566/d02-x04-y02", "/BELLE_2019_I1687566/d02-x04-y03","/BELLE_2019_I1687566/d02-x04-y04", "/BELLE_2019_I1687566/d02-x04-y05","/BELLE_2019_I1687566/d02-x04-y06", "/BELLE_2019_I1687566/d02-x04-y07","/BELLE_2019_I1687566/d02-x04-y08", "/BELLE_2019_I1687566/d03-x01-y01","/BELLE_2019_I1687566/d03-x01-y02", "/BELLE_2019_I1687566/d03-x01-y03","/BELLE_2019_I1687566/d03-x01-y04", "/BELLE_2019_I1687566/d03-x01-y05","/BELLE_2019_I1687566/d03-x01-y06",] analyses["Polarization"][3122]["rho00"][91.2] = ["/OPAL_1997_I447188/d01-x01-y01","/OPAL_1997_I447188/d01-x01-y02", "/ALEPH_1996_I415745/d01-x01-y01","/ALEPH_1996_I415745/d01-x02-y01"] analyses["Polarization"][3122]["rho11"][91.2] = ["/OPAL_1997_I447188/d02-x01-y01","/OPAL_1997_I447188/d02-x01-y02", "/OPAL_1997_I447188/d02-x01-y03","/OPAL_1997_I447188/d02-x01-y04", "/ALEPH_1996_I415745/d02-x01-y01","/ALEPH_1996_I415745/d02-x02-y01", "/ALEPH_1996_I415745/d02-x03-y01","/ALEPH_1996_I415745/d02-x04-y01"] analyses["Polarization"][3122]["cos" ][91.2] = ["/OPAL_1997_I447188/d04-x01-y01","/OPAL_1997_I447188/d04-x01-y02", "/OPAL_1997_I447188/d04-x01-y03","/OPAL_1997_I447188/d04-x01-y04"] analyses["Polarization"][3122]["phi" ][91.2] = ["/OPAL_1997_I447188/d05-x01-y01","/OPAL_1997_I447188/d05-x01-y02", "/OPAL_1997_I447188/d05-x01-y03","/OPAL_1997_I447188/d05-x01-y04"] # bottom baryons analyses["Polarization"][5122]["rho00"][91.2] = ["/OPAL_1998_I474012/d01-x01-y01","/DELPHI_2000_I513614/d01-x01-y01", "/ALEPH_1996_I402895/d01-x01-y01"] analyses["Polarization"][5122]["Other"][91.2] = ["/DELPHI_2000_I513614/El","/DELPHI_2000_I513614/Ev", "/OPAL_1998_I474012/El","/OPAL_1998_I474012/Ev", "/OPAL_1998_I474012/ratio","/ALEPH_1996_I402895/El", "/ALEPH_1996_I402895/Ev"] # find all the figures figures=glob.glob("%s/*/*.dat" % directory) used=[] plotOutput="""
{name}: {energy} GeV
""" plotOutput2="""
{name}
""" def writePlots(plots,output) : global figures output.write("
\n") for energy in sorted(plots.keys()) : try : float(energy) except: continue for name in sorted(plots[energy]) : dat=name[1:] +".dat" figName = ("%s/%s" %(directory,dat)) if(figName not in figures) : continue used.append(figName) pdf=name[1:] +".pdf" png=name[1:] +".png" output.write(plotOutput.format(name=name[1:],pdf=pdf,png=png,dat=dat,energy=energy)) output.write("\n") output.write("
") def writePlots2(plots,output) : global figures output.write("
\n") for name in sorted(plots) : dat=name[1:] +".dat" figName = ("%s/%s" %(directory,dat)) tempName=figName.replace(".dat","") found = False names=[] for name in figures : if(tempName+"_" in name or tempName+".dat"==name) : found=True names.append(name) if(not found) : continue for name in names : used.append(name) trim = name[:-4].replace("%s/"%directory,"") pdf=trim+".pdf" png=trim+".png" dat=trim+".dat" output.write(plotOutput2.format(name=trim,pdf=pdf,png=png,dat=dat)) output.write("\n") output.write("
") def writeMisc(index) : global figures,used for val in used : if(val in figures) : del figures[figures.index(val)] index.write("
  • Other Plots\n") - print 'Unused figures',len(figures) + print ('Unused figures',len(figures)) for val in figures: - print val + print (val) misc=open(os.path.join(directory,"misc.html"),'w') misc.write(header.format(title="Comparisions of Herwig7 and Miscellaneous $e^+e^-$ Data")) misc.write("
    \n") for val in sorted(figures) : name=val.replace(directory,"").replace(".dat","") dat=name[1:] +".dat" figName = ("%s/%s" %(directory,dat)) if(figName not in figures) : continue del figures[figures.index(figName)] pdf=name[1:] +".pdf" png=name[1:] +".png" misc.write(plotOutput.format(name=name[1:],pdf=pdf,png=png,dat=dat,energy="")) misc.write("\n") misc.write("
    ") # footer misc.write("\n") misc.close() def writeQED(index) : index.write("
  • QED Radiation\n") qed=open(os.path.join(directory,"qed.html"),'w') qed.write(header.format(title="Comparisions of Herwig7 and Photon Radiation Data")) writePlots2(analyses["QED"],qed) # footer qed.write("\n") qed.close() def writeTauDecays(index) : index.write("
  • Tau Decays\n") decays=open(os.path.join(directory,"taus.html"),'w') decays.write(header.format(title="Comparisions of Herwig7 and Tau Decay Data")) names = { "1pi" : "$\\tau\\to\\nu_\\tau\\pi^-$", "2pi" : "$\\tau\\to\\nu_\\tau\\pi^-\\pi^0$", "Kpi" : "$\\tau\\to\\nu_\\tau K\\pi$", "KK" : "$\\tau\\to\\nu_\\tau KK$", "lnu" : "$\\tau\\to\\nu_\\tau \\ell\\nu$", "Keta" : "$\\tau\\to\\nu_\\tau K\\eta$", "3pi" : "$\\tau\\to\\nu_\\tau\\pi\\pi\\pi$", "Kpipi" : "$\\tau\\to\\nu_\\tau K\\pi\\pi$", "KKpi" : "$\\tau\\to\\nu_\\tau KK\\pi$", "3K" : "$\\tau\\to\\nu_\\tau K^+K^-K^-$", "2pieta" : "$\\tau\\to\\nu_\\tau\\eta\\pi\\pi$", "2pigamma" : "$\\tau\\to\\nu_\\tau\\gamma\\pi\\pi$", "4pi" : "$\\tau\\to\\nu_\\tau4\\pi$", "5pi" : "$\\tau\\to\\nu_\\tau5\\pi$", "6pi" : "$\\tau\\to\\nu_\\tau6\\pi$",} index.write("\n") decays.write("\n") decays.close() def writeParticleDecays(particles,decays,index) : for val in particles : if val not in analyses["HadronDecays"] : continue decays.write("
    \n

    %s

    \n" % (val,particleNames[val])) index.write("
    %s,\n" % (val,particleNames[val])) if("Modes" in analyses["HadronDecays"][val] and len(analyses["HadronDecays"][val]["Modes"]) !=0) : - for mode,plots in analyses["HadronDecays"][val]["Modes"].iteritems() : + for mode,plots in analyses["HadronDecays"][val]["Modes"].items() : decays.write("
    Mode: %s
    \n" % mode) if("data" in plots) : decays.write("
    Data
    \n") writePlots2(plots["data"],decays) if("MC" in plots) : decays.write("
    Monte Carlo
    \n") writePlots2(plots["MC"],decays) # multiplicity dist if("DistChargedMult" in analyses["HadronDecays"][val] and len(analyses["HadronDecays"][val]["DistChargedMult"]) !=0) : decays.write("
    Charged Particle Multplicity Distribution
    \n") if("data" in analyses["HadronDecays"][val]["DistChargedMult"]) : decays.write("
    Data
    \n") writePlots2(analyses["HadronDecays"][val]["DistChargedMult"]["data"],decays) if("MC" in analyses["HadronDecays"][val]["DistChargedMult"]) : decays.write("
    Monte Carlo
    \n") writePlots2(analyses["HadronDecays"][val]["DistChargedMult"]["MC"],decays) # multiplicities if("Mult" in analyses["HadronDecays"][val] and len(analyses["HadronDecays"][val]["Mult"]) !=0) : - for prod,plots in sorted(analyses["HadronDecays"][val]["Mult"].iteritems()): + for prod,plots in sorted(analyses["HadronDecays"][val]["Mult"].items()): if(len(plots)==0) : continue - if(prod!="Charged") : + if(prod!=0) : decays.write("
    Multiplicity of %s
    \n" % particleNames[prod]) else : decays.write("
    Multiplicity of Charged Particles
    \n") writePlots2(plots,decays) # spectra if("Spectrum" in analyses["HadronDecays"][val] and len(analyses["HadronDecays"][val]["Spectrum"]) !=0) : - for prod,plots in sorted(analyses["HadronDecays"][val]["Spectrum"].iteritems()): + for prod,plots in sorted(analyses["HadronDecays"][val]["Spectrum"].items()): if(len(plots)==0) : continue decays.write("
    Spectrum of %s
    \n" % particleNames[prod]) writePlots2(plots,decays) # event shapes if("Shapes" in analyses["HadronDecays"][val] and len(analyses["HadronDecays"][val]["Shapes"]) !=0) : decays.write("
    Events Shapes
    \n") writePlots2(analyses["HadronDecays"][val]["Shapes"],decays) # other dists if("Other" in analyses["HadronDecays"][val] and len(analyses["HadronDecays"][val]["Other"]) !=0) : decays.write("
    Other Observables
    \n") writePlots2(analyses["HadronDecays"][val]["Other"],decays) def writeDecays(index) : decays=open(os.path.join(directory,"decays.html"),'w') decays.write(header.format(title="Comparisions of Herwig7 and Hadronic Decay Data")) index.write("
  • Hadron Decays\n") index.write(" \n") decays.write("\n") decays.close() def writeMult(index) : index.write("
  • Identified Particle Multiplicities\n") mult=open(os.path.join(directory,"mult.html"),'w') mult.write(header.format(title="Comparisions of Herwig7 and $e^+e^-$ Particle Multiplicities")) # mesons mult.write("

    Mesons

    \n") mult.write("

    Light, Unflavoured

    \n") index.write("\n") mult.write("\n") mult.close() def writeSpectrum(particles,index,ident) : latexNames = { "x" : "Scaled Momentum/Energy", "xi" : "Log of Scaled Momentum/Energy", "p" : "Momentum/Energy", "Ratio" : "Ratios of particle multiplicities", "Other" : "Other distributions" } for pdgId in particles: if(pdgId not in analyses["IdentifiedParticle"]) : continue sumL = len(analyses["IdentifiedParticle"][pdgId]["x"])+len(analyses["IdentifiedParticle"][pdgId]["p"])+\ len(analyses["IdentifiedParticle"][pdgId]["xi"])+len(analyses["IdentifiedParticle"][pdgId]["Ratio"])\ +len(analyses["IdentifiedParticle"][pdgId]["Other"]) if(sumL==0) : continue # lines in html ident.write("
    \n

    %s

    \n" % (pdgId,particleNames[pdgId])) index.write("
    %s,\n" % (pdgId,particleNames[pdgId])) # plots for val in ["x","p","xi","Ratio","Other"] : if(len(analyses["IdentifiedParticle"][pdgId][val])==0) : continue ident.write("
    \n

    %s

    \n" % (pdgId,val,latexNames[val])) writePlots(analyses["IdentifiedParticle"][pdgId][val],ident) ident.write("
    \n") def writePolar(particles,index,pol) : latexNames = { "rho00" : "Longitudinal polarization", "rho10" : "Off-diagonal $(\\rho_{10}$)", "rho11" : "Transerve polarization", "alpha" : "Asymmetry $\\alpha$", "cos" : "$\\cos\\theta$ distributions", "phi" : "Azimuthal Angle distributions", "Other" : "Other distributions"} for pdgId in particles: if(pdgId not in analyses["Polarization"]) : continue sumL = len(analyses["Polarization"][pdgId]["alpha"])+len(analyses["Polarization"][pdgId]["rho00"])+\ len(analyses["Polarization"][pdgId]["cos"])+len(analyses["Polarization"][pdgId]["phi"])+\ len(analyses["Polarization"][pdgId]["rho10"])+len(analyses["Polarization"][pdgId]["rho11"]) if(sumL==0) : continue # lines in html pol.write("
  • Identified Particle Spectra\n") index.write("\n") ident.write("\n") ident.close() def writeFlavour(index) : flavour=open(os.path.join(directory,"flavour.html"),'w') flavour.write(header.format(title="Comparisions of Herwig7 and Flavour Separated $e^+e^-$ Data")) index.write("
  • Flavour Separated\n") index.write(" \n") flavour.write("\n") flavour.close() def writeCharged(index) : # headers charged=open(os.path.join(directory,"charged.html"),'w') charged.write(header.format(title="Comparisions of Herwig7 and $e^+e^-$ Data on Charged Particles")) index.write("
  • Charged Particles\n") index.write("\n") charged.write("\n") charged.close() def writeJets(index) : jets=open(os.path.join(directory,"jets.html"),'w') jets.write(header.format(title="Comparisions of Herwig7 and $e^+e^-$ Jet Data")) index.write("
  • Jets\n") index.write("\n") jets.write("\n") jets.write("\n") jets.close() def writeEventShapes(index) : lFormat="""
    \n<{hlevel} id=\"{tag}\">{name}\n""" index.write("
    \n") # sphericity and related index.write("
  • Sphericity related: \n") event.write("

    Sphericity and Related Variables

    \n") for obs in ["S","P","A","Qx","Q21"]: if obs == "S" : title="Sphericity" elif obs == "P" : title="Planarity" elif obs == "A" : title="Aplanarity" elif obs == "Qx" : title="$Q_x$" elif obs == "Q21": title="$Q_2-Q_1$" event.write(lFormat.format(hlevel="h3",tag=obs,name=title)) index.write(" %s,\n" %(obs,title)) writePlots(analyses["EventShapes"][obs],event) event.write("\n") # jet masses event.write("

    Jet Masses

    \n") index.write("
  • Jet Masses: \n") for obs in ["HeavyJetMass","LightJetMass","TotalJetMass","JetMassDifference"]: if obs == "HeavyJetMass" : title="Heavy Jet Mass" elif obs == "LightJetMass" : title="Light Jet Mass" elif obs == "TotalJetMass" : title="Total Jet Mass" elif obs == "JetMassDifference" : title="Jet Mass Difference" event.write(lFormat.format(hlevel="h3",tag=obs,name=title)) index.write(" %s,\n" %(obs,title)) writePlots(analyses["EventShapes"][obs],event) event.write("\n") # EEC and AEEC event.write("

    Energy-Energy Correlations

    \n") index.write("
  • Energy-Energy Correlations: \n") for obs in ["EEC","AEEC"]: if obs == "EEC" : title="Energy-Energy Correlation" elif obs == "AEEC" : title="Energy-Energy Asymmetry Correlation" event.write(lFormat.format(hlevel="h3",tag=obs,name=title)) index.write(" %s,\n" %(obs,title)) writePlots(analyses["EventShapes"][obs],event) event.write("\n") # jet broadening event.write("

    Jet Broadenings

    \n") index.write("
  • Jet Broadening: \n") for obs in ["BT","BW","BN","Bdiff"]: if obs == "BT" : title="Total Jet Broadening" elif obs == "BW" : title="Wide Jet Broadening" elif obs == "BN" : title="Narrow Jet Broadening" elif obs == "Bdiff" : title="Difference of Jet Broadenings" event.write(lFormat.format(hlevel="h3",tag=obs,name=title)) index.write(" %s,\n" %(obs,title)) writePlots(analyses["EventShapes"][obs],event) event.write("\n") # C and D event.write("

    C and D parameters

    \n") index.write("
  • C and D parameters: \n") for obs in ["C","D"]: title= "%s-parameter" % obs event.write(lFormat.format(hlevel="h3",tag=obs,name=title)) index.write(" %s,\n" %(obs,title)) writePlots(analyses["EventShapes"][obs],event) event.write("\n") # moments of event shapes event.write("

    Moments of Event Shapes

    \n") index.write("
  • Moments: \n") for val in ["Moment_T","Moment_M","Moment_m","Moment_O","Moment_H","Moment_L", "Moment_BT","Moment_BW","Moment_BN","Moment_C","Moment_S","Moment_y"] : if(val=="Moment_T") : event.write("
    \n

    Thrust

    \n") index.write(" thrust,\n") elif(val=="Moment_M") : event.write("
    \n

    Thrust Major

    \n") index.write("
    major,\n") elif(val=="Moment_m") : event.write("
    \n

    Thrust Minor

    \n") index.write("
    minor,\n") elif(val=="Moment_O") : event.write("
    \n

    Oblateness

    \n") index.write("
    oblateness,\n") elif(val=="Moment_H") : event.write("
    \n

    Heavy Jet Mass

    \n") index.write("
    heavy jet mass,\n") elif(val=="Moment_L") : event.write("
  • Gluons\n") gluon=open(os.path.join(directory,"gluon.html"),'w') gluon.write(header.format(title="Comparisions of Herwig7 and $e^+e^-$ Data on Gluon Jets")) index.write("
      \n") # charged particles dists gluon.write("

      Charged Particle Multiplicity in Gluon Jets

      \n") index.write("
    • Charged Particle Multiplicity \n") gluon.write("
      \n") writePlots(analyses["Charged"]["DistChargedMult"][21],gluon) gluon.write("
      \n") # spectra index.write("
    • Charged Spectra \n") gluon.write("

      Charged Particle Spectra for Gluon Jets

      \n") for val in ["x","p","xi"] : if(len(analyses["Charged"]["ChargedSpectrum"][21][val])==0) : continue if(val=="x") : gluon.write("

      Scaled Momentum

      \n") elif(val=="p") : gluon.write("

      Momentum

      \n") elif(val=="xi") : gluon.write("

      Log of the Scaled Momentum

      \n") gluon.write("
      \n") writePlots(analyses["Charged"]["ChargedSpectrum"][21][val],gluon) gluon.write("
      \n") # footer index.write("
    \n") gluon.write("\n") gluon.close() # output the polarization plots def writePolarization(index) : pol=open(os.path.join(directory,"polarization.html"),'w') # header for page pol.write(header.format(title="Comparisions of Herwig7 and $e^+e^-$ Polarization Observables")) # # line for index index.write("
  • Polarization Measurements\n") index.write("\n") pol.write("\n") pol.close() -print 'Total no of figures',len(figures) +print ('Total no of figures',len(figures)) index=open(os.path.join(directory,"herwig.html"),'w') index.write(header.format(title="Comparisions of Herwig7 and $e^+e^-$ Data")) # event shapes writeEventShapes(index) # charged particles writeCharged(index) # jets writeJets(index) # identified particle spectra writeIdentified(index) # identified particle multiplicity writeMult(index) # flavour writeFlavour(index) # gluons writeGluon(index) # polarization writePolarization(index) # QED writeQED(index) # tau decays writeTauDecays(index) # hadron decays writeDecays(index) # remaining plots if(len(figures)>0) : writeMisc(index) else : - print 'All figures used' + print ('All figures used') # footer index.write("\n") index.write("\n") index.close() diff --git a/Tests/python/rivet_check b/Tests/python/rivet_check --- a/Tests/python/rivet_check +++ b/Tests/python/rivet_check @@ -1,124 +1,125 @@ #!/usr/bin/python +from __future__ import print_function import glob,subprocess,os,optparse op = optparse.OptionParser(usage=__doc__) op.add_option("--obsolete", dest="obsolete" , default=False, action="store_true" , help="Warn if obsolete analyses not included") op.add_option("--search", dest="search" , default=False, action="store_true" , help="Warn if search analyses not included") op.add_option("--heavy-ion", dest="heavy_ion" , default=False, action="store_true" , help="Warn if heavy ion analyses not included") op.add_option("--MC", dest="MC" , default=False, action="store_true" , help="Warn if MC analyses not included") op.add_option("--print-descriptions", dest="output" , default=False, action="store_true" , help="Print analysis descriptions") opts, args = op.parse_args() # analyses to skip skip = [ "ATLAS_2010_I849050", # alias "TOTEM_2012_002" , # alias "TEST" , # test analysis "ATLAS_2015_I1351916", # same as _EL version "ATLAS_2015_CONF_2015_041", # superseeded ] searches=["ALEPH_2016_I1492968","ATLAS_2019_I1725190"] p=subprocess.Popen(["rivet","--list"],stdout=subprocess.PIPE) analyses={} -for line in p.communicate()[0].split("\n") : +for line in p.communicate()[0].decode("UTF-8").split("\n") : line=line.strip() if(line=="") : continue temp = line.split(None,1) if(len(temp)==2) : analyses[temp[0].strip()] = temp[1].strip() elif(len(temp)==1) : analyses[temp[0].strip()] = "" else : - print line + print (line) quit() # main line hw analyses at high energy hw_analyses={} files=[] for idir in glob.glob("Rivet/*") : if( "Powheg" in idir or "MCatNLO" in idir) : continue if ( not os.path.isdir(idir) ) : continue if ( "Templates" in idir ) : continue for ifile in glob.glob("%s/*.in" % idir) : fshort=ifile.split("/")[-1].replace(".in","") files.append(fshort) file=open(ifile) line=file.readline() while line: if("RivetAnalysis:Analyses" in line and line[0]!="#") : line=line.strip().split() anal = line[-1].strip().split(":")[0] if(anal not in hw_analyses) : hw_analyses[anal] = [fshort] else : hw_analyses[anal].append(fshort) line=file.readline() # low energy herwig analysis p = subprocess.Popen(["./python/LowEnergy.py","--list","--process","All"],stdout=subprocess.PIPE) lowEnergy = p.communicate()[0] hw_low_energy_analyses=lowEnergy.strip().split() # R analyses p = subprocess.Popen(["./python/R.py","--list"],stdout=subprocess.PIPE) Rlist = p.communicate()[0] hw_R_analyses=Rlist.strip().split() anatohepmc = open("anatohepmc.txt",'w') hepmctoana = open("hepmctoana.txt",'w') not_in_rivet=[] for val in hw_analyses.keys() : not_in_rivet.append(val) # check the analyses for analysis in sorted(analyses.keys()) : # we have it high energy if(analysis in hw_analyses) : anatohepmc.write("%s %s\n" % (analysis,' '.join(sorted(hw_analyses[analysis]))) ) if("[OBSOLETE]" in analyses[analysis]) : - print "WARNING Obsolete analysis %s included : %s" % (analysis,analyses[analysis]) + print ("WARNING Obsolete analysis %s included : %s" % (analysis,analyses[analysis])) if(analysis in not_in_rivet) : not_in_rivet.remove(analysis) # we have it low energy or R or skipping elif (analysis in hw_low_energy_analyses or analysis in skip or analysis in hw_R_analyses ) : if(analysis in not_in_rivet) : not_in_rivet.remove(analysis) continue # obsolete elif("[OBSOLETE]" in analyses[analysis]) : - if(opts.obsolete) : print "Obsolete analysis %s not included : %s" % (analysis,analyses[analysis]) + if(opts.obsolete) : print ("Obsolete analysis %s not included : %s" % (analysis,analyses[analysis])) # searches elif("Search" in analyses[analysis] or "search" in analyses[analysis] or analysis in searches) : - if(opts.search) : print "Search analysis %s not included : %s" % (analysis,analyses[analysis]) + if(opts.search) : print ("Search analysis %s not included : %s" % (analysis,analyses[analysis])) # mc only elif(analysis[0:3]=="MC_") : - if(opts.MC) : print "MC analysis %s not included : %s" % (analysis,analyses[analysis]) + if(opts.MC) : print ("MC analysis %s not included : %s" % (analysis,analyses[analysis])) # examples elif("EXAMPLE" in analyses[analysis]) or "EXAMPLE" in analysis: continue # we don't have it else : p=subprocess.Popen(["rivet","--show-analysis",analysis],stdout=subprocess.PIPE) - desc=p.communicate()[0] + desc=p.communicate()[0].decode("UTF-8") beams=[] for line in desc.split("\n") : if("Beams:" in line) : beams=line.replace("Beams:","").split() nHeavy = sum((part=="Pb" or part=="Au") for part in beams) if(nHeavy == len(beams) or nHeavy+1 == len(beams)) : - if(opts.heavy_ion) : print "Heavy Ion analysis %s not included : %s" % (analysis,analyses[analysis]) + if(opts.heavy_ion) : print ("Heavy Ion analysis %s not included : %s" % (analysis,analyses[analysis])) else : - print "MISSING ANALYSIS",analysis,analyses[analysis] - if(opts.output) : print desc + print ("MISSING ANALYSIS",analysis,analyses[analysis]) + if(opts.output) : print (desc) # outout analyses missing from rivet for val in not_in_rivet: - print "NOT IN RIVET ",val + print ("NOT IN RIVET ",val) # output second file for rivet anatohepmc.close() for fname in sorted(files) : anals=[] for anal in hw_analyses : if(fname in hw_analyses[anal]) : anals.append(anal) hepmctoana.write("%s %s\n" % (fname,' '.join(sorted(anals))) ) hepmctoana.close() diff --git a/m4/herwig.m4 b/m4/herwig.m4 --- a/m4/herwig.m4 +++ b/m4/herwig.m4 @@ -1,901 +1,922 @@ 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" THEPEGHASLHAPDF="no" if test -e ${with_thepeg}/lib/ThePEG/ThePEGLHAPDF.so ; then THEPEGHASLHAPDF="yes" fi if test "${host_cpu}" == "x86_64" -a -e ${with_thepeg}/lib64/ThePEG/libThePEG.so ; then THEPEGLDFLAGS="-L${with_thepeg}/lib64/ThePEG" if test -e ${with_thepeg}/lib64/ThePEG/ThePEGLHAPDF.so ; then THEPEGHASLHAPDF="yes" fi fi if test "x$THEPEGHASLHAPDF" == "xno" ; then AC_MSG_ERROR([Herwig requires ThePEG to be build with lhapdf.]) fi THEPEGHASFASTJET="no" if test -e ${with_thepeg}/lib/ThePEG/FastJetFinder.so ; then THEPEGHASFASTJET="yes" fi if test "${host_cpu}" == "x86_64" -a -e ${with_thepeg}/lib64/ThePEG/libThePEG.so ; then THEPEGLDFLAGS="-L${with_thepeg}/lib64/ThePEG" if test -e ${with_thepeg}/lib64/ThePEG/FastJetFinder.so ; then THEPEGHASFASTJET="yes" fi fi if test "x$THEPEGHASFASTJET" == "xno" ; then AC_MSG_ERROR([Herwig requires ThePEG to be build with FastJet.]) fi 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) AC_SUBST(THEPEGHASLHAPDF) AC_SUBST(THEPEGHASFASTJET) 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) AC_MSG_CHECKING([for HepMCAnalysis.so in ThePEG]) THEPEGHASHEPMC="no" if test -e ${with_thepeg}/lib/ThePEG/HepMCAnalysis.so ; then THEPEGHASHEPMC="yes" fi if test "${host_cpu}" == "x86_64" -a -e ${with_thepeg}/lib64/ThePEG/libThePEG.so ; then THEPEGLDFLAGS="-L${with_thepeg}/lib64/ThePEG" if test -e ${with_thepeg}/lib64/ThePEG/HepMCAnalysis.so ; then THEPEGHASHEPMC="yes" fi fi if test "x$THEPEGHASHEPMC" == "xno" ; then CREATE_HEPMC="# create" AC_MSG_RESULT([not found]) else CREATE_HEPMC="create" AC_MSG_RESULT([found]) fi AC_SUBST([CREATE_HEPMC]) AC_MSG_CHECKING([for RivetAnalysis.so in ThePEG]) THEPEGHASRIVET="no" if test -e ${with_thepeg}/lib/ThePEG/RivetAnalysis.so ; then THEPEGHASRIVET="yes" fi if test "${host_cpu}" == "x86_64" -a -e ${with_thepeg}/lib64/ThePEG/libThePEG.so ; then THEPEGLDFLAGS="-L${with_thepeg}/lib64/ThePEG" if test -e ${with_thepeg}/lib64/ThePEG/RivetAnalysis.so ; then THEPEGHASRIVET="yes" fi fi if test "x$THEPEGHASRIVET" == "xno" ; then CREATE_RIVET="# create" AC_MSG_RESULT([not found]) else CREATE_RIVET="create" AC_MSG_RESULT([found]) fi AM_CONDITIONAL(HAVE_RIVET,[test x$THEPEGHASRIVET = xyes]) AC_SUBST([CREATE_RIVET]) ]) 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-*|*-darwin1*) 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]) +if test "x$GCC" = "xyes"; then + AC_LANG_PUSH([Fortran]) + oldFCFLAGS="$FCFLAGS" + AC_MSG_CHECKING([checking if fortran compiler supports -std=legacy]) + FCFLAGS="-std=legacy" + AC_COMPILE_IFELSE( + AC_LANG_PROGRAM([],[ print *[,]"Hello"]), + [AC_MSG_RESULT([yes]) + AM_FCFLAGS="$AM_FCFLAGS -std=legacy" + AM_FFLAGS="$AM_FFLAGS -std=legacy"], + [AC_MSG_RESULT([no])] + ) + FCFLAGS="$oldFCFLAGS" + AC_LANG_POP([Fortran]) +fi + + + + AC_SUBST([F77],[$FC]) AC_SUBST([FFLAGS],[$FCFLAGS]) AC_SUBST([AM_FFLAGS],[$AM_FCFLAGS]) AC_SUBST([FLIBS],[$FCLIBS]) ]) dnl ##### VBFNLO ##### AC_DEFUN([HERWIG_CHECK_VBFNLO], [ AC_MSG_CHECKING([for VBFNLO]) AC_ARG_WITH([vbfnlo], AS_HELP_STRING([--with-vbfnlo=DIR], [Installation path of VBFNLO]), [], [with_vbfnlo=no] ) AC_MSG_RESULT([$with_vbfnlo]) AS_IF([test "x$with_vbfnlo" != "xno"], [AC_CHECK_FILES( ${with_vbfnlo}/lib/VBFNLO/libVBFNLO.so, [have_vbfnlo=lib], [have_vbfnlo=no])], [have_vbfnlo=no]) AS_IF([test "x$with_vbfnlo" != "xno" -a "x$have_vbfnlo" = "xno" ], [AC_CHECK_FILES( ${with_vbfnlo}/lib64/VBFNLO/libVBFNLO.so, [have_vbfnlo=lib64], [have_vbfnlo=no])]) AS_IF([test "x$with_vbfnlo" != "xno" -a "x$have_vbfnlo" = "xno" ], [AC_CHECK_FILES( ${with_vbfnlo}/lib/VBFNLO/libVBFNLO.dylib, [have_vbfnlo=lib], [have_vbfnlo=no])]) AS_IF([test "x$with_vbfnlo" != "xno" -a "x$have_vbfnlo" = "xno" ], [AC_CHECK_FILES( ${with_vbfnlo}/lib64/VBFNLO/libVBFNLO.dylib, [have_vbfnlo=lib64], [have_vbfnlo=no])]) AS_IF([test "x$have_vbfnlo" = "xlib"], [VBFNLOLIBS=${with_vbfnlo}/lib/VBFNLO AC_SUBST(VBFNLOLIBS) ]) AS_IF([test "x$have_vbfnlo" = "xlib64"], [VBFNLOLIBS=${with_vbfnlo}/lib64/VBFNLO AC_SUBST(VBFNLOLIBS) ]) AS_IF([test "x$with_vbfnlo" != "xno" -a "x$have_vbfnlo" = "xno"], [AC_MSG_ERROR([vbfnlo requested but not found])]) AM_CONDITIONAL(HAVE_VBFNLO,[test "x$have_vbfnlo" = "xlib" -o "x$have_vbfnlo" = "xlib64"]) if test "x$have_vbfnlo" = "xlib" -o "x$have_vbfnlo" = "xlib64" ; then AC_REQUIRE([AC_PROG_SED]) VBFNLOINCLUDE=${with_vbfnlo}/include AC_SUBST(VBFNLOINCLUDE) VBFNLOLIB=$(echo ${with_vbfnlo}/${have_vbfnlo}/VBFNLO | $SED -e 's%/\+%/%g') AC_SUBST(VBFNLOLIB) LOAD_VBFNLO="library" CREATE_VBFNLO="create" INSERT_VBFNLO="insert" SET_VBFNLO="set" DO_VBFNLO="do" MKDIR_VBFNLO="mkdir" else LOAD_VBFNLO="# library" CREATE_VBFNLO="# create" INSERT_VBFNLO="# insert" SET_VBFNLO="# set" DO_VBFNLO="# do" MKDIR_VBFNLO="# mkdir" fi AC_SUBST([LOAD_VBFNLO]) AC_SUBST([CREATE_VBFNLO]) AC_SUBST([INSERT_VBFNLO]) AC_SUBST([SET_VBFNLO]) AC_SUBST([DO_VBFNLO]) AC_SUBST([MKDIR_VBFNLO]) ]) dnl ##### njet ##### AC_DEFUN([HERWIG_CHECK_NJET], [ AC_MSG_CHECKING([for njet]) AC_ARG_WITH([njet], AS_HELP_STRING([--with-njet=DIR], [Installation path of njet]), [], [with_njet=no] ) AC_MSG_RESULT([$with_njet]) AS_IF([test "x$with_njet" != "xno"], [AC_CHECK_FILES( ${with_njet}/lib/libnjet2.so, [have_njet=lib], [have_njet=no])], [have_njet=no]) AS_IF([test "x$with_njet" != "xno" -a "x$have_njet" = "xno" ], [AC_CHECK_FILES( ${with_njet}/lib64/libnjet2.so, [have_njet=lib64], [have_njet=no])]) AS_IF([test "x$with_njet" != "xno" -a "x$have_njet" = "xno" ], [AC_CHECK_FILES( ${with_njet}/lib/libnjet2.dylib, [have_njet=lib], [have_njet=no])]) AS_IF([test "x$have_njet" = "xlib"], [NJETLIBPATH=${with_njet}/lib AC_SUBST(NJETLIBPATH) NJETINCLUDEPATH=${with_njet}/include AC_SUBST(NJETINCLUDEPATH) NJETPREFIX=${with_njet} AC_SUBST(NJETPREFIX) ]) AS_IF([test "x$have_njet" = "xlib64"], [NJETLIBPATH=${with_njet}/lib64 AC_SUBST(NJETLIBPATH) NJETINCLUDEPATH=${with_njet}/include AC_SUBST(NJETINCLUDEPATH) NJETPREFIX=${with_njet} AC_SUBST(NJETPREFIX) ]) AS_IF([test "x$with_njet" != "xno" -a "x$have_njet" = "xno"], [AC_MSG_ERROR([njet requested but not found])]) AM_CONDITIONAL(HAVE_NJET,[test "x$have_njet" = "xlib" -o "x$have_njet" = "xlib64"]) if test "x$have_njet" = "xlib" -o "x$have_njet" = "xlib64" ; then LOAD_NJET="library" CREATE_NJET="create" INSERT_NJET="insert" DO_NJET="do" else LOAD_NJET="# library" CREATE_NJET="# create" INSERT_NJET="# insert" DO_NJET="# do" fi AC_SUBST([LOAD_NJET]) AC_SUBST([CREATE_NJET]) AC_SUBST([INSERT_NJET]) AC_SUBST([DO_NJET]) ]) dnl ##### gosam ##### AC_DEFUN([HERWIG_CHECK_GOSAM], [ AC_MSG_CHECKING([for GoSam]) AC_ARG_WITH([gosam], AS_HELP_STRING([--with-gosam=DIR], [Installation path of GoSam]), [], [with_gosam=no] ) AC_MSG_RESULT([$with_gosam]) AS_IF([test "x$with_gosam" != "xno"], [AC_CHECK_FILES( ${with_gosam}/bin/gosam.py, [have_gosam=lib], [have_gosam=no])], [have_gosam=no]) AS_IF([test "x$have_gosam" = "xlib"], [GOSAMPREFIX=${with_gosam} AC_SUBST(GOSAMPREFIX) ]) AS_IF([test "x$with_gosam" != "xno" -a "x$have_gosam" = "xno"], [AC_MSG_ERROR([GoSam requested but not found])]) AS_IF([test "x$with_gosam" != "xno"], [AC_MSG_CHECKING([for GoSam version >= 2.0.4]) tmp_gosamversion=[$(${with_gosam}/bin/gosam.py --version | grep 'GoSam.*rev' | cut -d' ' -f2)] AX_COMPARE_VERSION([${tmp_gosamversion}],[lt],[2.0.4], [AC_MSG_RESULT([no]) AC_MSG_ERROR([Herwig requires GoSam 2.0.4 or later, found ${tmp_gosamversion}])], [AC_MSG_RESULT([yes])])]) AM_CONDITIONAL(HAVE_GOSAM,[test "x$have_gosam" = "xlib" ]) if test "x$have_gosam" = "xlib" ; then LOAD_GOSAM="library" CREATE_GOSAM="create" INSERT_GOSAM="insert" DO_GOSAM="do" else LOAD_GOSAM="# library" CREATE_GOSAM="# create" INSERT_GOSAM="# insert" DO_GOSAM="# do" fi AC_SUBST([LOAD_GOSAM]) AC_SUBST([CREATE_GOSAM]) AC_SUBST([INSERT_GOSAM]) AC_SUBST([DO_GOSAM]) ]) dnl ##### gosam-contrib ##### AC_DEFUN([HERWIG_CHECK_GOSAM_CONTRIB], [ AC_MSG_CHECKING([for gosam-contrib]) AC_ARG_WITH([gosam-contrib], AS_HELP_STRING([--with-gosam-contrib=DIR], [Installation path of gosam-contrib]), [], [with_gosam_contrib=no] ) AC_MSG_RESULT([$with_gosam_contrib]) AS_IF([test "x$with_gosam_contrib" = "xno" -a "x$with_gosam" != "xno"], [AC_CHECK_FILES( ${with_gosam}/lib/libsamurai.so, [with_gosam_contrib=${with_gosam}], []) ]) AS_IF([test "x$with_gosam_contrib" = "xno" -a "x$with_gosam" != "xno"], [AC_CHECK_FILES( ${with_gosam}/lib64/libsamurai.so, [with_gosam_contrib=${with_gosam}], []) ]) AS_IF([test "x$with_gosam_contrib" = "xno" -a "x$with_gosam" != "xno"], [AC_CHECK_FILES( ${with_gosam}/lib/libsamurai.dylib, [with_gosam_contrib=${with_gosam}], []) ]) AS_IF([test "x$with_gosam_contrib" = "xno" -a "x$with_gosam" != "xno"], [AC_CHECK_FILES( ${with_gosam}/lib64/libsamurai.dylib, [with_gosam_contrib=${with_gosam}], []) ]) AS_IF([test "x$with_gosam_contrib" = "xno" -a "x$with_gosam" != "xno"], [AC_MSG_ERROR([GoSam requested without requesting GoSam-Contrib])]) AS_IF([test "x$with_gosam_contrib" != "xno"], [AC_CHECK_FILES( ${with_gosam_contrib}/lib/libsamurai.so, [have_gosam_contrib=lib], [have_gosam_contrib=no])], [have_gosam_contrib=no]) AS_IF([test "x$with_gosam_contrib" != "xno" -a "x$have_gosam_contrib" = "xno" ], [AC_CHECK_FILES( ${with_gosam_contrib}/lib64/libsamurai.so, [have_gosam_contrib=lib64], [have_gosam_contrib=no])]) AS_IF([test "x$with_gosam_contrib" != "xno" -a "x$have_gosam_contrib" = "xno" ], [AC_CHECK_FILES( ${with_gosam_contrib}/lib/libsamurai.dylib, [have_gosam_contrib=lib], [have_gosam_contrib=no])]) AS_IF([test "x$with_gosam_contrib" != "xno" -a "x$have_gosam_contrib" = "xno" ], [AC_CHECK_FILES( ${with_gosam_contrib}/lib64/libsamurai.dylib, [have_gosam_contrib=lib64], [have_gosam_contrib=no])]) AS_IF([test "x$have_gosam_contrib" != "xno"], [GOSAMCONTRIBPREFIX=${with_gosam_contrib} AC_SUBST(GOSAMCONTRIBPREFIX) ]) AS_IF([test "x$have_gosam_contrib" = "xlib"], [GOSAMCONTRIBLIBS=${with_gosam_contrib}/lib AC_SUBST(GOSAMCONTRIBLIBS) ]) AS_IF([test "x$have_gosam_contrib" = "xlib64"], [GOSAMCONTRIBLIBS=${with_gosam_contrib}/lib64 AC_SUBST(GOSAMCONTRIBLIBS) ]) AS_IF([test "x$with_gosam_contrib" != "xno" -a "x$have_gosam_contrib" = "xno"], [AC_MSG_ERROR([GoSam-Contrib requested but not found])]) AM_CONDITIONAL(HAVE_GOSAM_CONTRIB,[test "x$have_gosam_contrib" = "xlib" -o "x$have_gosam_contrib" = "xlib64"]) if test "x$have_gosam_contrib" = "xlib" -o "x$have_gosam_contrib" = "xlib64" ; then LOAD_GOSAM_CONTRIB="library" CREATE_GOSAM_CONTRIB="create" INSERT_GOSAM_CONTRIB="insert" else LOAD_GOSAM_CONTRIB="# library" CREATE_GOSAM_CONTRIB="# create" INSERT_GOSAM_CONTRIB="# insert" fi AC_SUBST([LOAD_GOSAM_CONTRIB]) AC_SUBST([CREATE_GOSAM_CONTRIB]) AC_SUBST([INSERT_GOSAM_CONTRIB]) ]) dnl ##### OpenLoops ##### AC_DEFUN([HERWIG_CHECK_OPENLOOPS], [ AC_MSG_CHECKING([for OpenLoops]) AC_ARG_WITH([openloops], AS_HELP_STRING([--with-openloops=DIR], [Installation path of OpenLoops]), [], [with_openloops=no] ) AC_MSG_RESULT([$with_openloops]) AS_IF([test "x$with_openloops" != "xno"], [AC_CHECK_FILES( ${with_openloops}/lib/libopenloops.so, [have_openloops=lib], [have_openloops=no])], [have_openloops=no]) AS_IF([test "x$with_openloops" != "xno" -a "x$have_openloops" = "xno" ], [AC_CHECK_FILES( ${with_openloops}/lib/libopenloops.dylib, [have_openloops=lib], [have_openloops=no])]) AS_IF([test "x$with_openloops" != "xno" -a "x$have_openloops" = "xno" ], [AC_CHECK_FILES( ${with_openloops}/lib64/libopenloops.so, [have_openloops=lib64], [have_openloops=no])]) AS_IF([test "x$with_openloops" != "xno" -a "x$have_openloops" = "xno" ], [AC_CHECK_FILES( ${with_openloops}/lib64/libopenloops.dylib, [have_openloops=lib64], [have_openloops=no])]) AS_IF([test "x$have_openloops" = "xlib"], [OPENLOOPSLIBS=${with_openloops}/lib AC_SUBST(OPENLOOPSLIBS) ]) AS_IF([test "x$have_openloops" = "xlib64"], [OPENLOOPSLIBS=${with_openloops}/lib64 AC_SUBST(OPENLOOPSLIBS) ]) AS_IF([test "x$with_openloops" != "xno" -a "x$have_openloops" = "xno"], [AC_MSG_ERROR([OpenLoops requested but not found])]) AM_CONDITIONAL(HAVE_OPENLOOPS,[test "x$have_openloops" = "xlib" -o "x$have_openloops" = "xlib64"]) if test "x$have_openloops" = "xlib" -o "x$have_openloops" = "xlib64" ; then OPENLOOPSPREFIX=${with_openloops} LOAD_OPENLOOPS="library" CREATE_OPENLOOPS="create" INSERT_OPENLOOPS="insert" SET_OPENLOOPS="set" DO_OPENLOOPS="do" MKDIR_OPENLOOPS="mkdir" else LOAD_OPENLOOPS="# library" CREATE_OPENLOOPS="# create" INSERT_OPENLOOPS="# insert" SET_OPENLOOPS="# set" DO_OPENLOOPS="# do" MKDIR_OPENLOOPS="# mkdir" fi AC_SUBST([OPENLOOPSPREFIX]) AC_SUBST([LOAD_OPENLOOPS]) AC_SUBST([CREATE_OPENLOOPS]) AC_SUBST([INSERT_OPENLOOPS]) AC_SUBST([SET_OPENLOOPS]) AC_SUBST([DO_OPENLOOPS]) AC_SUBST([MKDIR_OPENLOOPS]) ]) ######################################### dnl ##### madgraph ##### AC_DEFUN([HERWIG_CHECK_MADGRAPH], [ AC_MSG_CHECKING([for MadGraph]) AC_ARG_WITH([madgraph], AS_HELP_STRING([--with-madgraph=DIR], [Installation path of MadGraph]), [], [with_madgraph=no] ) AC_MSG_RESULT([$with_madgraph]) AS_IF([test "x$with_madgraph" != "xno"], [AC_CHECK_FILES( ${with_madgraph}/bin/mg5_aMC, [have_madgraph=yes], [have_madgraph=no])], [have_madgraph=no]) AS_IF([test "x$have_madgraph" = "xyes"], [MADGRAPHPREFIX=${with_madgraph} AC_SUBST(MADGRAPHPREFIX) ]) AS_IF([test "x$with_madgraph" != "xno" -a "x$have_madgraph" = "xno"], [AC_MSG_ERROR([MadGraph requested but not found])]) AM_CONDITIONAL(HAVE_MADGRAPH,[test "x$have_madgraph" = "xyes" ]) if test "x$have_madgraph" = "xyes" ; then LOAD_MADGRAPH="library" CREATE_MADGRAPH="create" INSERT_MADGRAPH="insert" SET_MADGRAPH="set" DO_MADGRAPH="do" else LOAD_MADGRAPH="# library" CREATE_MADGRAPH="# create" INSERT_MADGRAPH="# insert" SET_MADGRAPH="# set" DO_MADGRAPH="# do" fi AC_SUBST([LOAD_MADGRAPH]) AC_SUBST([CREATE_MADGRAPH]) AC_SUBST([INSERT_MADGRAPH]) AC_SUBST([SET_MADGRAPH]) AC_SUBST([DO_MADGRAPH]) ]) dnl ##### EvtGen ##### AC_DEFUN([HERWIG_CHECK_EVTGEN], [ AC_MSG_CHECKING([for evtgen]) AC_ARG_WITH([evtgen], AS_HELP_STRING([--with-evtgen=DIR], [Installation path of EvtGen]), [], [with_evtgen=no] ) AC_MSG_RESULT([$with_evtgen]) AS_IF([test "x$with_evtgen" != "xno"], [AC_CHECK_FILES( ${with_evtgen}/lib/libEvtGenExternal.so, [have_evtgen=lib], [have_evtgen=no])], [have_evtgen=no]) AS_IF([test "x$with_evtgen" != "xno" -a "x$have_evtgen" = "xno"], [AC_CHECK_FILES( ${with_evtgen}/lib64/libEvtGenExternal.so, [have_evtgen=lib64], [have_evtgen=no])]) AS_IF([test "x$with_evtgen" != "xno" -a "x$have_evtgen" = "xno" ], [AC_CHECK_FILES( ${with_evtgen}/lib/libEvtGenExternal.dylib, [have_evtgen=lib], [have_evtgen=no])]) AS_IF([test "x$have_evtgen" = "xlib" -o "x$have_evtgen" = "xlib64" ], [EVTGENPREFIX=${with_evtgen} AC_SUBST(EVTGENPREFIX) ]) AS_IF([test "x$with_evtgen" != "xno" -a "x$have_evtgen" = "xno"], [AC_MSG_ERROR([EvtGen requested but not found])]) AC_SUBST([EVTGENINCLUDE],[-I$EVTGENPREFIX/include]) AM_CONDITIONAL(HAVE_EVTGEN,[test "x$have_evtgen" = "xlib" -o "x$have_evtgen" = "xlib64"]) if test "x$have_evtgen" = "xlib" ; then LOAD_EVTGEN_DECAYS="read EvtGenBDecays.in" LOAD_EVTGEN_DECAYER="read EvtGenDecayer.in" EVTGENLIBS="-L$with_evtgen/lib -lEvtGen -lEvtGenExternal" elif test "x$have_evtgen" = "xlib64" ; then LOAD_EVTGEN_DECAYS="read EvtGenBDecays.in" LOAD_EVTGEN_DECAYER="read EvtGenDecayer.in" EVTGENLIBS="-L$with_evtgen/lib64 -lEvtGen -lEvtGenExternal" else LOAD_EVTGEN_DECAYS="read HerwigBDecays.in" LOAD_EVTGEN_DECAYER="#read EvtGenDecayer.in" EVTGENLIBS="" fi AC_SUBST([LOAD_EVTGEN_DECAYS]) AC_SUBST([LOAD_EVTGEN_DECAYER]) AC_SUBST([EVTGENLIBS]) ]) AC_DEFUN([HERWIG_CHECK_PYTHIA], [ dnl check if a directory is specified for Pythia AC_ARG_WITH(pythia, [AC_HELP_STRING([--with-pythia=dir], [Assume the given directory for Pythia])]) dnl search for the pythia-config script if test "$with_pythia" = ""; then AC_PATH_PROG(pythiaconfig, pythia8-config, no) else AC_PATH_PROG(pythiaconfig, pythia8-config, no, ${with_pythia}/bin) fi if test "${pythiaconfig}" = "no"; then AC_MSG_CHECKING(Pythia) AC_MSG_RESULT(no); # $2 else PYTHIA8DATA=`${pythiaconfig} --datadir`/xmldoc fi AC_SUBST(PYTHIA8DATA) ]) dnl CHECK PYTHIA END 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" GSLPATH="$with_gsl" 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" GSLPATH="$with_gsl" 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" GSLPATH="$with_gsl" 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_SUBST(GSLPATH) ]) dnl ##### COMPILERFLAGS ##### AC_DEFUN([HERWIG_COMPILERFLAGS], [ AC_REQUIRE([HERWIG_CHECK_GSL]) AC_REQUIRE([HERWIG_CHECK_THEPEG]) AC_REQUIRE([BOOST_REQUIRE]) AC_REQUIRE([AX_COMPILER_VENDOR]) AM_CPPFLAGS="-I\$(top_builddir)/include $THEPEGINCLUDE \$(GSLINCLUDE) \$(BOOST_CPPFLAGS)" 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 debugflags="" else debugflags="-g" fi dnl -Wfloat-equal -fvisibility-inlines-hidden -Wctor-dtor-privacy -Weffc++ if test -n "$GCC"; then warnflags="-pedantic -Wall -Wextra -Wno-overloaded-virtual" if test "x$enable_debug" = "xslow"; then debugflags="$debugflags -fno-inline" AM_CPPFLAGS="$AM_CPPFLAGS -D_GLIBCXX_DEBUG" fi fi dnl do an actual capability check on ld instead of this workaround case "${host}" in *-darwin*) ;; *) AM_LDFLAGS="-Wl,--enable-new-dtags" ;; esac case "${ax_cv_cxx_compiler_vendor}" in gnu) AM_CXXFLAGS="-pedantic -Wall -W" ;; clang) AM_CXXFLAGS="-pedantic -Wall -Wno-overloaded-virtual -Wno-unused-function -Wno-unused-parameter" dnl -Wno-unneeded-internal-declaration ;; intel) AM_CXXFLAGS="-strict-ansi -Wall -wd13000,1418,981,444,383,1599,1572,2259,980" ;; esac AC_SUBST(AM_CPPFLAGS) AC_SUBST(AM_CFLAGS, ["$warnflags $debugflags"]) AC_SUBST(AM_CXXFLAGS,["$AM_CXXFLAGS $warnflags $debugflags"]) AC_SUBST(AM_FCFLAGS, ["$debugflags"]) AC_SUBST(AM_LDFLAGS) ]) AC_DEFUN([HERWIG_ENABLE_MODELS], [ AC_MSG_CHECKING([if BSM models should be built]) AC_ARG_ENABLE(models, AC_HELP_STRING([--disable-models],[Turn off compilation of BSM models.]), [], [enable_models=yes] ) AC_MSG_RESULT([$enable_models]) LOAD_BSM="" if test "$enable_models" = "yes"; then LOAD_BSM="read BSMlibs.in" fi AC_SUBST(LOAD_BSM) AM_CONDITIONAL(WANT_BSM,[test "$enable_models" = "yes"]) ]) AC_DEFUN([HERWIG_OVERVIEW], [ FCSTRING=`$FC --version | head -1` CXXSTRING=`$CXX --version | head -1` CCSTRING=`$CC --version | head -1` if test "x$PYTHON" != "x:" then python_was_found="yes, using Python $PYTHON_VERSION" else python_was_found="no, requires Python >= 2.6" fi + cat << _HW_EOF_ > config.herwig ***************************************************** *** $PACKAGE_STRING configuration summary *** Please include this information in bug reports! ***-------------------------------------------------- *** Prefix: $prefix *** *** BSM models: $enable_models *** UFO converter: ${python_was_found} *** *** Herwig debug mode: $enable_debug *** *** ThePEG: $with_thepeg *** ThePEG headers: $with_thepeg_headers *** *** GoSam: $with_gosam *** GoSam-Contrib: $with_gosam_contrib *** MadGraph: $with_madgraph *** njet: $with_njet *** OpenLoops: $with_openloops *** VBFNLO: $with_vbfnlo *** *** EvtGen: $with_evtgen *** GSL: $with_gsl *** boost: ${BOOST_CPPFLAGS:-system} *** Fastjet: ${fjconfig} *** *** Host: $host *** CC: $CCSTRING *** CXX: $CXXSTRING *** FC: $FCSTRING *** *** CXXFLAGS: $CXXFLAGS +*** FCFLAGS: $FCFLAGS ***************************************************** _HW_EOF_ ]) diff --git a/src/defaults/Shower.in b/src/defaults/Shower.in --- a/src/defaults/Shower.in +++ b/src/defaults/Shower.in @@ -1,321 +1,324 @@ # -*- ThePEG-repository -*- ############################################################ # 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 library HwMatching.so mkdir /Herwig/Shower cd /Herwig/Shower create Herwig::QTildeShowerHandler ShowerHandler newdef ShowerHandler:MPIHandler /Herwig/UnderlyingEvent/MPIHandler newdef ShowerHandler:RemDecayer /Herwig/Partons/RemnantDecayer # use LO PDFs for Shower, can be changed later newdef ShowerHandler:PDFA /Herwig/Partons/ShowerLOPDF newdef ShowerHandler:PDFB /Herwig/Partons/ShowerLOPDF newdef ShowerHandler:PDFARemnant /Herwig/Partons/RemnantPDF newdef ShowerHandler:PDFBRemnant /Herwig/Partons/RemnantPDF ##################################### # initial setup, don't change these! ##################################### create Herwig::SplittingGenerator SplittingGenerator create Herwig::ShowerAlphaQCD AlphaQCD create Herwig::ShowerAlphaQED AlphaQED create Herwig::PartnerFinder PartnerFinder newdef PartnerFinder:PartnerMethod 0 newdef PartnerFinder:ScaleChoice 0 create Herwig::KinematicsReconstructor KinematicsReconstructor newdef KinematicsReconstructor:ReconstructionOption Colour3 newdef KinematicsReconstructor:InitialStateReconOption SofterFraction newdef KinematicsReconstructor:InitialInitialBoostOption LongTransBoost newdef KinematicsReconstructor:FinalFinalWeight Yes newdef /Herwig/Partons/RemnantDecayer:AlphaS AlphaQCD newdef /Herwig/Partons/RemnantDecayer:AlphaEM AlphaQED newdef ShowerHandler:PartnerFinder PartnerFinder newdef ShowerHandler:KinematicsReconstructor KinematicsReconstructor newdef ShowerHandler:SplittingGenerator SplittingGenerator newdef ShowerHandler:SpinCorrelations Yes newdef ShowerHandler:SoftCorrelations Singular ################################################################## # 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 ################################################################## newdef ShowerHandler:IntrinsicPtGaussian 2.2*GeV newdef ShowerHandler:IntrinsicPtBeta 0 newdef ShowerHandler:IntrinsicPtGamma 0*GeV newdef ShowerHandler:IntrinsicPtIptmax 0*GeV ############################################################# # Set up truncated shower handler. ############################################################# create Herwig::PowhegShowerHandler PowhegShowerHandler set PowhegShowerHandler:MPIHandler /Herwig/UnderlyingEvent/MPIHandler set PowhegShowerHandler:RemDecayer /Herwig/Partons/RemnantDecayer newdef PowhegShowerHandler:PDFA /Herwig/Partons/ShowerLOPDF newdef PowhegShowerHandler:PDFB /Herwig/Partons/ShowerLOPDF newdef PowhegShowerHandler:PDFARemnant /Herwig/Partons/RemnantPDF newdef PowhegShowerHandler:PDFBRemnant /Herwig/Partons/RemnantPDF newdef PowhegShowerHandler:MPIHandler /Herwig/UnderlyingEvent/MPIHandler newdef PowhegShowerHandler:RemDecayer /Herwig/Partons/RemnantDecayer newdef PowhegShowerHandler:PDFA /Herwig/Partons/ShowerLOPDF newdef PowhegShowerHandler:PDFB /Herwig/Partons/ShowerLOPDF newdef PowhegShowerHandler:PDFARemnant /Herwig/Partons/RemnantPDF newdef PowhegShowerHandler:PDFBRemnant /Herwig/Partons/RemnantPDF newdef PowhegShowerHandler:PartnerFinder PartnerFinder newdef PowhegShowerHandler:KinematicsReconstructor KinematicsReconstructor newdef PowhegShowerHandler:SplittingGenerator SplittingGenerator newdef PowhegShowerHandler:Interactions QCDandQED newdef PowhegShowerHandler:SpinCorrelations Yes newdef PowhegShowerHandler:SoftCorrelations Singular newdef PowhegShowerHandler:IntrinsicPtGaussian 2.2*GeV newdef PowhegShowerHandler:IntrinsicPtBeta 0 newdef PowhegShowerHandler:IntrinsicPtGamma 0*GeV newdef PowhegShowerHandler:IntrinsicPtIptmax 0*GeV newdef PowhegShowerHandler:EvolutionScheme DotProduct ############################################################# # End of interesting user servicable section. # # Anything that follows below should only be touched if you # know what you're doing. # # Really. ############################################################# # # a few default values newdef ShowerHandler:MECorrMode 1 newdef ShowerHandler:EvolutionScheme DotProduct newdef AlphaQCD:ScaleFactor 1.0 newdef AlphaQCD:NPAlphaS 2 newdef AlphaQCD:Qmin 0.935 newdef AlphaQCD:NumberOfLoops 2 newdef AlphaQCD:AlphaIn 0.1186 # # # Lets set up all the splittings create Herwig::HalfHalfOneSplitFn QtoQGammaSplitFn set QtoQGammaSplitFn:InteractionType QED set QtoQGammaSplitFn:ColourStructure ChargedChargedNeutral set QtoQGammaSplitFn:AngularOrdered Yes set QtoQGammaSplitFn:StrictAO Yes create Herwig::HalfHalfOneSplitFn QtoQGSplitFn newdef QtoQGSplitFn:InteractionType QCD newdef QtoQGSplitFn:ColourStructure TripletTripletOctet set QtoQGSplitFn:AngularOrdered Yes set QtoQGSplitFn:StrictAO Yes create Herwig::OneOneOneSplitFn GtoGGSplitFn newdef GtoGGSplitFn:InteractionType QCD newdef GtoGGSplitFn:ColourStructure OctetOctetOctet set GtoGGSplitFn:AngularOrdered Yes set GtoGGSplitFn:StrictAO Yes create Herwig::OneOneOneMassiveSplitFn WtoWGammaSplitFn newdef WtoWGammaSplitFn:InteractionType QED newdef WtoWGammaSplitFn:ColourStructure ChargedChargedNeutral set WtoWGammaSplitFn:AngularOrdered Yes set WtoWGammaSplitFn:StrictAO Yes create Herwig::OneHalfHalfSplitFn GtoQQbarSplitFn newdef GtoQQbarSplitFn:InteractionType QCD newdef GtoQQbarSplitFn:ColourStructure OctetTripletTriplet set GtoQQbarSplitFn:AngularOrdered Yes set GtoQQbarSplitFn:StrictAO Yes create Herwig::OneHalfHalfSplitFn GammatoQQbarSplitFn newdef GammatoQQbarSplitFn:InteractionType QED newdef GammatoQQbarSplitFn:ColourStructure NeutralChargedCharged set GammatoQQbarSplitFn:AngularOrdered Yes set GammatoQQbarSplitFn:StrictAO Yes create Herwig::HalfOneHalfSplitFn QtoGQSplitFn newdef QtoGQSplitFn:InteractionType QCD newdef QtoGQSplitFn:ColourStructure TripletOctetTriplet set QtoGQSplitFn:AngularOrdered Yes set QtoGQSplitFn:StrictAO Yes create Herwig::HalfOneHalfSplitFn QtoGammaQSplitFn newdef QtoGammaQSplitFn:InteractionType QED newdef QtoGammaQSplitFn:ColourStructure ChargedNeutralCharged set QtoGammaQSplitFn:AngularOrdered Yes set QtoGammaQSplitFn:StrictAO Yes # # Now the Sudakovs create Herwig::PTCutOff PTCutOff newdef PTCutOff:pTmin 0.958*GeV create Herwig::SudakovFormFactor SudakovCommon newdef SudakovCommon:Alpha AlphaQCD newdef SudakovCommon:Cutoff PTCutOff newdef SudakovCommon:PDFmax 1.0 cp SudakovCommon QtoQGSudakov newdef QtoQGSudakov:SplittingFunction QtoQGSplitFn newdef QtoQGSudakov:PDFmax 1.9 cp SudakovCommon QtoQGammaSudakov set QtoQGammaSudakov:SplittingFunction QtoQGammaSplitFn set QtoQGammaSudakov:Alpha AlphaQED set QtoQGammaSudakov:PDFmax 1.9 cp QtoQGammaSudakov LtoLGammaSudakov cp PTCutOff LtoLGammaPTCutOff # Technical parameter to stop evolution. set LtoLGammaPTCutOff:pTmin 0.000001 set LtoLGammaSudakov:Cutoff LtoLGammaPTCutOff cp SudakovCommon GtoGGSudakov newdef GtoGGSudakov:SplittingFunction GtoGGSplitFn newdef GtoGGSudakov:PDFmax 2.0 cp SudakovCommon WtoWGammaSudakov newdef WtoWGammaSudakov:SplittingFunction WtoWGammaSplitFn set WtoWGammaSudakov:Alpha AlphaQED cp SudakovCommon GtoQQbarSudakov newdef GtoQQbarSudakov:SplittingFunction GtoQQbarSplitFn newdef GtoQQbarSudakov:PDFmax 120.0 cp SudakovCommon GammatoQQbarSudakov newdef GammatoQQbarSudakov:SplittingFunction GammatoQQbarSplitFn set GammatoQQbarSudakov:Alpha AlphaQED newdef GammatoQQbarSudakov:PDFmax 120.0 cp SudakovCommon GtobbbarSudakov newdef GtobbbarSudakov:SplittingFunction GtoQQbarSplitFn newdef GtobbbarSudakov:PDFmax 40000.0 cp SudakovCommon GtoccbarSudakov newdef GtoccbarSudakov:SplittingFunction GtoQQbarSplitFn newdef GtoccbarSudakov:PDFmax 2000.0 cp SudakovCommon QtoGQSudakov newdef QtoGQSudakov:SplittingFunction QtoGQSplitFn cp SudakovCommon QtoGammaQSudakov newdef QtoGammaQSudakov:SplittingFunction QtoGammaQSplitFn set QtoGammaQSudakov:Alpha AlphaQED cp SudakovCommon utoGuSudakov newdef utoGuSudakov:SplittingFunction QtoGQSplitFn newdef utoGuSudakov:PDFFactor OverOneMinusZ newdef utoGuSudakov:PDFmax 5.0 cp SudakovCommon dtoGdSudakov newdef dtoGdSudakov:SplittingFunction QtoGQSplitFn newdef dtoGdSudakov:PDFFactor OverOneMinusZ # # Now add the final splittings # do SplittingGenerator:AddFinalSplitting u->u,g; QtoQGSudakov do SplittingGenerator:AddFinalSplitting d->d,g; QtoQGSudakov do SplittingGenerator:AddFinalSplitting s->s,g; QtoQGSudakov do SplittingGenerator:AddFinalSplitting c->c,g; QtoQGSudakov do SplittingGenerator:AddFinalSplitting b->b,g; QtoQGSudakov do SplittingGenerator:AddFinalSplitting t->t,g; QtoQGSudakov # do SplittingGenerator:AddFinalSplitting g->g,g; GtoGGSudakov # do SplittingGenerator:AddFinalSplitting g->u,ubar; GtoQQbarSudakov do SplittingGenerator:AddFinalSplitting g->d,dbar; GtoQQbarSudakov do SplittingGenerator:AddFinalSplitting g->s,sbar; GtoQQbarSudakov do SplittingGenerator:AddFinalSplitting g->c,cbar; GtoccbarSudakov do SplittingGenerator:AddFinalSplitting g->b,bbar; GtobbbarSudakov do SplittingGenerator:AddFinalSplitting g->t,tbar; GtoQQbarSudakov # do SplittingGenerator:AddFinalSplitting gamma->u,ubar; GammatoQQbarSudakov do SplittingGenerator:AddFinalSplitting gamma->d,dbar; GammatoQQbarSudakov do SplittingGenerator:AddFinalSplitting gamma->s,sbar; GammatoQQbarSudakov do SplittingGenerator:AddFinalSplitting gamma->c,cbar; GammatoQQbarSudakov do SplittingGenerator:AddFinalSplitting gamma->b,bbar; GammatoQQbarSudakov do SplittingGenerator:AddFinalSplitting gamma->t,tbar; GammatoQQbarSudakov do SplittingGenerator:AddFinalSplitting gamma->e-,e+; GammatoQQbarSudakov do SplittingGenerator:AddFinalSplitting gamma->mu-,mu+; GammatoQQbarSudakov do SplittingGenerator:AddFinalSplitting gamma->tau-,tau+; GammatoQQbarSudakov # do SplittingGenerator:AddFinalSplitting u->u,gamma; QtoQGammaSudakov do SplittingGenerator:AddFinalSplitting d->d,gamma; QtoQGammaSudakov do SplittingGenerator:AddFinalSplitting s->s,gamma; QtoQGammaSudakov do SplittingGenerator:AddFinalSplitting c->c,gamma; QtoQGammaSudakov do SplittingGenerator:AddFinalSplitting b->b,gamma; QtoQGammaSudakov do SplittingGenerator:AddFinalSplitting t->t,gamma; QtoQGammaSudakov do SplittingGenerator:AddFinalSplitting e-->e-,gamma; LtoLGammaSudakov do SplittingGenerator:AddFinalSplitting mu-->mu-,gamma; LtoLGammaSudakov do SplittingGenerator:AddFinalSplitting tau-->tau-,gamma; LtoLGammaSudakov do SplittingGenerator:AddFinalSplitting W+->W+,gamma; WtoWGammaSudakov # # Now lets add the initial splittings. Remember the form a->b,c; means # that the current particle b is given and we backward branch to new # particle a which is initial state and new particle c which is final state # do SplittingGenerator:AddInitialSplitting u->u,g; QtoQGSudakov do SplittingGenerator:AddInitialSplitting d->d,g; QtoQGSudakov do SplittingGenerator:AddInitialSplitting s->s,g; QtoQGSudakov do SplittingGenerator:AddInitialSplitting c->c,g; QtoQGSudakov do SplittingGenerator:AddInitialSplitting b->b,g; QtoQGSudakov do SplittingGenerator:AddInitialSplitting u->u,gamma; QtoQGammaSudakov do SplittingGenerator:AddInitialSplitting d->d,gamma; QtoQGammaSudakov do SplittingGenerator:AddInitialSplitting s->s,gamma; QtoQGammaSudakov do SplittingGenerator:AddInitialSplitting c->c,gamma; QtoQGammaSudakov do SplittingGenerator:AddInitialSplitting b->b,gamma; QtoQGammaSudakov do SplittingGenerator:AddInitialSplitting t->t,gamma; QtoQGammaSudakov do SplittingGenerator:AddInitialSplitting g->g,g; GtoGGSudakov # do SplittingGenerator:AddInitialSplitting g->d,dbar; GtoQQbarSudakov do SplittingGenerator:AddInitialSplitting g->u,ubar; GtoQQbarSudakov do SplittingGenerator:AddInitialSplitting g->s,sbar; GtoQQbarSudakov do SplittingGenerator:AddInitialSplitting g->c,cbar; GtoccbarSudakov do SplittingGenerator:AddInitialSplitting g->b,bbar; GtobbbarSudakov # do SplittingGenerator:AddInitialSplitting gamma->d,dbar; GammatoQQbarSudakov do SplittingGenerator:AddInitialSplitting gamma->u,ubar; GammatoQQbarSudakov do SplittingGenerator:AddInitialSplitting gamma->s,sbar; GammatoQQbarSudakov do SplittingGenerator:AddInitialSplitting gamma->c,cbar; GammatoQQbarSudakov do SplittingGenerator:AddInitialSplitting gamma->b,bbar; GammatoQQbarSudakov +do SplittingGenerator:AddInitialSplitting gamma->e-,e+; GammatoQQbarSudakov +do SplittingGenerator:AddInitialSplitting gamma->mu-,mu+; GammatoQQbarSudakov +do SplittingGenerator:AddInitialSplitting gamma->tau-,tau+; GammatoQQbarSudakov # do SplittingGenerator:AddInitialSplitting d->g,d; dtoGdSudakov do SplittingGenerator:AddInitialSplitting u->g,u; utoGuSudakov do SplittingGenerator:AddInitialSplitting s->g,s; QtoGQSudakov do SplittingGenerator:AddInitialSplitting c->g,c; QtoGQSudakov do SplittingGenerator:AddInitialSplitting b->g,b; QtoGQSudakov do SplittingGenerator:AddInitialSplitting dbar->g,dbar; dtoGdSudakov do SplittingGenerator:AddInitialSplitting ubar->g,ubar; utoGuSudakov do SplittingGenerator:AddInitialSplitting sbar->g,sbar; QtoGQSudakov do SplittingGenerator:AddInitialSplitting cbar->g,cbar; QtoGQSudakov do SplittingGenerator:AddInitialSplitting bbar->g,bbar; QtoGQSudakov # do SplittingGenerator:AddInitialSplitting d->gamma,d; QtoGammaQSudakov do SplittingGenerator:AddInitialSplitting u->gamma,u; QtoGammaQSudakov do SplittingGenerator:AddInitialSplitting s->gamma,s; QtoGammaQSudakov do SplittingGenerator:AddInitialSplitting c->gamma,c; QtoGammaQSudakov do SplittingGenerator:AddInitialSplitting b->gamma,b; QtoGammaQSudakov do SplittingGenerator:AddInitialSplitting dbar->gamma,dbar; QtoGammaQSudakov do SplittingGenerator:AddInitialSplitting ubar->gamma,ubar; QtoGammaQSudakov do SplittingGenerator:AddInitialSplitting sbar->gamma,sbar; QtoGammaQSudakov do SplittingGenerator:AddInitialSplitting cbar->gamma,cbar; QtoGammaQSudakov do SplittingGenerator:AddInitialSplitting bbar->gamma,bbar; QtoGammaQSudakov