Hello community,

here is the log from the commit of package ThePEG for openSUSE:Factory checked 
in at 2018-05-15 10:04:29
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ThePEG (Old)
 and      /work/SRC/openSUSE:Factory/.ThePEG.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "ThePEG"

Tue May 15 10:04:29 2018 rev:12 rq:603190 version:2.1.3

Changes:
--------
--- /work/SRC/openSUSE:Factory/ThePEG/ThePEG.changes    2017-11-03 
16:28:43.175760788 +0100
+++ /work/SRC/openSUSE:Factory/.ThePEG.new/ThePEG.changes       2018-05-15 
10:31:01.993408320 +0200
@@ -1,0 +2,6 @@
+Mon Apr 30 21:27:55 UTC 2018 - badshah...@gmail.com
+
+- Update to version 2.1.3:
+  * Use std::array<> where suitable
+
+-------------------------------------------------------------------

Old:
----
  ThePEG-2.1.2.tar.bz2

New:
----
  ThePEG-2.1.3.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ ThePEG.spec ++++++
--- /var/tmp/diff_new_pack.0IA2g8/_old  2018-05-15 10:31:02.837377321 +0200
+++ /var/tmp/diff_new_pack.0IA2g8/_new  2018-05-15 10:31:02.841377174 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package ThePEG
 #
-# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -23,10 +23,10 @@
 #
 
 Name:           ThePEG
-Version:        2.1.2
+Version:        2.1.3
 Release:        0
 Summary:        Toolkit providing a common platform for event generators in C++
-License:        GPL-2.0
+License:        GPL-2.0-only
 Group:          Development/Libraries/C and C++
 Url:            http://home.thep.lu.se/~leif/ThePEG/
 Source:         
http://www.hepforge.org/archive/thepeg/%{name}-%{version}.tar.bz2

++++++ ThePEG-2.1.2.tar.bz2 -> ThePEG-2.1.3.tar.bz2 ++++++
++++ 2240 lines of diff (skipped)
++++    retrying with extended exclude list
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ThePEG-2.1.2/Config/std.h new/ThePEG-2.1.3/Config/std.h
--- old/ThePEG-2.1.2/Config/std.h       2017-05-03 16:38:25.000000000 +0200
+++ new/ThePEG-2.1.3/Config/std.h       2018-03-02 17:41:02.000000000 +0100
@@ -25,6 +25,7 @@
 #include <map>
 #include <set>
 #include <string>
+#include <array>
 #include <vector>
 #include <list>
 #include <iostream>
@@ -62,6 +63,7 @@
 
 namespace ThePEG {
 
+using std::array;
 using std::deque;
 using std::stack;
 using std::vector;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ThePEG-2.1.2/Doc/fixinterfaces.pl new/ThePEG-2.1.3/Doc/fixinterfaces.pl
--- old/ThePEG-2.1.2/Doc/fixinterfaces.pl       2017-11-01 11:57:38.000000000 
+0100
+++ new/ThePEG-2.1.3/Doc/fixinterfaces.pl       2018-04-05 13:05:56.000000000 
+0200
@@ -1,4 +1,4 @@
-#!/usr/bin/perl -pi
+#!/opt/local/bin/perl -pi
 s|<interface>(\S+?)::(\S+?)</interface>|<a 
href="\1Interfaces.html#\2"><code>\1:\
 :\2</code></a>|g;
 s|<interface>(\S+?)</interface>|<a href="#\1"><code>\1</code></a>|g;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ThePEG-2.1.2/EventRecord/Event.cc new/ThePEG-2.1.3/EventRecord/Event.cc
--- old/ThePEG-2.1.2/EventRecord/Event.cc       2017-05-03 16:38:25.000000000 
+0200
+++ new/ThePEG-2.1.3/EventRecord/Event.cc       2017-12-12 15:05:18.000000000 
+0100
@@ -189,6 +189,14 @@
   if ( e.handler() ) os << "performed by "
                        <<  EventConfig::nameHandler(e.handler());
   os << endl;
+  os << "Weight: " << e.weight();
+  if ( ! e.optionalWeights().empty() ) {
+    os << " [ ";
+    for ( auto w : e.optionalWeights() )
+      os << w.first << ':' << w.second << ' ';
+    os << " ]";
+  }
+  os << endl;
   for ( unsigned int i = 0; i < e.collisions().size(); ++i ) {
     os << string(78, '=') << endl;
     if ( e.collisions().size() != 1 ) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ThePEG-2.1.2/Helicity/Vertex/Vector/VVVVVertex.h 
new/ThePEG-2.1.3/Helicity/Vertex/Vector/VVVVVertex.h
--- old/ThePEG-2.1.2/Helicity/Vertex/Vector/VVVVVertex.h        2017-05-03 
16:37:35.000000000 +0200
+++ new/ThePEG-2.1.3/Helicity/Vertex/Vector/VVVVVertex.h        2018-03-02 
18:14:40.000000000 +0100
@@ -152,17 +152,17 @@
   /**  
    * Order of the particles.
    */
-  int _iorder[4];
+  array<int,4> _iorder;
 
   /**
    *  Intermediate particles
    */
-  tcPDPtr _inter[2];
+  array<tcPDPtr,2> _inter;
 
   /**
    * Couplings of the intermediate particles.
    */
-  Complex _coup[2];
+  array<Complex,2> _coup;
 
 };
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ThePEG-2.1.2/Interface/Parameter.cc new/ThePEG-2.1.3/Interface/Parameter.cc
--- old/ThePEG-2.1.2/Interface/Parameter.cc     2017-05-03 16:38:26.000000000 
+0200
+++ new/ThePEG-2.1.3/Interface/Parameter.cc     2018-04-05 11:59:10.000000000 
+0200
@@ -77,6 +77,7 @@
 namespace {
   const std::map<std::string, ThePEG::Energy> 
   energymapping = {
+       {"TeV",ThePEG::TeV},
        {"GeV",ThePEG::GeV},
        {"MeV",ThePEG::MeV}
   };
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ThePEG-2.1.2/LesHouches/LesHouches.h 
new/ThePEG-2.1.3/LesHouches/LesHouches.h
--- old/ThePEG-2.1.2/LesHouches/LesHouches.h    2017-05-03 16:38:26.000000000 
+0200
+++ new/ThePEG-2.1.3/LesHouches/LesHouches.h    2018-03-02 17:49:44.000000000 
+0100
@@ -161,7 +161,7 @@
     ISTUP.resize(NUP);
     MOTHUP.resize(NUP);
     ICOLUP.resize(NUP);
-    PUP.resize(NUP, std::vector<double>(5));
+    PUP.resize(NUP);
     VTIMUP.resize(NUP);
     SPINUP.resize(NUP);
   }
@@ -231,7 +231,7 @@
    * Lab frame momentum (Px, Py, Pz, E and M in GeV) for the particle
    * entries in this event.
    */
-  vector< vector<double> > PUP;
+  vector< array<double,5> > PUP;
 
   /**
    * Invariant lifetime (c*tau, distance from production to decay im
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ThePEG-2.1.2/LesHouches/LesHouchesReader.cc 
new/ThePEG-2.1.3/LesHouches/LesHouchesReader.cc
--- old/ThePEG-2.1.2/LesHouches/LesHouchesReader.cc     2017-05-03 
16:38:26.000000000 +0200
+++ new/ThePEG-2.1.3/LesHouches/LesHouchesReader.cc     2018-03-02 
17:41:02.000000000 +0100
@@ -1210,7 +1210,7 @@
   pos = mread(pos, hepeup.MOTHUP[0], hepeup.NUP);
   hepeup.ICOLUP.resize(hepeup.NUP);
   pos = mread(pos, hepeup.ICOLUP[0], hepeup.NUP);
-  hepeup.PUP.resize(hepeup.NUP, vector<double>(5));
+  hepeup.PUP.resize(hepeup.NUP);
   for ( int i = 0; i < hepeup.NUP; ++i ) 
     pos = mread(pos, hepeup.PUP[i][0], 5);
   hepeup.VTIMUP.resize(hepeup.NUP);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ThePEG-2.1.2/LesHouches/MadGraphOneCut.cc 
new/ThePEG-2.1.3/LesHouches/MadGraphOneCut.cc
--- old/ThePEG-2.1.2/LesHouches/MadGraphOneCut.cc       2017-05-03 
16:38:26.000000000 +0200
+++ new/ThePEG-2.1.3/LesHouches/MadGraphOneCut.cc       2018-03-02 
17:41:02.000000000 +0100
@@ -33,30 +33,30 @@
 }
 
 Energy MadGraphOneCut::minKT(tcPDPtr p) const {
-  if ( cutType != PT || !checkType(p) ) return ZERO;
+  if ( cutType != Cut::PT || !checkType(p) ) return ZERO;
   return theCut*GeV;
 }
 
 double MadGraphOneCut::minEta(tcPDPtr p) const {
-  if ( cutType != ETA || !checkType(p) ) return -Constants::MaxRapidity;
+  if ( cutType != Cut::ETA || !checkType(p) ) return -Constants::MaxRapidity;
   return -theCut;
 }
 
 double MadGraphOneCut::maxEta(tcPDPtr p) const {
-  if ( cutType != ETA || !checkType(p) ) return Constants::MaxRapidity;
+  if ( cutType != Cut::ETA || !checkType(p) ) return Constants::MaxRapidity;
   return theCut;
 }
 
 Energy MadGraphOneCut::minMaxKT(tcPDPtr p) const {
-  if ( cutType != XPT || !checkType(p) ) return ZERO;
+  if ( cutType != Cut::XPT || !checkType(p) ) return ZERO;
   return theCut*GeV;  
 }
 
 bool MadGraphOneCut::passCuts(tcCutsPtr parent,
                              tcPDPtr ptype, LorentzMomentum p) const {
   if ( !checkType(ptype) ) return true;
-  if ( cutType == PT ) return p.perp() > theCut*GeV;
-  if ( cutType == ETA ) {
+  if ( cutType == Cut::PT ) return p.perp() > theCut*GeV;
+  if ( cutType == Cut::ETA ) {
     double y = p.rapidity() + parent->Y() + parent->currentYHat();
     return abs(p.mt()*sinh(y)) < p.perp()*sinh(theCut);
   }
@@ -70,18 +70,18 @@
   case ParticleID::s:
   case ParticleID::c:
   case ParticleID::g:
-    return particleType == JET;
+    return particleType == P::JET;
   case ParticleID::b:
-    return particleType == JET || particleType == BOT;
+    return particleType == P::JET || particleType == P::BOT;
   case ParticleID::gamma:
-    return particleType == PHO;
+    return particleType == P::PHO;
   case ParticleID::eminus:
   case ParticleID::nu_e:
   case ParticleID::muminus:
   case ParticleID::nu_mu:
   case ParticleID::tauminus:
   case ParticleID::nu_tau:
-    return particleType == LEP;
+    return particleType == P::LEP;
   default:
     return false;
   }
@@ -106,51 +106,51 @@
      "about cuts. It is also possible to create objects by hand and use "
      "it as any other OneCutBase object.");
 
-  static Switch<MadGraphOneCut,CutType> interfaceCutType
+  static Switch<MadGraphOneCut,Cut> interfaceCutType
     ("CutType",
      "The type of cut this object will do.",
-     &MadGraphOneCut::cutType, PT, true, false);
+     &MadGraphOneCut::cutType, Cut::PT, true, false);
   static SwitchOption interfaceCutTypePT
     (interfaceCutType,
      "MinPT",
      "The minimum transverse momentum of a particle.",
-     PT);
+     Cut::PT);
   static SwitchOption interfaceCutTypeMaxEta
     (interfaceCutType,
      "MaxEta",
      "The maximum (absolute value of) pseudo-rapidity of a particle.",
-     ETA);
+     Cut::ETA);
   static SwitchOption interfaceCutTypeMinMaxPT
     (interfaceCutType,
      "MinMaxPT",
      "The minimum transverse momentum of the particle with largest "
      "transverse momentum.",
-     XPT);
+     Cut::XPT);
 
-  static Switch<MadGraphOneCut,PType> interfaceParticleType
+  static Switch<MadGraphOneCut,P> interfaceParticleType
     ("ParticleType",
      "The types of particles this cut is applied to.",
-     &MadGraphOneCut::particleType, JET, true, false);
+     &MadGraphOneCut::particleType, P::JET, true, false);
   static SwitchOption interfaceParticleTypeJets
     (interfaceParticleType,
      "Jets",
      "The cut applies only to coloured particles (jets).",
-     JET);
+     P::JET);
   static SwitchOption interfaceParticleTypeLeptons
     (interfaceParticleType,
      "Leptons",
      "The cut applies only to leptons.",
-     LEP);
+     P::LEP);
   static SwitchOption interfaceParticleTypePhotons
     (interfaceParticleType,
      "Photons",
      "The cut applies only to photons.",
-     PHO);
+     P::PHO);
   static SwitchOption interfaceParticleTypeBottom
     (interfaceParticleType,
      "Bottom",
      "The cut applies only to bottom quarks.",
-     BOT);
+     P::BOT);
 
   static Parameter<MadGraphOneCut,double> interfaceCut
     ("Cut",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ThePEG-2.1.2/LesHouches/MadGraphOneCut.h 
new/ThePEG-2.1.3/LesHouches/MadGraphOneCut.h
--- old/ThePEG-2.1.2/LesHouches/MadGraphOneCut.h        2017-05-03 
16:38:26.000000000 +0200
+++ new/ThePEG-2.1.3/LesHouches/MadGraphOneCut.h        2018-03-02 
17:41:02.000000000 +0100
@@ -32,7 +32,7 @@
   /**
    * Enumerate the different kinds of cuts made by MadGraph.
    */
-  enum CutType {
+  enum class Cut {
     PT,  /**< The minimum transverse momentum of a particle. */
     ETA, /**< The maximum (absolute value of) pseudo-rapidity of a particle. */
     XPT  /**< The minimum transverse momentum of the particle with
@@ -42,7 +42,7 @@
   /**
    * Enumerate the types of particles the cut is made on.
    */
-  enum PType {
+  enum class P {
     JET, /**< The cut applies only to coloured particles. */
     LEP, /**< The cut applies only to leptons. */
     PHO, /**< The cut applies only to photons. */
@@ -56,7 +56,7 @@
   /**
    * The default constructor.
    */
-  MadGraphOneCut() : cutType(PT), particleType(JET), theCut(0.0) {}
+  MadGraphOneCut() : cutType(Cut::PT), particleType(P::JET), theCut(0.0) {}
 
   /**
    * The constructor used by the MadGraphReader.
@@ -64,7 +64,7 @@
    * @param p is the type of particles the cut is applied to.
    * @param c is the value of the cut (in units of GeV where applicable).
    */
-  MadGraphOneCut(CutType t, PType p, double c)
+  MadGraphOneCut(Cut t, P p, double c)
     : cutType(t), particleType(p), theCut(c) {}
   //@}
 
@@ -163,12 +163,12 @@
   /**
    * The type of this cut.
    */
-  CutType cutType;
+  Cut cutType;
 
   /**
    * The type of particles this cut applies to.
    */
-  PType particleType;
+  P particleType;
 
   /**
    * The value of the cut to be applied.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ThePEG-2.1.2/LesHouches/MadGraphReader.cc 
new/ThePEG-2.1.3/LesHouches/MadGraphReader.cc
--- old/ThePEG-2.1.2/LesHouches/MadGraphReader.cc       2017-05-03 
16:38:26.000000000 +0200
+++ new/ThePEG-2.1.3/LesHouches/MadGraphReader.cc       2018-03-02 
17:41:02.000000000 +0100
@@ -300,7 +300,7 @@
     for ( int i = 0; i < hepeup.NUP; ++i ) cfile >> hepeup.SPINUP[i];
   }
 
-  hepeup.PUP.resize(hepeup.NUP, vector<double>(5));
+  hepeup.PUP.resize(hepeup.NUP);
   for ( int i = 0; i < hepeup.NUP; ++i ) {
     if ( !cfile.readline() ) return false;
     int dummy = 0;
@@ -389,46 +389,46 @@
   vector<string> tnames;
   for ( map<string,double>::iterator i = cuts.begin(); i != cuts.end(); ++i ) {
     if ( i->second <= 0.0 ) continue;
-    MadGraphOneCut::CutType t = MadGraphOneCut::PT;
+    MadGraphOneCut::Cut t = MadGraphOneCut::Cut::PT;
     char p = 0;
     if ( i->first.substr(0, 2) == "pt" ) {
-      t = MadGraphOneCut::PT;
+      t = MadGraphOneCut::Cut::PT;
       p = i->first[2];
     }
     else if  ( i->first.substr(0, 3) == "eta" ) {
-      t = MadGraphOneCut::ETA;
+      t = MadGraphOneCut::Cut::ETA;
       p = i->first[3];
     }
     else if  ( i->first.substr(0, 3) == "xpt" ) {
-      t = MadGraphOneCut::XPT;
+      t = MadGraphOneCut::Cut::XPT;
       p = i->first[3];
     }
     if ( p ) {
-      MadGraphOneCut::PType pt = MadGraphOneCut::JET;
+      MadGraphOneCut::P pt = MadGraphOneCut::P::JET;
       switch ( p ) {
-      case 'j':        pt = MadGraphOneCut::JET; break;
-      case 'b':        pt = MadGraphOneCut::BOT; break;
-      case 'a':        pt = MadGraphOneCut::PHO; break;
-      case 'l':        pt = MadGraphOneCut::LEP; break;
+      case 'j':        pt = MadGraphOneCut::P::JET; break;
+      case 'b':        pt = MadGraphOneCut::P::BOT; break;
+      case 'a':        pt = MadGraphOneCut::P::PHO; break;
+      case 'l':        pt = MadGraphOneCut::P::LEP; break;
       }
       ones.push_back(new_ptr(MadGraphOneCut(t, pt, i->second)));
       onames.push_back(i->first);
       continue;
     }
     if ( i->first.substr(0, 2) == "dr" || i->first.substr(0, 2) == "mm" ) {
-      MadGraphTwoCut::CutType tt = MadGraphTwoCut::DELTAR;
-      if ( i->first.substr(0, 2) == "mm" ) tt = MadGraphTwoCut::INVMASS;
-      MadGraphTwoCut::PPType pp = MadGraphTwoCut::JETJET;
-      if ( i->first.substr(2, 2) == "jj" ) pp = MadGraphTwoCut::JETJET;
-      else if ( i->first.substr(2, 2) == "bb" )        pp = 
MadGraphTwoCut::BOTBOT;
-      else if ( i->first.substr(2, 2) == "aa" )        pp = 
MadGraphTwoCut::PHOPHO;
-      else if ( i->first.substr(2, 2) == "ll" )        pp = 
MadGraphTwoCut::LEPLEP;
-      else if ( i->first.substr(2, 2) == "bj" )        pp = 
MadGraphTwoCut::BOTJET;
-      else if ( i->first.substr(2, 2) == "aj" )        pp = 
MadGraphTwoCut::PHOJET;
-      else if ( i->first.substr(2, 2) == "jl" )        pp = 
MadGraphTwoCut::JETLEP;
-      else if ( i->first.substr(2, 2) == "ab" )        pp = 
MadGraphTwoCut::PHOBOT;
-      else if ( i->first.substr(2, 2) == "bl" )        pp = 
MadGraphTwoCut::BOTLEP;
-      else if ( i->first.substr(2, 2) == "al" )        pp = 
MadGraphTwoCut::PHOLEP;
+      MadGraphTwoCut::Cut tt = MadGraphTwoCut::Cut::DELTAR;
+      if ( i->first.substr(0, 2) == "mm" ) tt = MadGraphTwoCut::Cut::INVMASS;
+      MadGraphTwoCut::PP pp = MadGraphTwoCut::PP::JETJET;
+      if ( i->first.substr(2, 2) == "jj" ) pp = MadGraphTwoCut::PP::JETJET;
+      else if ( i->first.substr(2, 2) == "bb" )        pp = 
MadGraphTwoCut::PP::BOTBOT;
+      else if ( i->first.substr(2, 2) == "aa" )        pp = 
MadGraphTwoCut::PP::PHOPHO;
+      else if ( i->first.substr(2, 2) == "ll" )        pp = 
MadGraphTwoCut::PP::LEPLEP;
+      else if ( i->first.substr(2, 2) == "bj" )        pp = 
MadGraphTwoCut::PP::BOTJET;
+      else if ( i->first.substr(2, 2) == "aj" )        pp = 
MadGraphTwoCut::PP::PHOJET;
+      else if ( i->first.substr(2, 2) == "jl" )        pp = 
MadGraphTwoCut::PP::JETLEP;
+      else if ( i->first.substr(2, 2) == "ab" )        pp = 
MadGraphTwoCut::PP::PHOBOT;
+      else if ( i->first.substr(2, 2) == "bl" )        pp = 
MadGraphTwoCut::PP::BOTLEP;
+      else if ( i->first.substr(2, 2) == "al" )        pp = 
MadGraphTwoCut::PP::PHOLEP;
       twos.push_back(new_ptr(MadGraphTwoCut(tt, pp, i->second)));
       tnames.push_back(i->first);
     }
@@ -470,46 +470,46 @@
   vector<string> tnames;
   for ( map<string,double>::iterator i = cuts.begin(); i != cuts.end(); ++i ) {
     if ( i->second <= 0.0 ) continue;
-    MadGraphOneCut::CutType t = MadGraphOneCut::PT;
+    MadGraphOneCut::Cut t = MadGraphOneCut::Cut::PT;
     char p = 0;
     if ( i->first.substr(0, 2) == "pt" ) {
-      t = MadGraphOneCut::PT;
+      t = MadGraphOneCut::Cut::PT;
       p = i->first[2];
     }
     else if  ( i->first.substr(0, 3) == "eta" ) {
-      t = MadGraphOneCut::ETA;
+      t = MadGraphOneCut::Cut::ETA;
       p = i->first[3];
     }
     else if  ( i->first.substr(0, 3) == "xpt" ) {
-      t = MadGraphOneCut::XPT;
+      t = MadGraphOneCut::Cut::XPT;
       p = i->first[3];
     }
     if ( p ) {
-      MadGraphOneCut::PType pt = MadGraphOneCut::JET;
+      MadGraphOneCut::P pt = MadGraphOneCut::P::JET;
       switch ( p ) {
-      case 'j':        pt = MadGraphOneCut::JET; break;
-      case 'b':        pt = MadGraphOneCut::BOT; break;
-      case 'a':        pt = MadGraphOneCut::PHO; break;
-      case 'l':        pt = MadGraphOneCut::LEP; break;
+      case 'j':        pt = MadGraphOneCut::P::JET; break;
+      case 'b':        pt = MadGraphOneCut::P::BOT; break;
+      case 'a':        pt = MadGraphOneCut::P::PHO; break;
+      case 'l':        pt = MadGraphOneCut::P::LEP; break;
       }
       ones.push_back(new_ptr(MadGraphOneCut(t, pt, i->second)));
       onames.push_back(i->first);
       continue;
     }
     if ( i->first.substr(0, 2) == "dr" || i->first.substr(0, 2) == "mm" ) {
-      MadGraphTwoCut::CutType tt = MadGraphTwoCut::DELTAR;
-      if ( i->first.substr(0, 2) == "mm" ) tt = MadGraphTwoCut::INVMASS;
-      MadGraphTwoCut::PPType pp = MadGraphTwoCut::JETJET;
-      if ( i->first.substr(2, 2) == "jj" ) pp = MadGraphTwoCut::JETJET;
-      else if ( i->first.substr(2, 2) == "bb" )        pp = 
MadGraphTwoCut::BOTBOT;
-      else if ( i->first.substr(2, 2) == "aa" )        pp = 
MadGraphTwoCut::PHOPHO;
-      else if ( i->first.substr(2, 2) == "ll" )        pp = 
MadGraphTwoCut::LEPLEP;
-      else if ( i->first.substr(2, 2) == "bj" )        pp = 
MadGraphTwoCut::BOTJET;
-      else if ( i->first.substr(2, 2) == "aj" )        pp = 
MadGraphTwoCut::PHOJET;
-      else if ( i->first.substr(2, 2) == "jl" )        pp = 
MadGraphTwoCut::JETLEP;
-      else if ( i->first.substr(2, 2) == "ab" )        pp = 
MadGraphTwoCut::PHOBOT;
-      else if ( i->first.substr(2, 2) == "bl" )        pp = 
MadGraphTwoCut::BOTLEP;
-      else if ( i->first.substr(2, 2) == "al" )        pp = 
MadGraphTwoCut::PHOLEP;
+      MadGraphTwoCut::Cut tt = MadGraphTwoCut::Cut::DELTAR;
+      if ( i->first.substr(0, 2) == "mm" ) tt = MadGraphTwoCut::Cut::INVMASS;
+      MadGraphTwoCut::PP pp = MadGraphTwoCut::PP::JETJET;
+      if ( i->first.substr(2, 2) == "jj" ) pp = MadGraphTwoCut::PP::JETJET;
+      else if ( i->first.substr(2, 2) == "bb" )        pp = 
MadGraphTwoCut::PP::BOTBOT;
+      else if ( i->first.substr(2, 2) == "aa" )        pp = 
MadGraphTwoCut::PP::PHOPHO;
+      else if ( i->first.substr(2, 2) == "ll" )        pp = 
MadGraphTwoCut::PP::LEPLEP;
+      else if ( i->first.substr(2, 2) == "bj" )        pp = 
MadGraphTwoCut::PP::BOTJET;
+      else if ( i->first.substr(2, 2) == "aj" )        pp = 
MadGraphTwoCut::PP::PHOJET;
+      else if ( i->first.substr(2, 2) == "jl" )        pp = 
MadGraphTwoCut::PP::JETLEP;
+      else if ( i->first.substr(2, 2) == "ab" )        pp = 
MadGraphTwoCut::PP::PHOBOT;
+      else if ( i->first.substr(2, 2) == "bl" )        pp = 
MadGraphTwoCut::PP::BOTLEP;
+      else if ( i->first.substr(2, 2) == "al" )        pp = 
MadGraphTwoCut::PP::PHOLEP;
       twos.push_back(new_ptr(MadGraphTwoCut(tt, pp, i->second)));
       tnames.push_back(i->first);
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ThePEG-2.1.2/LesHouches/MadGraphTwoCut.cc 
new/ThePEG-2.1.3/LesHouches/MadGraphTwoCut.cc
--- old/ThePEG-2.1.2/LesHouches/MadGraphTwoCut.cc       2017-05-03 
16:38:26.000000000 +0200
+++ new/ThePEG-2.1.3/LesHouches/MadGraphTwoCut.cc       2018-03-02 
17:41:02.000000000 +0100
@@ -33,7 +33,7 @@
 }
 
 Energy2 MadGraphTwoCut::minSij(tcPDPtr pi, tcPDPtr pj) const {
-  if ( !checkType(pi, pj) || cutType != INVMASS ) return ZERO;
+  if ( !checkType(pi, pj) || cutType != Cut::INVMASS ) return ZERO;
   return sqr(theCut*GeV);
 }
 
@@ -42,7 +42,7 @@
 }
 
 double MadGraphTwoCut::minDeltaR(tcPDPtr pi, tcPDPtr pj) const {
-  if ( !checkType(pi, pj) || cutType != DELTAR ) return 0.0;
+  if ( !checkType(pi, pj) || cutType != Cut::DELTAR ) return 0.0;
   return theCut;
 }
 
@@ -58,8 +58,8 @@
                              LorentzMomentum pi, LorentzMomentum pj,
                              bool inci, bool incj) const {
   if ( inci || incj || !checkType(pitype, pjtype) ) return true;
-  if ( cutType == INVMASS ) return (pi + pj).m2() > sqr(theCut*GeV);
-  if ( cutType == DELTAR ) {
+  if ( cutType == Cut::INVMASS ) return (pi + pj).m2() > sqr(theCut*GeV);
+  if ( cutType == Cut::DELTAR ) {
     double deta2 = sqr(pi.eta() - pj.eta());
     double dphi = abs(pi.phi() - pj.phi());
     if ( dphi > Constants::pi ) dphi = 2.0*Constants::pi - dphi;
@@ -68,66 +68,66 @@
   return true;
 }
 
-MadGraphTwoCut::PType MadGraphTwoCut::getType(tcPDPtr p) const {
+MadGraphTwoCut::P MadGraphTwoCut::getType(tcPDPtr p) const {
   switch ( abs(p->id()) ) {
   case ParticleID::d:
   case ParticleID::u:
   case ParticleID::s:
   case ParticleID::c:
   case ParticleID::g:
-    return JET;
+    return P::JET;
   case ParticleID::b:
-    return BOT;
+    return P::BOT;
   case ParticleID::gamma:
-    return PHO;
+    return P::PHO;
   case ParticleID::eminus:
   case ParticleID::nu_e:
   case ParticleID::muminus:
   case ParticleID::nu_mu:
   case ParticleID::tauminus:
   case ParticleID::nu_tau:
-    return LEP;
+    return P::LEP;
   default:
-    return NOT;
+    return P::NOT;
   }
 }
 
 bool MadGraphTwoCut::checkType(tcPDPtr pi, tcPDPtr pj) const {
   switch ( pairType ) {
-  case JETJET:
-    return getType(pi) == JET && getType(pj) == JET;
-  case LEPLEP:
-    if ( getType(pi) != LEP || getType(pj) != LEP ) return false;
-    if ( cutType == DELTAR ) return true;
-    // Special treatment for INVMASS.
+  case PP::JETJET:
+    return getType(pi) == P::JET && getType(pj) == P::JET;
+  case PP::LEPLEP:
+    if ( getType(pi) != P::LEP || getType(pj) != P::LEP ) return false;
+    if ( cutType == Cut::DELTAR ) return true;
+    // Special treatment for Cut::INVMASS.
     if ( pi->id()*pj->id() >= 0 ) return false;
     // OK we have a lepton-anti-lepton pair. I it the same lepton
     if ( pi->id() == -pj->id() ) return true;
     // NO, well is it the same family?
     if ( max(abs(pi->id()), abs(pj->id()))%2 ) return false;
     return abs(pi->id() + pj->id()) == 1 ;
-  case PHOPHO:
-    return getType(pi) == PHO && getType(pj) == PHO;
-  case BOTBOT:
-    return getType(pi) == BOT && getType(pj) == BOT;
-  case BOTJET:
-    return ( getType(pi) == BOT && getType(pj) == JET ) ||
-           ( getType(pi) == JET && getType(pj) == BOT );
-  case PHOJET:
-    return ( getType(pi) == PHO && getType(pj) == JET ) ||
-           ( getType(pi) == JET && getType(pj) == PHO );
-  case JETLEP:
-    return ( getType(pi) == LEP && getType(pj) == JET ) ||
-           ( getType(pi) == JET && getType(pj) == LEP );
-  case PHOBOT:
-    return ( getType(pi) == PHO && getType(pj) == BOT ) ||
-           ( getType(pi) == BOT && getType(pj) == PHO );
-  case BOTLEP:
-    return ( getType(pi) == BOT && getType(pj) == LEP ) ||
-           ( getType(pi) == LEP && getType(pj) == BOT );
-  case PHOLEP:
-    return ( getType(pi) == PHO && getType(pj) == LEP ) ||
-           ( getType(pi) == LEP && getType(pj) == PHO );
+  case PP::PHOPHO:
+    return getType(pi) == P::PHO && getType(pj) == P::PHO;
+  case PP::BOTBOT:
+    return getType(pi) == P::BOT && getType(pj) == P::BOT;
+  case PP::BOTJET:
+    return ( getType(pi) == P::BOT && getType(pj) == P::JET ) ||
+           ( getType(pi) == P::JET && getType(pj) == P::BOT );
+  case PP::PHOJET:
+    return ( getType(pi) == P::PHO && getType(pj) == P::JET ) ||
+           ( getType(pi) == P::JET && getType(pj) == P::PHO );
+  case PP::JETLEP:
+    return ( getType(pi) == P::LEP && getType(pj) == P::JET ) ||
+           ( getType(pi) == P::JET && getType(pj) == P::LEP );
+  case PP::PHOBOT:
+    return ( getType(pi) == P::PHO && getType(pj) == P::BOT ) ||
+           ( getType(pi) == P::BOT && getType(pj) == P::PHO );
+  case PP::BOTLEP:
+    return ( getType(pi) == P::BOT && getType(pj) == P::LEP ) ||
+           ( getType(pi) == P::LEP && getType(pj) == P::BOT );
+  case PP::PHOLEP:
+    return ( getType(pi) == P::PHO && getType(pj) == P::LEP ) ||
+           ( getType(pi) == P::LEP && getType(pj) == P::PHO );
   }
   return false;
 }
@@ -151,78 +151,78 @@
      "about cuts. It is also possible to create objects by hand and use "
      "it as any other MadGraphTwoCut object.");
 
-  static Switch<MadGraphTwoCut,CutType> interfaceCutType
+  static Switch<MadGraphTwoCut,Cut> interfaceCutType
     ("CutType",
      "The kind of cut this object will do.",
-     &MadGraphTwoCut::cutType, DELTAR, true, false);
+     &MadGraphTwoCut::cutType, Cut::DELTAR, true, false);
   static SwitchOption interfaceCutTypeInvariantMass
     (interfaceCutType,
      "InvariantMass",
      "The minimum invariant mass of two particles.",
-     INVMASS);
+     Cut::INVMASS);
   static SwitchOption interfaceCutTypeDeltaR
     (interfaceCutType,
      "DeltaR",
      "The minimum pseudo-rapidity--azimuth-angle distance between two "
      "particles.",
-     DELTAR);
+     Cut::DELTAR);
 
-  static Switch<MadGraphTwoCut,PPType> interfacePairType
+  static Switch<MadGraphTwoCut,PP> interfacePairType
     ("PairType",
      "The type of particle pairs this cut is applied to.",
-     &MadGraphTwoCut::pairType, JETJET, true, false);
+     &MadGraphTwoCut::pairType, PP::JETJET, true, false);
   static SwitchOption interfacePairTypeJetJet
     (interfacePairType,
      "JetJet",
      "The cut applies only to pairs of coloured particles (jets).",
-     JETJET);
+     PP::JETJET);
   static SwitchOption interfacePairTypeLeptonLepton
     (interfacePairType,
      "LeptonLepton",
      "The cut applies only to lepton pairs (in case of invariant mass, "
      "lepton--anti-lepton pairs of same flavour).",
-     LEPLEP);
+     PP::LEPLEP);
   static SwitchOption interfacePairTypePhotonPhoton
     (interfacePairType,
      "PhotonPhoton",
      "The cut applies only to pairs photons.",
-     PHOPHO);
+     PP::PHOPHO);
   static SwitchOption interfacePairTypeBottomPairs
     (interfacePairType,
      "BottomPairs",
      "The cut applies only to pairs of bottom quarks.",
-     BOTBOT);
+     PP::BOTBOT);
   static SwitchOption interfacePairTypeJetBottom
     (interfacePairType,
      "JetBottom",
      "The cut applies only to bottom quarks paired with another coloured "
      "particle (jet).",
-     BOTJET);
+     PP::BOTJET);
   static SwitchOption interfacePairTypePhotonJet
     (interfacePairType,
      "PhotonJet",
      "The cut applies only to a photon paired with a coloured particle (jet).",
-     PHOJET);
+     PP::PHOJET);
   static SwitchOption interfacePairTypeJetLepton
     (interfacePairType,
      "JetLepton",
      "The cut applies only to a coloured particle (jet) paired with a lepton.",
-     JETLEP);
+     PP::JETLEP);
   static SwitchOption interfacePairTypePhotonBottom
     (interfacePairType,
      "PhotonBottom",
      "The cut applies only to a photon paired with a bottom quark.",
-     PHOBOT);
+     PP::PHOBOT);
   static SwitchOption interfacePairTypeBottomLepton
     (interfacePairType,
      "BottomLepton",
      "The cut applies only to bottom quarks paired with a lepton.",
-     BOTLEP);
+     PP::BOTLEP);
   static SwitchOption interfacePairTypePhotonLepton
     (interfacePairType,
      "PhotonLepton",
      "The cut applies only to a photon paired with a lepton.",
-     PHOLEP);
+     PP::PHOLEP);
 
   static Parameter<MadGraphTwoCut,double> interfaceCut
     ("Cut",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ThePEG-2.1.2/LesHouches/MadGraphTwoCut.h 
new/ThePEG-2.1.3/LesHouches/MadGraphTwoCut.h
--- old/ThePEG-2.1.2/LesHouches/MadGraphTwoCut.h        2017-05-03 
16:38:26.000000000 +0200
+++ new/ThePEG-2.1.3/LesHouches/MadGraphTwoCut.h        2018-03-02 
17:41:02.000000000 +0100
@@ -32,7 +32,7 @@
   /**
    * Enumerate the different kinds of cuts made by MadGraph.
    */
-  enum CutType {
+  enum class Cut {
     INVMASS, /**< The minimum invariant mass of two particles. */
     DELTAR   /**< The minimum pseudo-rapidity--azimuth-angle distance
                   between two particles. */
@@ -41,7 +41,7 @@
   /**
    * Enumerate the types of particles the cut is made on.
    */
-  enum PType {
+  enum class P {
     JET, /**< Coloured particles (jets). */
     LEP, /**< Leptons. */
     PHO, /**< Photons. */
@@ -52,7 +52,7 @@
   /**
    * Enumerate the types of particles pairs the cut is made on.
    */
-  enum PPType {
+  enum class PP {
     JETJET, /**< The cut applies only to pairs of coloured particles (jets). */
     LEPLEP, /**< The cut applies only to lepton pairs (in case of INVMASS
                  lepton--anti-lepton pairs of same flavour). */
@@ -77,7 +77,7 @@
    * The default constructor.
    */
   MadGraphTwoCut()
-    : cutType(DELTAR), pairType(JETJET), theCut(0.0) {}
+    : cutType(Cut::DELTAR), pairType(PP::JETJET), theCut(0.0) {}
 
   /**
    * The constructor used by the MadGraphReader.
@@ -85,7 +85,7 @@
    * @param p is the type of particles the cut is applied to.
    * @param c is the value of the cut (in units of GeV where applicable).
    */
-  MadGraphTwoCut(CutType t, PPType p, double c)
+  MadGraphTwoCut(Cut t, PP p, double c)
     : cutType(t), pairType(p), theCut(c) {}
 
   //@}
@@ -156,7 +156,7 @@
   /**
    * Get the type of particle \a p.
    */
-  PType getType(tcPDPtr p) const;
+  P getType(tcPDPtr p) const;
 
 public:
 
@@ -206,12 +206,12 @@
   /**
    * The type of this cut.
    */
-  CutType cutType;
+  Cut cutType;
 
   /**
    * The type of particle pairs this cut applies to.
    */
-  PPType pairType;
+  PP pairType;
 
   /**
    * The value of the cut to be applied.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ThePEG-2.1.2/LesHouches/Makefile.am new/ThePEG-2.1.3/LesHouches/Makefile.am
--- old/ThePEG-2.1.2/LesHouches/Makefile.am     2017-11-01 11:56:49.000000000 
+0100
+++ new/ThePEG-2.1.3/LesHouches/Makefile.am     2018-04-05 12:52:34.000000000 
+0200
@@ -20,7 +20,7 @@
 
 # Version info should be updated if any interface or persistent I/O
 # function is changed
-LesHouches_la_LDFLAGS = $(AM_LDFLAGS) -module -version-info 25:2:0
+LesHouches_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO)
 LesHouches_la_SOURCES = $(mySOURCES) $(INCLUDEFILES)
 
 include $(top_srcdir)/Config/Makefile.aminclude
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ThePEG-2.1.2/Makefile.am new/ThePEG-2.1.3/Makefile.am
--- old/ThePEG-2.1.2/Makefile.am        2017-11-01 12:00:10.000000000 +0100
+++ new/ThePEG-2.1.3/Makefile.am        2015-12-07 14:18:23.000000000 +0100
@@ -11,7 +11,7 @@
 
 EXTRA_DIST = GUIDELINES
 
-DISTCHECK_CONFIGURE_FLAGS = --without-lhapdf --with-gsl=$(GSLPATH)
+## DISTCHECK_CONFIGURE_FLAGS = --enable-unitchecks --without-lhapdf 
--with-gsl=$(GSLPATH)
 
 ACLOCAL_AMFLAGS = -I m4
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ThePEG-2.1.2/NEWS new/ThePEG-2.1.3/NEWS
--- old/ThePEG-2.1.2/NEWS       2017-11-01 11:56:49.000000000 +0100
+++ new/ThePEG-2.1.3/NEWS       2018-04-05 13:02:57.000000000 +0200
@@ -9,6 +9,11 @@
 or at https:///herwig.hepforge.org/
 
 
+* ThePEG-2.1.3 release: 2018-04-05
+
+** Use std::array<> where suitable
+
+
 
 * ThePEG-2.1.2 release: 2017-11-01
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ThePEG-2.1.2/Persistency/PersistentIStream.h 
new/ThePEG-2.1.3/Persistency/PersistentIStream.h
--- old/ThePEG-2.1.2/Persistency/PersistentIStream.h    2017-05-03 
16:38:25.000000000 +0200
+++ new/ThePEG-2.1.3/Persistency/PersistentIStream.h    2018-03-02 
17:41:02.000000000 +0100
@@ -629,11 +629,19 @@
 /** Input a vector of objects. */
 template <typename T, typename A>
 inline PersistentIStream & operator>>(PersistentIStream & is, 
-                                     vector<T,A> & v) {
+              vector<T,A> & v) {
   is.getContainer(v);
   return is;
 }
 
+/** Input an array of objects. */
+template <typename T, size_t N>
+inline PersistentIStream & operator>>(PersistentIStream & is, 
+              array<T,N> & a) {
+  for ( size_t i = 0; i < N && is.good(); ++i ) 
+    is >> a[i];
+  return is;
+}
 
 /** Input a deque of objects. */
 template <typename T, typename A>
@@ -643,7 +651,7 @@
   return is;
 }
 
-/** Input a deque of objects. */
+/** Input a valarray. */
 template <typename T>
 inline PersistentIStream & operator>>(PersistentIStream & is, 
                                      std::valarray<T> & v) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ThePEG-2.1.2/Persistency/PersistentOStream.h 
new/ThePEG-2.1.3/Persistency/PersistentOStream.h
--- old/ThePEG-2.1.2/Persistency/PersistentOStream.h    2017-05-03 
16:38:25.000000000 +0200
+++ new/ThePEG-2.1.3/Persistency/PersistentOStream.h    2018-03-02 
17:41:02.000000000 +0100
@@ -628,12 +628,23 @@
  */
 template <typename T, typename A>
 inline PersistentOStream & operator<<(PersistentOStream & os,
-                                     const vector<T,A> & v) {
+              const vector<T,A> & v) {
   os.putContainer(v);
   return os;
 }
 
 /**
+ * Output an array of objects.
+ */
+template <typename T, size_t N>
+inline PersistentOStream & operator<<(PersistentOStream & os,
+              const array<T,N> & a) {
+  for ( auto it = a.cbegin(); it != a.cend() && os.good() ; ++it )
+      os << *it;
+  return os;
+}
+
+/**
  * Output a deque of objects.
  */
 template <typename T, typename A>
@@ -644,7 +655,7 @@
 }
 
 /**
- * Output a valarray of objects.
+ * Output a valarray.
  */
 template <typename T>
 inline PersistentOStream & operator<<(PersistentOStream & os,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ThePEG-2.1.2/Repository/StandardRandom.h 
new/ThePEG-2.1.3/Repository/StandardRandom.h
--- old/ThePEG-2.1.2/Repository/StandardRandom.h        2017-05-03 
16:38:25.000000000 +0200
+++ new/ThePEG-2.1.3/Repository/StandardRandom.h        2018-03-02 
17:52:48.000000000 +0100
@@ -32,7 +32,7 @@
   /**
    * Default constructor.
    */
-  StandardRandom() : u(97) { if ( theSeed != 0 ) setSeed(theSeed); }
+  StandardRandom() : u() { if ( theSeed != 0 ) setSeed(theSeed); }
   //@}
 
 public:
@@ -96,7 +96,7 @@
   /**
    * The internal state vector.
    */
-  vector<double> u;
+  array<double,97> u;
 
   /**
    * Parameter for the internal state.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ThePEG-2.1.2/Utilities/SimplePhaseSpace.h 
new/ThePEG-2.1.3/Utilities/SimplePhaseSpace.h
--- old/ThePEG-2.1.2/Utilities/SimplePhaseSpace.h       2017-05-03 
16:38:26.000000000 +0200
+++ new/ThePEG-2.1.3/Utilities/SimplePhaseSpace.h       2018-04-05 
11:59:10.000000000 +0200
@@ -29,7 +29,7 @@
  * properly. When needed, random numbers are generated with the
  * generator given by the static UseRandom class.
  */
-struct SimplePhaseSpace {
+namespace SimplePhaseSpace {
 
   /**
    * Set two momenta in their center of mass system. Their total
@@ -44,7 +44,7 @@
    * larger than the given invariant mass (\f$\sqrt{s}\f$).
    */
   template <typename PType>
-  static void CMS(Energy2 s, PType & p1, PType & p2);
+  void CMS(Energy2 s, PType & p1, PType & p2);
 
   /**
    * Set two momenta in their center of mass system. Their total
@@ -62,7 +62,7 @@
    * larger than the given invariant mass (\f$\sqrt{s}\f$).
    */
   template <typename PType>
-  static void CMS(PType & p1, PType & p2, Energy2 s,
+  void CMS(PType & p1, PType & p2, Energy2 s,
                  double cosTheta, double phi);
 
   /**
@@ -82,7 +82,7 @@
    * larger than the given invariant mass (\f$\sqrt{s}\f$).
    */
   template <typename PType>
-  static void CMS(PType & p1, PType & p2, Energy2 s, Energy2 t, double phi,
+  void CMS(PType & p1, PType & p2, Energy2 s, Energy2 t, double phi,
                  const PType & p0);
 
   /**
@@ -97,7 +97,7 @@
    * larger than the given invariant mass (\f$\sqrt{s}\f$).
    */
   template <typename PType>
-  static void CMS(PType & p1, PType & p2, Energy2 s);
+  void CMS(PType & p1, PType & p2, Energy2 s);
 
   /**
    * Set two momenta in their center of mass system. Their total
@@ -110,7 +110,7 @@
    * larger than the given invariant mass (\f$\sqrt{s}\f$).
    */
   template <typename PPairType>
-  static void CMS(const PPairType & p, Energy2 s)
+  void CMS(const PPairType & p, Energy2 s)
   {
     CMS(*p.first, *p.second, s);
   }
@@ -133,7 +133,7 @@
    * larger than the given invariant mass (\f$\sqrt{s}\f$).
    */
   template <typename PType>
-  static void CMS(PType & p1, PType & p2, PType & p3, Energy2 s,
+  void CMS(PType & p1, PType & p2, PType & p3, Energy2 s,
                  double x1, double x3);
 
   /**
@@ -159,7 +159,7 @@
    * larger than the given invariant mass (\f$\sqrt{s}\f$).
    */
   template <typename PType>
-  static void CMS(PType & p1, PType & p2, PType & p3, Energy2 s,
+  void CMS(PType & p1, PType & p2, PType & p3, Energy2 s,
                  double x1, double x3, double phii = 0.0,
                  double theta = 0.0, double phi = 0.0);
 
@@ -173,7 +173,7 @@
    * @throw ImpossibleKinematics if the sum of the masses was
    * larger than the given invariant mass (\f$\sqrt{s}\f$).
    */
-  static Energy getMagnitude(Energy2 s, Energy m1, Energy m2);
+  Energy getMagnitude(Energy2 s, Energy m1, Energy m2);
 
   /**
    * Return a three-vector given the absolute momentum, cos(theta) and
@@ -182,7 +182,7 @@
    * @param costheta the cosine of the polar angle.
    * @param phi the azimuth angle.
    */
-  static Momentum3 polar3Vector(Energy p, double costheta, double phi)
+  inline Momentum3 polar3Vector(Energy p, double costheta, double phi)
   {
     return Momentum3(p*sqrt(1.0 - sqr(costheta))*sin(phi),
                     p*sqrt(1.0 - sqr(costheta))*cos(phi),
@@ -203,7 +203,7 @@
    * @throw ImpossibleKinematics if the sum of the masses was
    * larger than the given invariant mass (\f$\sqrt{s}\f$).
    */
-  static vector<LorentzMomentum>
+  vector<LorentzMomentum>
   CMSn(Energy m0, const vector<Energy> & m);
 
   /**
@@ -219,9 +219,9 @@
    * larger than the given invariant mass (\f$\sqrt{s}\f$).
    */
   template <typename Container>
-  static void CMSn(Container & particles, Energy m0);
+  void CMSn(Container & particles, Energy m0);
 
-};
+}
 
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ThePEG-2.1.2/Utilities/XSecStat.h new/ThePEG-2.1.3/Utilities/XSecStat.h
--- old/ThePEG-2.1.2/Utilities/XSecStat.h       2017-05-03 16:38:26.000000000 
+0200
+++ new/ThePEG-2.1.3/Utilities/XSecStat.h       2018-03-02 17:53:59.000000000 
+0100
@@ -54,8 +54,8 @@
    */
   XSecStat() 
     : theMaxXSec(ZERO), theAttempts(0), theAccepted(0), theVetoed(0),
-      theSumWeights (vector<double>(4,0.0)),
-      theSumWeights2(vector<double>(4,0.0)), theLastWeight(0.0) {}
+      theSumWeights (),
+      theSumWeights2(), theLastWeight(0.0) {}
 
   /**
    * Constructor taking the overestimated cross section, \a xsecmax,
@@ -63,22 +63,13 @@
    */
   explicit XSecStat(CrossSection xsecmax) 
     : theMaxXSec(xsecmax), theAttempts(0), theAccepted(0), theVetoed(0),
-      theSumWeights (vector<double>(4,0.0)),
-      theSumWeights2(vector<double>(4,0.0)), theLastWeight(0.0) {}
+      theSumWeights (),
+      theSumWeights2(), theLastWeight(0.0) {}
 
   /**
    * The assignment operator.
    */
-  XSecStat & operator=(const XSecStat & x) {
-    theMaxXSec     = x.theMaxXSec;
-    theAttempts    = x.theAttempts;
-    theAccepted    = x.theAccepted;
-    theVetoed      = x.theVetoed;
-    theSumWeights  = x.theSumWeights;
-    theSumWeights2 = x.theSumWeights2;
-    theLastWeight  = x.theLastWeight;
-    return *this;
-  }
+  XSecStat & operator=(const XSecStat & x) = default;
 
   /**
    * Add the contents of another XSecStat.
@@ -100,7 +91,7 @@
    */
   void reset() {
     theAttempts = theAccepted = theVetoed = 0;
-    theSumWeights = theSumWeights2 = vector<double>(4,0.0);
+    theSumWeights = theSumWeights2 = {};
     theLastWeight = 0.0;
   }
 
@@ -299,12 +290,12 @@
   /**
    * The sum of the weights so far.
    */
-  vector<double> theSumWeights;
+  array<double,4> theSumWeights;
 
   /**
    * The sum of the squared weights so far.
    */
-  vector<double> theSumWeights2;
+  array<double,4> theSumWeights2;
 
   /**
    * The last selected weight, ignoring reweighting.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ThePEG-2.1.2/Vectors/SpinHalfLorentzRotation.cc 
new/ThePEG-2.1.3/Vectors/SpinHalfLorentzRotation.cc
--- old/ThePEG-2.1.2/Vectors/SpinHalfLorentzRotation.cc 2017-05-03 
16:38:26.000000000 +0200
+++ new/ThePEG-2.1.3/Vectors/SpinHalfLorentzRotation.cc 2018-04-05 
12:13:22.000000000 +0200
@@ -17,25 +17,25 @@
 
 // default constructor
 SpinHalfLorentzRotation::SpinHalfLorentzRotation() 
-  : _mx(4,vector<Complex>(4)) {
-  unsigned ix;
-  for(ix=0;ix<4;++ix) {
-    _mx[ix][ix]=1.0;
-  }
-}
+: _mx{{ {{1., 0., 0., 0.}},
+        {{0., 1., 0., 0.}},
+        {{0., 0., 1., 0.}},
+        {{0., 0., 0., 1.}} }}
+{}
 
 // constructor giving the components of a Lorentz boost
 SpinHalfLorentzRotation::
 SpinHalfLorentzRotation(double bx, double by, double bz, double gamma) 
-  : _mx(4,vector<Complex>(4)) 
+: _mx{}
 {
-  setBoost (bx,by,bz,gamma);
+  setBoost(bx,by,bz,gamma);
 }
 
 // constructor with boost vector
 SpinHalfLorentzRotation::
-SpinHalfLorentzRotation (const Boost & b, double gamma) 
-: _mx(4,vector<Complex>(4)) {
+SpinHalfLorentzRotation (const Boost & b, double gamma)
+: _mx{}
+{
   setBoost(b,gamma);
 }
 
@@ -45,35 +45,34 @@
                        Complex c2c1,Complex c2c2,Complex c2c3,Complex c2c4,
                        Complex c3c1,Complex c3c2,Complex c3c3,Complex c3c4,
                        Complex c4c1,Complex c4c2,Complex c4c3,Complex c4c4) 
-: _mx(4,vector<Complex>(4)) {
-  _mx[0][0]=c1c1;_mx[1][0]=c2c1;_mx[2][0]=c3c1;_mx[3][0]=c4c1;
-  _mx[0][1]=c1c2;_mx[1][1]=c2c2;_mx[2][1]=c3c2;_mx[3][1]=c4c2;
-  _mx[0][2]=c1c3;_mx[1][2]=c2c3;_mx[2][2]=c3c3;_mx[3][2]=c4c3;
-  _mx[0][3]=c1c4;_mx[1][3]=c2c4;_mx[2][3]=c3c4;_mx[3][3]=c4c4;
-}
+: _mx{{ {{c1c1, c1c2, c1c3, c1c4}},
+        {{c2c1, c2c2, c2c3, c2c4}},
+        {{c3c1, c3c2, c3c3, c3c4}},
+        {{c4c1, c4c2, c4c3, c4c4}} }}
+{}
 
 // check for identity matrix
 bool SpinHalfLorentzRotation::isIdentity() const {
-  return (_mx[0][0]==1.0&&_mx[0][1]==0.0&&_mx[0][2]==0.0&&_mx[0][3]==0.0&& 
-          _mx[1][0]==0.0&&_mx[1][1]==1.0&&_mx[1][2]==0.0&&_mx[1][3]==0.0&& 
-          _mx[2][0]==0.0&&_mx[2][1]==0.0&&_mx[2][2]==1.0&&_mx[2][3]==0.0&& 
-          _mx[3][0]==0.0&&_mx[3][1]==0.0&&_mx[3][2]==0.0&&_mx[3][3]==1.0);
+  return _mx == MatrixT{{ {{1., 0., 0., 0.}},
+                          {{0., 1., 0., 0.}},
+                          {{0., 0., 1., 0.}},
+                          {{0., 0., 0., 1.}} }};
 }
 
 // inverse ( inverse is gamma0 S dagger gamma 0)
 SpinHalfLorentzRotation SpinHalfLorentzRotation::inverse() const {
   return SpinHalfLorentzRotation
-    (conj(_mx[2][2]),conj(_mx[3][2]),conj(_mx[0][2]),conj(_mx[1][2]),
+    {conj(_mx[2][2]),conj(_mx[3][2]),conj(_mx[0][2]),conj(_mx[1][2]),
      conj(_mx[2][3]),conj(_mx[3][3]),conj(_mx[0][3]),conj(_mx[1][3]),
      conj(_mx[2][0]),conj(_mx[3][0]),conj(_mx[0][0]),conj(_mx[1][0]),
-     conj(_mx[2][1]),conj(_mx[3][1]),conj(_mx[0][1]),conj(_mx[1][1]));
+     conj(_mx[2][1]),conj(_mx[3][1]),conj(_mx[0][1]),conj(_mx[1][1])};
 }
 
 // specify the components of a lorentz boost
 SpinHalfLorentzRotation & SpinHalfLorentzRotation::
 setBoost (double bx, double by, double bz, double) {
   // work out beta and chi
-  static double eps=1e-10;
+  const double eps=1e-10;
   double beta(sqrt(bx*bx+by*by+bz*bz));
   double chi(atanh(beta)), chc(cosh(0.5*chi)), shc(0.5);
   if ( beta > eps ) 
@@ -104,7 +103,7 @@
 // specify a boost vector
 SpinHalfLorentzRotation & SpinHalfLorentzRotation::setBoost (const Boost & 
b,double) {
   // work out beta and chi
-  static double eps=1e-10;
+  const double eps=1e-10;
   double bx(b.x()),by(b.y()),bz(b.z()),beta(b.mag()),chi(atanh(beta)),
     chc(cosh(0.5*chi)),shc(0.5);
   if(beta>eps){shc=sinh(0.5*chi)/beta;}
@@ -156,18 +155,15 @@
 SpinHalfLorentzRotation & SpinHalfLorentzRotation::boostX(double bx)
 {
   double chi(atanh(bx)),shc(sinh(0.5*chi)),chc(cosh(0.5*chi));
-  Complex temp[4][4];
-  unsigned int ix,iy;
-  for(ix=0;ix<4;++ix)
+  MatrixT temp;
+  for(size_t ix=0;ix<4;++ix)
     {
       temp[0][ix]= chc*_mx[0][ix]-shc*_mx[1][ix];
       temp[1][ix]= chc*_mx[1][ix]-shc*_mx[0][ix];
       temp[2][ix]= chc*_mx[2][ix]+shc*_mx[3][ix];
       temp[3][ix]= chc*_mx[3][ix]+shc*_mx[2][ix];
     }
-  for(ix=0;ix<4;++ix)
-    for(iy=0;iy<4;++iy)
-      _mx[ix][iy]=temp[ix][iy];
+  _mx = temp;
   return *this;
 }
 // Pure boost along the y-axis; equivalent to LT = BoostY(beta) * LT
@@ -175,18 +171,15 @@
 {
   double chi(atanh(by)),chc(cosh(0.5*chi));
   Complex shc(0.,sinh(0.5*chi));
-  Complex temp[4][4];
-  unsigned int ix,iy;
-  for(ix=0;ix<4;++ix)
+  MatrixT temp;
+  for(size_t ix=0;ix<4;++ix)
     {
       temp[0][ix]= chc*_mx[0][ix]+shc*_mx[1][ix];
       temp[1][ix]= chc*_mx[1][ix]-shc*_mx[0][ix];
       temp[2][ix]= chc*_mx[2][ix]-shc*_mx[3][ix];
       temp[3][ix]= chc*_mx[3][ix]+shc*_mx[2][ix];
     }
-  for(ix=0;ix<4;++ix)
-    for(iy=0;iy<4;++iy)
-      _mx[ix][iy]=temp[ix][iy];
+  _mx = temp;
   return *this;
 }
 
@@ -194,18 +187,15 @@
 SpinHalfLorentzRotation & SpinHalfLorentzRotation::boostZ(double bz)
 {
   double chi(atanh(bz)),shc(sinh(0.5*chi)),chc(cosh(0.5*chi));
-  Complex temp[4][4];
-  unsigned int ix,iy;
-  for(ix=0;ix<4;++ix)
+  MatrixT temp;
+  for(size_t ix=0;ix<4;++ix)
     {
       temp[0][ix]=(chc-shc)*_mx[0][ix];
       temp[1][ix]=(chc+shc)*_mx[1][ix];
       temp[2][ix]=(chc+shc)*_mx[2][ix];
       temp[3][ix]=( chc-shc)*_mx[3][ix];
     }
-  for(ix=0;ix<4;++ix)
-    for(iy=0;iy<4;++iy)
-      _mx[ix][iy]=temp[ix][iy];
+  _mx = temp;
   return *this;
 }
 
@@ -216,20 +206,18 @@
   if(gamma<1.) gamma = 1./sqrt(1.-b2);
   double beta = sqrt(b2);
   // work out beta and chi
-  static double eps=1e-8;
+  const double eps=1e-8;
   double chc = sqrt(0.5*(1+gamma));
   double shc = beta>eps ? sqrt(0.5*(gamma-1))/beta : 
0.5+b2*(0.1875+0.12109375*b2);
-  Complex ii(0.,1.),nxminy(bx-ii*by),nxplny(bx+ii*by),temp[4][4];
-  unsigned int ix,iy;
-  for(ix=0;ix<4;++ix) {
+  Complex ii(0.,1.),nxminy(bx-ii*by),nxplny(bx+ii*by);
+  MatrixT temp;
+  for(size_t ix=0;ix<4;++ix) {
     temp[0][ix]= (chc-shc*bz)*_mx[0][ix]-shc*nxminy  *_mx[1][ix];
     temp[1][ix]=-shc*nxplny  *_mx[0][ix]+(chc+shc*bz)*_mx[1][ix];
     temp[2][ix]= (chc+shc*bz)*_mx[2][ix]+shc*nxminy  *_mx[3][ix];
     temp[3][ix]= shc*nxplny  *_mx[2][ix]+(chc-shc*bz)*_mx[3][ix];
   }
-  for(ix=0;ix<4;++ix)
-    for(iy=0;iy<4;++iy)
-      _mx[ix][iy]=temp[ix][iy];
+  _mx = temp;
   return *this;
 }
 
@@ -240,21 +228,19 @@
   if(gamma<1.) gamma = 1./sqrt(1.-b2);
   double beta = sqrt(b2);
   // work out chi
-  static double eps=1e-8;
+  const double eps=1e-8;
   double bx(b.x()),by(b.y()),bz(b.z());
   double chc = sqrt(0.5*(1+gamma));
   double shc = beta>eps ? sqrt(0.5*(gamma-1))/beta : 
0.5+b2*(0.1875+0.12109375*b2);
-  Complex ii(0.,1.),nxminy(bx-ii*by),nxplny(bx+ii*by),temp[4][4];
-  unsigned int ix,iy;
-  for(ix=0;ix<4;++ix) {
+  Complex ii(0.,1.),nxminy(bx-ii*by),nxplny(bx+ii*by);
+  MatrixT temp;
+  for(size_t ix=0;ix<4;++ix) {
     temp[0][ix]= (chc-shc*bz)*_mx[0][ix]-shc*nxminy  *_mx[1][ix];
     temp[1][ix]=-shc*nxplny  *_mx[0][ix]+(chc+shc*bz)*_mx[1][ix];
     temp[2][ix]= (chc+shc*bz)*_mx[2][ix]+shc*nxminy  *_mx[3][ix];
     temp[3][ix]= shc*nxplny  *_mx[2][ix]+(chc-shc*bz)*_mx[3][ix];
   }
-  for(ix=0;ix<4;++ix)
-    for(iy=0;iy<4;++iy)
-      _mx[ix][iy]=temp[ix][iy];
+  _mx = temp;
   return *this;
 }
 
@@ -338,92 +324,76 @@
 // product
 SpinHalfLorentzRotation 
 SpinHalfLorentzRotation::operator * (const SpinHalfLorentzRotation & lt) const 
{
-  Complex output[4][4];
-  unsigned int ix,iy,iz;
-  for(ix=0;ix<4;++ix) {
-    for(iy=0;iy<4;++iy) {
-      output[ix][iy]=0.;
-      for(iz=0;iz<4;++iz){output[ix][iy]+=_mx[ix][iz]*lt._mx[iz][iy];}
-    }
-  }
-  return 
SpinHalfLorentzRotation(output[0][0],output[0][1],output[0][2],output[0][3],
-                                
output[1][0],output[1][1],output[1][2],output[1][3],
-                                
output[2][0],output[2][1],output[2][2],output[2][3],
-                                
output[3][0],output[3][1],output[3][2],output[3][3]);
+  SpinHalfLorentzRotation temp{_mx};
+  temp *= lt;
+  return temp;
 }
 
 // multiply and assign
- SpinHalfLorentzRotation & 
+SpinHalfLorentzRotation & 
 SpinHalfLorentzRotation::operator *= (const SpinHalfLorentzRotation & lt) {
-  Complex output[4][4];
-  unsigned int ix,iy,iz;
-  for(ix=0;ix<4;++ix) {
-      for(iy=0;iy<4;++iy) {
-       output[ix][iy]=0.;
-       for(iz=0;iz<4;++iz){output[ix][iy]+=_mx[ix][iz]*lt._mx[iz][iy];}
-      }
+  MatrixT temp;
+  for(size_t ix=0;ix<4;++ix) {
+    for(size_t iy=0;iy<4;++iy) {
+      temp[ix][iy] = 0.0;
+      for(size_t iz=0;iz<4;++iz)
+        temp[ix][iy] += _mx[ix][iz] * lt._mx[iz][iy];
+    }
   }
-  for(ix=0;ix<4;++ix){for(iy=0;iy<4;++iy){_mx[ix][iy]=output[ix][iy];}}
+  _mx = temp;
   return *this;
 }
 
 // transform method
- SpinHalfLorentzRotation & 
+SpinHalfLorentzRotation & 
 SpinHalfLorentzRotation::transform(const SpinHalfLorentzRotation & lt) {
-  Complex output[4][4];
-  unsigned int ix,iy,iz;
-  for(ix=0;ix<4;++ix) {
-    for(iy=0;iy<4;++iy) {
-      output[ix][iy]=0.;
-      for(iz=0;iz<4;++iz){output[ix][iy]+=lt._mx[ix][iz]*_mx[iz][iy];}
-    }
-  }
-  for(ix=0;ix<4;++ix){for(iy=0;iy<4;++iy){_mx[ix][iy]=output[ix][iy];}}
+  SpinHalfLorentzRotation temp{lt._mx};
+  temp *= (*this);
+  _mx = temp._mx;
   return *this;
 }
 
 // Rotation around the x-axis; equivalent to LT = RotationX(delta) * LT
 SpinHalfLorentzRotation & SpinHalfLorentzRotation::rotateX(double phi) {
   double cp(cos(0.5*phi));
-  Complex isp(0.,sin(0.5*phi)),temp[4][4];
-  unsigned int ix,iy;
-  for(ix=0;ix<4;++ix) {
+  Complex isp(0.,sin(0.5*phi));
+  MatrixT temp;
+  for(size_t ix=0;ix<4;++ix) {
     temp[0][ix]=  cp*_mx[0][ix]-isp*_mx[1][ix];
     temp[1][ix]=-isp*_mx[0][ix]+ cp*_mx[1][ix];
     temp[2][ix]=  cp*_mx[2][ix]-isp*_mx[3][ix];
     temp[3][ix]=-isp*_mx[2][ix]+ cp*_mx[3][ix];
   }
-  for(ix=0;ix<4;++ix){for(iy=0;iy<4;++iy){_mx[ix][iy]=temp[ix][iy];}}
+  _mx = temp;
   return *this;
 }
 
 // Rotation around the y-axis; equivalent to LT = RotationY(delta) * LT
 SpinHalfLorentzRotation & SpinHalfLorentzRotation::rotateY(double phi) {
   double cp(cos(0.5*phi)),sp(sin(0.5*phi));
-  Complex temp[4][4];
-  unsigned int ix,iy;
-  for(ix=0;ix<4;++ix) {
+  MatrixT temp;
+  for(size_t ix=0;ix<4;++ix) {
     temp[0][ix]= cp*_mx[0][ix]-sp*_mx[1][ix];
     temp[1][ix]= sp*_mx[0][ix]+cp*_mx[1][ix];
     temp[2][ix]= cp*_mx[2][ix]-sp*_mx[3][ix];
     temp[3][ix]= sp*_mx[2][ix]+cp*_mx[3][ix];
   }
-  for(ix=0;ix<4;++ix){for(iy=0;iy<4;++iy){_mx[ix][iy]=temp[ix][iy];}}
+  _mx = temp;
   return *this;
 }
 
 // Rotation around the z-axis; equivalent to LT = RotationZ(delta) * LT
 SpinHalfLorentzRotation & SpinHalfLorentzRotation::rotateZ(double phi) {
   double cp(cos(0.5*phi));
-  Complex isp(0.,sin(0.5*phi)),temp[4][4];
-  unsigned int ix,iy;
-  for(ix=0;ix<4;++ix) {
+  Complex isp(0.,sin(0.5*phi));
+  MatrixT temp;
+  for(size_t ix=0;ix<4;++ix) {
     temp[0][ix]= (cp-isp)*_mx[0][ix];
     temp[1][ix]= (cp+isp)*_mx[1][ix];
     temp[2][ix]= (cp-isp)*_mx[2][ix];
     temp[3][ix]= (cp+isp)*_mx[3][ix];
   }
-  for(ix=0;ix<4;++ix){for(iy=0;iy<4;++iy){_mx[ix][iy]=temp[ix][iy];}}
+  _mx = temp;
   return *this;
 }
 
@@ -432,14 +402,14 @@
 SpinHalfLorentzRotation::rotate(double phi, const Axis & axis) {
   double cp(cos(0.5*phi)),amag(axis.mag()),
     ax(axis.x()/amag),ay(axis.y()/amag),az(axis.z()/amag);
-  Complex 
ii(0.,1.),nxminy(ax-ii*ay),nxplny(ax+ii*ay),isp(0.,sin(0.5*phi)),temp[4][4];
-  unsigned int ix,iy;
-  for(ix=0;ix<4;++ix) {
+  Complex ii(0.,1.),nxminy(ax-ii*ay),nxplny(ax+ii*ay),isp(0.,sin(0.5*phi));
+  MatrixT temp;
+  for(size_t ix=0;ix<4;++ix) {
     temp[0][ix]= (cp-isp*az)*_mx[0][ix]-isp*nxminy *_mx[1][ix];
     temp[1][ix]=-isp*nxplny *_mx[0][ix]+(cp+isp*az)*_mx[1][ix];
     temp[2][ix]= (cp-isp*az)*_mx[2][ix]-isp*nxminy *_mx[3][ix];
     temp[3][ix]=-isp*nxplny *_mx[2][ix]+(cp+isp*az)*_mx[3][ix];
   }
-  for(ix=0;ix<4;++ix){for(iy=0;iy<4;++iy){_mx[ix][iy]=temp[ix][iy];}}
+  _mx = temp;
   return *this;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ThePEG-2.1.2/Vectors/SpinHalfLorentzRotation.h 
new/ThePEG-2.1.3/Vectors/SpinHalfLorentzRotation.h
--- old/ThePEG-2.1.2/Vectors/SpinHalfLorentzRotation.h  2017-05-03 
16:38:26.000000000 +0200
+++ new/ThePEG-2.1.3/Vectors/SpinHalfLorentzRotation.h  2018-03-02 
17:41:03.000000000 +0100
@@ -323,11 +323,14 @@
 
 private:
 
+  using MatrixT = array<array<Complex,4>,4>;
+
+  SpinHalfLorentzRotation(const MatrixT & m) : _mx(m) {}
 
   /**
    * The members of the transformation matrix.
    */
-  vector<vector<Complex> > _mx;
+  MatrixT _mx;
 };
 
 /**
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ThePEG-2.1.2/Vectors/SpinOneLorentzRotation.cc 
new/ThePEG-2.1.3/Vectors/SpinOneLorentzRotation.cc
--- old/ThePEG-2.1.2/Vectors/SpinOneLorentzRotation.cc  2017-05-03 
16:38:26.000000000 +0200
+++ new/ThePEG-2.1.3/Vectors/SpinOneLorentzRotation.cc  2018-03-02 
17:41:03.000000000 +0100
@@ -19,7 +19,7 @@
                       double yx, double yy, double yz, double yt,
                       double zx, double zy, double zz, double zt,
                       double tx, double ty, double tz, double tt)
-  : matrix_(16) {
+{
   xx_() = xx; xy_() = xy; xz_() = xz; xt_() = xt;
   yx_() = yx; yy_() = yy; yz_() = yz; yt_() = yt;
   zx_() = zx; zy_() = zy; zz_() = zz; zt_() = zt;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ThePEG-2.1.2/Vectors/SpinOneLorentzRotation.h 
new/ThePEG-2.1.3/Vectors/SpinOneLorentzRotation.h
--- old/ThePEG-2.1.2/Vectors/SpinOneLorentzRotation.h   2017-05-03 
16:38:26.000000000 +0200
+++ new/ThePEG-2.1.3/Vectors/SpinOneLorentzRotation.h   2018-03-02 
18:03:07.000000000 +0100
@@ -30,7 +30,7 @@
   /**
    * Default constructor. Gives a unit matrix.
    */
-  SpinOneLorentzRotation() : matrix_(16) {
+  SpinOneLorentzRotation() {
     xx_() = yy_() = zz_() = tt_() = 1.0;
   }
   
@@ -42,7 +42,7 @@
    * @param gamma The \f$\gamma\f$ factor (optional)
    */
   SpinOneLorentzRotation (double bx, double by, double bz, double gamma=-1.) 
-    : matrix_(16) {
+  {
     setBoost(bx,by,bz,gamma);
   }
 
@@ -52,7 +52,7 @@
    * @param gamma The \f$\gamma\f$ factor (optional)
    */
   explicit SpinOneLorentzRotation (const Boost & b, double gamma=-1.)
-    : matrix_(16) {
+  {
     setBoost(b.x(), b.y(), b.z(),gamma);
   }
   //@}
@@ -344,7 +344,7 @@
   template<typename Value> friend class Helicity::LorentzRSSpinorBar;
 
   /// Matrix components, order: \f$(xx, xy, \ldots, tz, tt)\f$.
-  vector<double> matrix_;
+  array<double,16> matrix_ = {};
 
   /// Constructor from doubles.
   SpinOneLorentzRotation (double xx, double xy, double xz, double xt,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ThePEG-2.1.2/configure.ac new/ThePEG-2.1.3/configure.ac
--- old/ThePEG-2.1.2/configure.ac       2017-11-01 11:56:49.000000000 +0100
+++ new/ThePEG-2.1.3/configure.ac       2018-04-05 13:03:13.000000000 +0200
@@ -1,11 +1,11 @@
 dnl Process this file with autoconf to produce a configure script.
 
 AC_PREREQ([2.59])
-AC_INIT([ThePEG],[2.1.2],[http://www.thep.lu.se/ThePEG/],[ThePEG])
+AC_INIT([ThePEG],[2.1.3],[http://www.thep.lu.se/ThePEG/],[ThePEG])
 AC_CONFIG_AUX_DIR([Config])
 AC_CONFIG_MACRO_DIR([m4])
 
-THEPEG_LIBTOOL_VERSION_INFO(25,0,0)
+THEPEG_LIBTOOL_VERSION_INFO(27,0,0)
 
 AC_CONFIG_SRCDIR([EventRecord/SubProcess.h])
 AC_CONFIG_HEADERS([Config/config.h])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ThePEG-2.1.2/lib/Makefile.am new/ThePEG-2.1.3/lib/Makefile.am
--- old/ThePEG-2.1.2/lib/Makefile.am    2017-11-01 11:56:49.000000000 +0100
+++ new/ThePEG-2.1.3/lib/Makefile.am    2018-04-05 12:59:41.000000000 +0200
@@ -16,7 +16,7 @@
 
 # Version info should be updated if any interface or persistent I/O
 # function is changed
-libThePEG_la_LDFLAGS = $(AM_LDFLAGS) -version-info 26:1:1 -export-dynamic
+libThePEG_la_LDFLAGS = $(AM_LDFLAGS) $(LIBTOOLVERSIONINFO) -export-dynamic
 libThePEG_la_SOURCES =
 libThePEG_la_LIBADD = \
        $(top_builddir)/Utilities/libThePEGUtilities.la \
Binary files old/ThePEG-2.1.2/m4/._libtool.m4 and 
new/ThePEG-2.1.3/m4/._libtool.m4 differ
Binary files old/ThePEG-2.1.2/m4/._ltoptions.m4 and 
new/ThePEG-2.1.3/m4/._ltoptions.m4 differ
Binary files old/ThePEG-2.1.2/m4/._ltsugar.m4 and 
new/ThePEG-2.1.3/m4/._ltsugar.m4 differ
Binary files old/ThePEG-2.1.2/m4/._lt~obsolete.m4 and 
new/ThePEG-2.1.3/m4/._lt~obsolete.m4 differ


Reply via email to