diff --git a/Shower/Dipole/Base/DipoleChain.cc b/Shower/Dipole/Base/DipoleChain.cc --- a/Shower/Dipole/Base/DipoleChain.cc +++ b/Shower/Dipole/Base/DipoleChain.cc @@ -1,342 +1,334 @@ // -*- C++ -*- // // DipoleChain.cc is a part of Herwig - A multi-purpose Monte Carlo event generator // Copyright (C) 2002-2017 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 DipoleChain class. // #include "DipoleChain.h" #include "Herwig/Shower/Dipole/Utility/DipolePartonSplitter.h" -#include "Herwig/Shower/Dipole/Colorea/Colorea.h" #include <iterator> using namespace Herwig; DipoleChain::DipoleChain() : ggSingleDipole(false) {} bool DipoleChain::circular () const { return (theDipoles.front().leftParticle() == theDipoles.back().rightParticle()); } bool DipoleChain::hasLeftNeighbour (list<Dipole>::const_iterator dc) const { if ( dc == dipoles().begin() ) return circular(); return true; } Dipole& DipoleChain::leftNeighbour (list<Dipole>::iterator dc) { assert(hasLeftNeighbour(dc)); if ( dc == dipoles().begin() ) return dipoles().back(); return *(--dc); } const Dipole& DipoleChain::leftNeighbour (list<Dipole>::const_iterator dc) const { assert(hasLeftNeighbour(dc)); if ( dc == dipoles().begin() ) return dipoles().back(); return *(--dc); } list<Dipole>::iterator DipoleChain::leftNeighbourIterator(list<Dipole>::iterator dc) { assert(hasLeftNeighbour(dc)); if ( dc == dipoles().begin() ) return --dipoles().end(); return --dc; } bool DipoleChain::hasRightNeighbour (list<Dipole>::const_iterator dc) const { if (dc == --dipoles().end()) return circular(); return true; } Dipole& DipoleChain::rightNeighbour (list<Dipole>::iterator dc) { assert(hasRightNeighbour(dc)); if ( dc == --dipoles().end() ) return dipoles().front(); return *(++dc); } const Dipole& DipoleChain::rightNeighbour (list<Dipole>::const_iterator dc) const { assert(hasRightNeighbour(dc)); if ( dc == --dipoles().end() ) return dipoles().front(); return *(++dc); } list<Dipole>::iterator DipoleChain::rightNeighbourIterator(list<Dipole>::iterator dc) { assert(hasRightNeighbour(dc)); if ( dc == --dipoles().end() ) return dipoles().begin(); return ++dc; } void DipoleChain::check() { if ( theDipoles.begin() == std::prev(theDipoles.end()) ) { if ( theDipoles.front().leftParticle()->hasColour() && theDipoles.front().leftParticle()->hasAntiColour() ) { assert(theDipoles.front().rightParticle()->hasColour() && theDipoles.front().rightParticle()->hasAntiColour()); ggSingleDipole = true; } } } - -void DipoleChain::rearrange(int dipmax,int diplong){ - static auto colorea = Colorea(); - colorea.setChain(this); - colorea.rearrange( dipmax, diplong); -} - list<Dipole>::iterator DipoleChain::insertSplitting(list<Dipole>::iterator emittingDipole, pair<Dipole,Dipole> children, pair<list<Dipole>::iterator,list<Dipole>::iterator>& childIterators) { assert(DipolePartonSplitter::colourConnected(children.first.leftParticle(),children.first.rightParticle()) || DipolePartonSplitter::colourConnected(children.second.leftParticle(),children.second.rightParticle())); bool was_circular = circular(); if (hasLeftNeighbour(emittingDipole)) { list<Dipole>::iterator theLeftNeighbour = leftNeighbourIterator(emittingDipole); theLeftNeighbour->rightParticle(children.first.leftParticle()); if ( children.first.leftParticle()->scale() < sqr(theLeftNeighbour->rightScale()) ) theLeftNeighbour->rightScale(sqrt(children.first.leftParticle()->scale())); theLeftNeighbour->rightPDF(children.first.leftPDF()); theLeftNeighbour->rightFraction(children.first.leftFraction()); theLeftNeighbour->rightDecaying(children.first.leftDecaying()); theLeftNeighbour->update(); } if (hasRightNeighbour(emittingDipole)) { list<Dipole>::iterator theRightNeighbour = rightNeighbourIterator(emittingDipole); theRightNeighbour->leftParticle(children.second.rightParticle()); if ( children.second.rightParticle()->scale() < sqr(theRightNeighbour->leftScale()) ) theRightNeighbour->leftScale(sqrt(children.second.rightParticle()->scale())); theRightNeighbour->leftPDF(children.second.rightPDF()); theRightNeighbour->leftFraction(children.second.rightFraction()); theRightNeighbour->leftDecaying(children.second.rightDecaying()); theRightNeighbour->update(); } if (DipolePartonSplitter::colourConnected(children.first.leftParticle(),children.first.rightParticle()) && DipolePartonSplitter::colourConnected(children.second.leftParticle(),children.second.rightParticle())) { // nothing special to do, just replace the emitting dipole // by the right one and insert the left one before it *emittingDipole = children.second; childIterators.second = emittingDipole; childIterators.first = dipoles().insert(emittingDipole,children.first); if ( ggSingleDipole ) { ggSingleDipole = false; Dipole miss; miss.leftParticle(dipoles().back().rightParticle()); miss.rightParticle(dipoles().front().leftParticle()); miss.leftScale(dipoles().back().rightScale()); miss.rightScale(dipoles().front().leftScale()); miss.leftPDF(dipoles().back().rightPDF()); miss.rightPDF(dipoles().front().leftPDF()); miss.leftFraction(dipoles().back().rightFraction()); miss.rightFraction(dipoles().front().leftFraction()); miss.leftDecaying(dipoles().back().rightDecaying()); miss.rightDecaying(dipoles().front().leftDecaying()); miss.update(); dipoles().push_back(miss); } return dipoles().end(); } if (!DipolePartonSplitter::colourConnected(children.first.leftParticle(),children.first.rightParticle())) { if ( !was_circular && !ggSingleDipole ) { *emittingDipole = children.second; childIterators.second = emittingDipole; assert(emittingDipole != dipoles().begin()); childIterators.first = std::prev(emittingDipole); return emittingDipole; } *emittingDipole = children.second; if ( ggSingleDipole ) { ggSingleDipole = false; Dipole miss; miss.leftParticle(children.second.rightParticle()); miss.rightParticle(children.first.leftParticle()); miss.leftScale(children.second.rightScale()); miss.rightScale(children.first.leftScale()); miss.leftPDF(children.second.rightPDF()); miss.rightPDF(children.first.leftPDF()); miss.leftFraction(children.second.rightFraction()); miss.rightFraction(children.first.leftFraction()); miss.leftDecaying(dipoles().back().rightDecaying()); miss.rightDecaying(dipoles().front().leftDecaying()); miss.update(); dipoles().push_back(miss); childIterators.first = dipoles().begin(); childIterators.second = std::prev(dipoles().end()); return dipoles().end(); } childIterators.second = emittingDipole; if ( emittingDipole == dipoles().begin() ) childIterators.first = --dipoles().end(); else childIterators.first = std::prev(emittingDipole); if ( emittingDipole == dipoles().begin() ) return dipoles().end(); dipoles().splice(dipoles().begin(),dipoles(),emittingDipole,dipoles().end()); // explicitly fix iterators in case the splice implementation // at hand does invalidate iterators (the SGI docu says, it doesn't, // but it seems that this behaviour is not part of the standard) childIterators.second = dipoles().begin(); childIterators.first = --dipoles().end(); return dipoles().end(); } if (!DipolePartonSplitter::colourConnected(children.second.leftParticle(),children.second.rightParticle())) { if ( !was_circular && !ggSingleDipole ) { *emittingDipole = children.first; childIterators.first = emittingDipole; assert(emittingDipole != --dipoles().end()); childIterators.second = std::next(emittingDipole); return std::next(emittingDipole); } *emittingDipole = children.first; if ( ggSingleDipole ) { ggSingleDipole = false; Dipole miss; miss.leftParticle(children.second.rightParticle()); miss.rightParticle(children.first.leftParticle()); miss.leftScale(children.second.rightScale()); miss.rightScale(children.first.leftScale()); miss.leftPDF(children.second.rightPDF()); miss.rightPDF(children.first.leftPDF()); miss.leftFraction(children.second.rightFraction()); miss.rightFraction(children.first.leftFraction()); miss.leftDecaying(dipoles().back().rightDecaying()); miss.rightDecaying(dipoles().front().leftDecaying()); miss.update(); dipoles().push_front(miss); childIterators.first = dipoles().begin(); childIterators.second = std::prev(dipoles().end()); return dipoles().end(); } childIterators.first = emittingDipole; if ( emittingDipole == --dipoles().end() ) childIterators.second = dipoles().begin(); else childIterators.second = std::next(emittingDipole); if ( emittingDipole == --dipoles().end() ) return dipoles().end(); dipoles().splice(dipoles().begin(),dipoles(),std::next(emittingDipole),dipoles().end()); // explicitly fix iterators in case the splice implementation // at hand does invalidate iterators (the SGI docu says, it doesn't, // but it seems that this behaviour is not part of the standard) childIterators.first = dipoles().begin(); childIterators.second = --dipoles().end(); return dipoles().end(); } return dipoles().end(); } void DipoleChain::updateDipole(list<Dipole>::iterator dip) { dip->update(); if (hasLeftNeighbour(dip)) { list<Dipole>::iterator theLeftNeighbour = leftNeighbourIterator(dip); theLeftNeighbour->rightParticle(dip->leftParticle()); theLeftNeighbour->rightPDF(dip->leftPDF()); theLeftNeighbour->rightFraction(dip->leftFraction()); theLeftNeighbour->rightDecaying(dip->leftDecaying()); theLeftNeighbour->update(); } if (hasRightNeighbour(dip)) { list<Dipole>::iterator theRightNeighbour = rightNeighbourIterator(dip); theRightNeighbour->leftParticle(dip->rightParticle()); theRightNeighbour->leftPDF(dip->rightPDF()); theRightNeighbour->leftFraction(dip->rightFraction()); theRightNeighbour->leftDecaying(dip->rightDecaying()); theRightNeighbour->update(); } } void DipoleChain::print(ostream& os) const { os << "--- DipoleChain ----------------------------------------------------------------\n"; if ( theDipoles.empty() ) { os << " *** This DipoleChain is empty. ***\n"; } else { os << " " << (!circular() ? "non-" : "") << "circular with " << theDipoles.size() << " dipoles\n"; for (list<Dipole>::const_iterator dit = theDipoles.begin(); dit != theDipoles.end(); ++dit) { os << (*dit); } } os << "--------------------------------------------------------------------------------\n"; os << flush; } diff --git a/Shower/Dipole/Base/DipoleChain.h b/Shower/Dipole/Base/DipoleChain.h --- a/Shower/Dipole/Base/DipoleChain.h +++ b/Shower/Dipole/Base/DipoleChain.h @@ -1,158 +1,153 @@ // -*- C++ -*- // // DipoleChain.h is a part of Herwig - A multi-purpose Monte Carlo event generator // Copyright (C) 2002-2017 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_DipoleChain_H #define HERWIG_DipoleChain_H // // This is the declaration of the DipoleChain class. // #include "Dipole.h" namespace Herwig { using namespace ThePEG; /** * \ingroup DipoleShower * \author Simon Platzer * * \brief The DipoleChain class is used by the dipole shower to * represent a chain of dipoles. * */ class DipoleChain { public: /** * Default constructor */ DipoleChain(); /** * Return true, if this chain is circular. */ bool circular () const; /* * Return true, if the dipole referred to * has a left neighbour */ bool hasLeftNeighbour(list<Dipole>::const_iterator dc) const; /* * Return a reference to the left neighbour, * if existing */ Dipole& leftNeighbour(list<Dipole>::iterator dc); /* * Return a const reference to the left neighbour, * if existing */ const Dipole& leftNeighbour(list<Dipole>::const_iterator dc) const; /** * Return an iterator to the left neighbour */ list<Dipole>::iterator leftNeighbourIterator(list<Dipole>::iterator dc); /* * Return true, if the dipole referred to * has a right neighbour */ bool hasRightNeighbour (list<Dipole>::const_iterator dc) const; /* * Return a reference to the right neighbour, * if existing */ Dipole& rightNeighbour (list<Dipole>::iterator dc); /* * Return a const reference to the right neighbour, * if existing */ const Dipole& rightNeighbour (list<Dipole>::const_iterator dc) const; /** * Return an iterator to the right neighbour */ list<Dipole>::iterator rightNeighbourIterator(list<Dipole>::iterator dc); public: /** * Access the dipole list */ list<Dipole>& dipoles() { return theDipoles; } /** * Return the dipole list */ const list<Dipole>& dipoles() const { return theDipoles; } /** * Check for gg single dipole */ void check(); - /** - * Rearrange the dipole chain (arXiv:1801.06113). - */ - void rearrange(int dipmax,int diplong); - public: /* * Insert the given splitting; if this contains a chain-breakup emission and * the chain is circular, reshuffle the chain to make it non-circular; if it is * already non-circular return the iterator starting the new chain. If no * splitting is needed return the end iterator of the dipole list. * Set the iterators pointing to the children dipoles. */ list<Dipole>::iterator insertSplitting(list<Dipole>::iterator emittingDipole, pair<Dipole,Dipole> children, pair<list<Dipole>::iterator,list<Dipole>::iterator>& childIterators); /** * Indicate a change in the given dipole. */ void updateDipole(list<Dipole>::iterator dip); public: /** * Put information to ostream */ void print(ostream&) const; private: /** * The dipoles contained in this chain */ list<Dipole> theDipoles; /** * Switch on special treatment for * gg single dipole */ bool ggSingleDipole; }; inline ostream& operator << (ostream& os, const DipoleChain& di) { di.print(os); return os; } } #endif /* HERWIG_DipoleChain_H */ diff --git a/Shower/Dipole/Colorea/Colorea.cc b/Shower/Dipole/Colorea/Colorea.cc deleted file mode 100644 --- a/Shower/Dipole/Colorea/Colorea.cc +++ /dev/null @@ -1,724 +0,0 @@ - // -*- C++ -*- - // - // Colorea.cc is a part of Herwig - A multi-purpose Monte Carlo event generator - // Copyright (C) 2002-2017 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 Colorea class. - // - -#include "Colorea.h" -#include "eeuugg.h" -#include "eeuuggg.h" -#include "eeuugggg.h" -#include "Herwig/Shower/Dipole/Utility/DipolePartonSplitter.h" -#include "Herwig/Shower/Dipole/Base/DipoleChain.h" -#include "Herwig/Shower/Dipole/Base/Dipole.h" - - -#include <iterator> - -using namespace Herwig; - -Colorea::Colorea(){} - -list<Dipole>& Colorea::dipoles() { return theChain->dipoles(); } - -void Colorea::rearrange( int dipmax , int diplong ){ - - assert( dipmax >= diplong ); - // if there are only 2 dipoles in the chain - //there is nothing to do for now. - if( dipoles().size() < 3 )return; - - if( dipoles().size() == 3 ){ - // get the 3 dipoles: - auto dipi=dipoles().begin(); - auto dipj=dipoles().begin();dipj++; - auto dipk=dipoles().begin();dipk++;dipk++; - rearrange3(dipi,dipj,dipk); - - if( theChain->circular () ){ - // if the chain is circular, - // we need to check also the - // connected ends. - rearrange3(dipj,dipk,dipi); - rearrange3(dipk,dipi,dipj); - } - return; - } - if( dipoles().size() == 4 && dipmax >= 4 ){ - // get the 4 dipoles - auto dipi=dipoles().begin(); - auto dipj=dipoles().begin();dipj++; - auto dipk=dipoles().begin();dipk++;dipk++; - auto dipl=dipoles().begin();dipl++;dipl++;dipl++; - rearrange4(dipi,dipj,dipk,dipl); - return; - } - if( dipoles().size() == 5 && dipmax >= 5 ){ - // get the 5 dipoles - auto dipi=dipoles().begin(); - auto dipj=dipoles().begin();dipj++; - auto dipk=dipoles().begin();dipk++;dipk++; - auto dipl=dipoles().begin();dipl++;dipl++;dipl++; - auto dipm=dipoles().begin();dipm++;dipm++;dipm++;dipm++; - rearrange5(dipi,dipj,dipk,dipl,dipm); - return; - } - // if the chain is longer than dipmax - // go though the chain with diplong dipoles. - rearrangeLong( diplong ); - return; - -} - -void Colorea::rearrangeLong( int diplong ){ - if ( diplong == 3 ){ - // get the 3 dipoles: - auto dipi=dipoles().begin(); - auto dipj=dipoles().begin();dipj++; - auto dipk=dipoles().begin();dipk++;dipk++; - while (dipk!=dipoles().end()) { - rearrange3(dipi,dipj,dipk); - dipi++;dipj++;dipk++; - } - if( theChain->circular() ){ - // if the chain is circular, - // we need to check also the - // connected ends. - dipk=dipoles().begin(); // as dipk was end - rearrange3( dipi , dipj , dipk ); - // rotate further. - dipi++;dipk++; - dipj=dipoles().begin(); - rearrange3(dipi,dipj,dipk); - } - }else if (diplong ==4){ - // get the 4 dipoles: - assert(!theChain->circular ()); - auto dipi=dipoles().begin(); - auto dipj=dipoles().begin();dipj++; - auto dipk=dipoles().begin();dipk++;dipk++; - auto dipl=dipoles().begin();dipl++;dipl++;dipl++; - while (dipl!=dipoles().end()) { - rearrange4(dipi,dipj,dipk,dipl); - dipi++;dipj++;dipk++;dipl++; - } - }else if (diplong ==5){ - // get the 5 dipoles: - assert(!theChain->circular ()); - auto dipi=dipoles().begin(); - auto dipj=dipoles().begin();dipj++; - auto dipk=dipoles().begin();dipk++;dipk++; - auto dipl=dipoles().begin();dipl++;dipl++;dipl++; - auto dipm=dipoles().begin();dipm++;dipm++;dipm++;dipm++; - - while (dipm!=dipoles().end()) { - rearrange5(dipi,dipj,dipk,dipl,dipm); - dipi++;dipj++;dipk++;dipl++;dipm++; - } - }else{ - assert(false); - } -} - - - -void Colorea::rmcol(tColinePtr A, - tColinePtr B, - list<Dipole>::iterator & dip){ - if(A==B){ - auto AA=A->coloured(); - for (auto col:AA){ - if(col==dip->leftParticle()) A->removeColoured (col); - if(col==dip->rightParticle())A->removeColoured (col); - } - auto BB=A->antiColoured(); - for (auto col:BB){ - if(col==dip->leftParticle()) A->removeAntiColoured (col); - if(col==dip->rightParticle())A->removeAntiColoured (col); - } - } -} - - - -void Colorea::removeColors(list<Dipole>::iterator dipi, - list<Dipole>::iterator dipj, - list<Dipole>::iterator dipk){ - auto ilc = dipi->leftParticle()->colourInfo()-> colourLine(); - auto irc = dipi->rightParticle()->colourInfo()-> colourLine(); - auto ila = dipi->leftParticle()->colourInfo()-> antiColourLine(); - auto ira = dipi->rightParticle()->colourInfo()-> antiColourLine(); - auto jlc = dipj->leftParticle()->colourInfo()-> colourLine(); - auto jrc = dipj->rightParticle()->colourInfo()-> colourLine(); - auto jla = dipj->leftParticle()->colourInfo()-> antiColourLine(); - auto jra = dipj->rightParticle()->colourInfo()-> antiColourLine(); - auto klc = dipk->leftParticle()->colourInfo()-> colourLine(); - auto krc = dipk->rightParticle()->colourInfo()-> colourLine(); - auto kla = dipk->leftParticle()->colourInfo()-> antiColourLine(); - auto kra = dipk->rightParticle()->colourInfo()-> antiColourLine(); - - if( ilc && irc ) rmcol(ilc,irc,dipi); - if( ila && ira ) rmcol(ila,ira,dipi); - if( jlc && jrc ) rmcol(jlc,jrc,dipj); - if( jla && jra ) rmcol(jla,jra,dipj); - if( klc && krc ) rmcol(klc,krc,dipk); - if( kla && kra ) rmcol(kla,kra,dipk); - - return; -} - - - -void Colorea::rearrange3_FF_FF_FF(list<Dipole>::iterator dipi, - list<Dipole>::iterator dipj, - list<Dipole>::iterator dipk){ - produceSwapping( dipi, dipj, dipk,true); - // compared to IF of FI dipoles we do not need to repair colors as - // the swapping just modified the gluon momenta. -} - - - - - -void Colorea::rearrange3_FF_FI_IF(list<Dipole>::iterator dipi, - list<Dipole>::iterator dipj, - list<Dipole>::iterator dipk){ - auto ilc = dipi->leftParticle()->colourInfo()-> colourLine(); - auto irc = dipi->rightParticle()->colourInfo()-> colourLine(); - auto ila = dipi->leftParticle()->colourInfo()-> antiColourLine(); - auto ira = dipi->rightParticle()->colourInfo()-> antiColourLine(); - auto jlc = dipj->leftParticle()->colourInfo()-> colourLine(); - auto jrc = dipj->rightParticle()->colourInfo()-> colourLine(); - auto jla = dipj->leftParticle()->colourInfo()-> antiColourLine(); - auto jra = dipj->rightParticle()->colourInfo()-> antiColourLine(); - auto klc = dipk->leftParticle()->colourInfo()-> colourLine(); - auto krc = dipk->rightParticle()->colourInfo()-> colourLine(); - auto kla = dipk->leftParticle()->colourInfo()-> antiColourLine(); - auto kra = dipk->rightParticle()->colourInfo()-> antiColourLine(); - - bool didperm = produceSwapping( dipi, dipj, dipk,false); - - if (!didperm)return; - removeColors(dipi,dipj,dipk); - auto new1Line = new_ptr(ColourLine()); - auto new2Line = new_ptr(ColourLine()); - auto new3Line = new_ptr(ColourLine()); - //Example: - // before - //ila (F)--irc (F) =g1(in,jl)= jla (F) -- jra(I)=g2(in,jr)=klc(I) -- krc(F) - // Should be after: - //ila (F) -- ira (I) =g2(in,jl)= jlc (I) -- jrc(F) =g1(out,jr)= kla(F) -- krc(F) - - //Then: - // FaFc_FaIa_IcFc FFFIIF aa -> FaIa_IcFc_FaFc - // FcFa_FcIc_IaFa FFFIIF cc -> FcIc_IaFa_FcFa - // FaFc_FaIa_IcIa FFFIII aa -> FaIa_IcFc_FaIa - // FcFa_FcIc_IaIc FFFIII cc -> FcIc_IaFa_FcIc - // IcFc_FaIa_IcFc IFFIIF aa -> IcIa_IcFc_FaFc - // IaFa_FcIc_IaFa IFFIIF cc -> IaIc_IaFa_FcFa - // IcFc_FaIa_IcIa IFFIII aa -> IcIa_IcFc_FaIa - // IaFa_FcIc_IaIc IFFIII cc -> IaIc_IaFa_FcIc - // end particles keep colors - // central all change color. - // - - if(ilc==irc){ - new1Line->addColoured (dipi->leftParticle()); - new1Line->addAntiColoured (dipi->rightParticle());} - if(ilc==ira){ - new1Line->addColoured (dipi->leftParticle()); - new1Line->addColoured (dipi->rightParticle());} - if(ila==irc){ - new1Line->addAntiColoured (dipi->leftParticle()); - new1Line->addAntiColoured (dipi->rightParticle());} - if(ila==ira){ - new1Line->addAntiColoured (dipi->leftParticle()); - new1Line->addColoured (dipi->rightParticle());} - - if(jlc==jrc){ - new2Line->addAntiColoured (dipj->leftParticle()); - new2Line->addAntiColoured (dipj->rightParticle());} - if(jlc==jra){ - new2Line->addAntiColoured (dipj->leftParticle()); - new2Line->addColoured (dipj->rightParticle());} - if(jla==jrc){ - new2Line->addColoured (dipj->leftParticle()); - new2Line->addAntiColoured (dipj->rightParticle());} - if(jla==jra){ - new2Line->addColoured (dipj->leftParticle()); - new2Line->addColoured (dipj->rightParticle());} - - if(klc==krc){ - new3Line->addAntiColoured (dipk->leftParticle()); - new3Line->addColoured (dipk->rightParticle());} - if(klc==kra){ - new3Line->addAntiColoured (dipk->leftParticle()); - new3Line->addAntiColoured (dipk->rightParticle());} - if(kla==krc){ - new3Line->addColoured (dipk->leftParticle()); - new3Line->addColoured (dipk->rightParticle());} - if(kla==kra){ - new3Line->addColoured (dipk->leftParticle()); - new3Line->addAntiColoured (dipk->rightParticle());} - -} - - - -void Colorea::rearrange3(list<Dipole>::iterator dipi, - list<Dipole>::iterator dipj, - list<Dipole>::iterator dipk){ - - // We only care about the cenral dipole. - // If central dipole is FI or IF we need to take care that - // momentum fractions and pdfs are treated correctly. - // If central dipole is FF we only swap momenta. - // Also the color lines of IF and FI swappings - // needs to be repaired. - - bool dipjisFF = dipj->leftFraction() == 1 && dipj->rightFraction() == 1; - bool dipjisIF = dipj->leftFraction() != 1 && dipj->rightFraction() == 1; - bool dipjisFI = dipj->leftFraction() == 1 && dipj->rightFraction() != 1; - bool dipjisII = dipj->leftFraction() != 1 && dipj->rightFraction() != 1; - - // if the possibly swaping dipole is II we - // do nothing as this should not be swapped!(?) - if(dipjisII) return; - - if(dipjisFF){ - // possibly swap gluon momenta - rearrange3_FF_FF_FF(dipi,dipj,dipk); - } - // If central dipole is IF or FI -> keep end colors and swap central colors - else if( dipjisIF || dipjisFI ){ - rearrange3_FF_FI_IF(dipi,dipj,dipk); - } - else { - assert(false); - } - - - return; - -} - - // local helper function to fill madgraph momenta. -void fillMGmom(double * mom,Lorentz5Momentum lmom){ - mom[0]=lmom.t()/GeV; - mom[1]=lmom.x()/GeV; - mom[2]=lmom.y()/GeV; - mom[3]=lmom.z()/GeV; -} - - -bool Colorea::produceSwapping(list<Dipole>::iterator dipi, - list<Dipole>::iterator dipj, - list<Dipole>::iterator dipk,bool FF){ - - // get the process for all tripple dipole swappings. - static auto pro= eeuugg(); - - // set mass of q qbar - pro.setMass( 3 , dipi->leftParticle()->momentum().m()/GeV); - pro.setMass( 4 , dipk->rightParticle()->momentum().m()/GeV); - - // If the central dipole dipj is not a FF-dipole the rearragment is - // not a simple swapping of gluon momenta. We need to take care that - // the 'new' dipoles get the correct fraction, pdf and index assignments. - if(!FF){ - // for the interfacing with madgraph we need new momenta - double mom0[4], mom1[4], mom2[4]; - double mom3[4], mom4[4], mom5[4]; - - //q - double prefact=1.;//dipi->leftFraction()!=0.?-1.:1.; ?? - auto PP=dipi->leftParticle()->momentum(); - PP.setX(prefact*PP.x()); - PP.setY(prefact*PP.y()); - PP.setZ(prefact*PP.z()); - // get the momentum sum for the triple dipole system. - // we need this for the incoming e+e-. - auto fmomsum=PP; - // lets rotate the system to be sure that momenta - // are not misinterpreted as incomming. - PP=PP.rotateX(0.3); - fillMGmom(mom2,PP); - - - //qbar - prefact=1.;//dipk->rightFraction()!=0.?-1.:1.; - PP=dipk->rightParticle()->momentum(); - PP.setX(prefact*PP.x()); - PP.setY(prefact*PP.y()); - PP.setZ(prefact*PP.z()); - fmomsum+=PP; - PP=PP.rotateX(0.3); - fillMGmom(mom3,PP); - - //g1 - prefact=1.;//dipj->leftFraction()!=0.?-1.:1.; - PP=dipj->leftParticle()->momentum(); - PP.setX(prefact*PP.x()); - PP.setY(prefact*PP.y()); - PP.setZ(prefact*PP.z()); - fmomsum+=PP; - PP=PP.rotateX(0.3); - fillMGmom(mom4,PP); - - //g2 - prefact=1.;//dipj->rightFraction()!=0.?-1.:1.; - PP=dipj->rightParticle()->momentum(); - PP.setX(prefact*PP.x()); - PP.setY(prefact*PP.y()); - PP.setZ(prefact*PP.z()); - fmomsum+=PP; - PP=PP.rotateX(0.3); - fillMGmom(mom5,PP); - - // get the boost to to triple dipole restframe - auto boostto=fmomsum.findBoostToCM(); - // center of mass energy. - auto CME=fmomsum.m2(); - // construct incoming momenta. - // point incoming axis along arbitrary y axis; - Lorentz5Momentum in1=Lorentz5Momentum(ZERO,sqrt(CME)/2.,ZERO,sqrt(CME)/2.); - Lorentz5Momentum in2=Lorentz5Momentum(ZERO,-sqrt(CME)/2.,ZERO,sqrt(CME)/2.); - - in1=in1.boost(-boostto); - in1=in1.rotateX(0.3); - in2=in2.boost(-boostto); - in2=in2.rotateX(0.3); - fillMGmom(mom0,in1); - fillMGmom(mom1,in2); - - vector < double * > momenta{{ mom0, mom1, mom2, - mom3, mom4, mom5}}; - - // calculate the permutation from madgraph process. - auto perm=pro.producePermutation(UseRandom::rnd(),momenta); - // for tripple dipoles there is only one possible permutation. - bool didperm=perm[0]!=5; - - if(!didperm) return didperm; - - // insert the original dipj fractions - vector<double > tmpfrac{{dipj->leftFraction(),dipj->rightFraction()}}; - // insert the original dipj pdfs - vector< PDF > tmppdf; - tmppdf.push_back(dipj->leftPDF()); - tmppdf.push_back(dipj->rightPDF()); - // insert the original dipj particles - vector<PPtr> tmppart; - tmppart.push_back(dipj->leftParticle()); - tmppart.push_back(dipj->rightParticle()); - // make sure the dipj are gluons. - assert(dipj->leftParticle()->id()==21); - assert(dipj->rightParticle()->id()==21); - - // Now set the new or old particles in the dipole - dipi->rightParticle(tmppart[perm[0]-1-4]); - dipj->leftParticle (tmppart[perm[0]-1-4]); - dipj->rightParticle(tmppart[perm[1]-1-4]); - dipk->leftParticle(tmppart[perm[1]-1-4]); - - dipi->rightPDF(tmppdf[perm[0]-1-4]); - dipj->leftPDF (tmppdf[perm[0]-1-4]); - dipj->rightPDF(tmppdf[perm[1]-1-4]); - dipk->leftPDF (tmppdf[perm[1]-1-4]); - - dipi->rightFraction(tmpfrac[perm[0]-1-4]); - dipj->leftFraction (tmpfrac[perm[0]-1-4]); - dipj->rightFraction(tmpfrac[perm[1]-1-4]); - dipk->leftFraction (tmpfrac[perm[1]-1-4]); - - - auto firstindex =DipoleIndex(&(dipj->leftParticle()->data()), - &(dipj->rightParticle()->data()), - dipj->leftPDF(), - dipj->rightPDF()); - auto secondindex =DipoleIndex(&(dipj->rightParticle()->data()), - &(dipj->leftParticle()->data()), - dipj->rightPDF(), - dipj->leftPDF()); - dipj->setFirstIndex(firstindex); - dipj->setSecondIndex(secondindex); - - auto firstindex2 =DipoleIndex(&(dipi->leftParticle()->data()), - &(dipi->rightParticle()->data()), - dipi->leftPDF(), - dipi->rightPDF()); - auto secondindex2 =DipoleIndex(&(dipi->rightParticle()->data()), - &(dipi->leftParticle()->data()), - dipi->rightPDF(), - dipi->leftPDF()); - dipi->setFirstIndex(firstindex2); - dipi->setSecondIndex(secondindex2); - - auto firstindex3 =DipoleIndex(&(dipk->leftParticle()->data()), - &(dipk->rightParticle()->data()), - dipk->leftPDF(), - dipk->rightPDF()); - auto secondindex3 =DipoleIndex(&(dipk->rightParticle()->data()), - &(dipk->leftParticle()->data()), - dipk->rightPDF(), - dipk->leftPDF()); - dipk->setFirstIndex(firstindex3); - dipk->setSecondIndex(secondindex3); - // check a few things - // assert(dipj->leftFraction()!=1.&&(dipj->leftPDF().pdf() ) || dipj->leftFraction()==1. &&!(dipj->leftPDF().pdf())); - // assert(dipj->rightFraction()!=1.&&(dipj->rightPDF().pdf() )|| dipj->rightFraction()==1.&&!(dipj->rightPDF().pdf())); - // assert(dipi->leftFraction()!=1.&&(dipi->leftPDF().pdf() ) || dipi->leftFraction()==1. &&!(dipi->leftPDF().pdf())); - // assert(dipi->rightFraction()!=1.&&(dipi->rightPDF().pdf() )|| dipi->rightFraction()==1.&&!(dipi->rightPDF().pdf())); - // assert(dipk->leftFraction()!=1.&&(dipk->leftPDF().pdf() ) || dipk->leftFraction()==1. &&!(dipk->leftPDF().pdf())); - // assert(dipk->rightFraction()!=1.&&(dipk->rightPDF().pdf() )|| dipk->rightFraction()==1.&&!(dipk->rightPDF().pdf())); - - return didperm; - }else{ - // if dipj is a FF dipole the color rearrangement is done by - // swapping the gluon momenta. Let's do this! - - double mom0[4]; - double mom1[4]; - double mom2[4]; - double mom3[4]; - double mom4[4]; - double mom5[4]; - vector<Lorentz5Momentum> tmpvec; - - //q - auto PP=dipi->leftParticle()->momentum(); - auto fmomsum=PP; - PP=PP.rotateX(0.3); - fillMGmom(mom2,PP); - - //qbar - PP=dipk->rightParticle()->momentum(); - fmomsum+=PP; - PP=PP.rotateX(0.3); - fillMGmom(mom3,PP); - - //g1 - PP=dipj->leftParticle()->momentum(); - fmomsum+=PP; - PP=PP.rotateX(0.3); - fillMGmom(mom4,PP); - - //g2 - PP=dipj->rightParticle()->momentum(); - fmomsum+=PP; - PP=PP.rotateX(0.3); - fillMGmom(mom5,PP); - - // get the boost to to triple dipole restframe - auto boostto=fmomsum.findBoostToCM(); - - auto CME=fmomsum.m2(); - // point incoming axis along arbitrary y axis; - Lorentz5Momentum in1=Lorentz5Momentum(ZERO,sqrt(CME)/2.,ZERO,sqrt(CME)/2.); - Lorentz5Momentum in2=Lorentz5Momentum(ZERO,-sqrt(CME)/2.,ZERO,sqrt(CME)/2.); - - - - assert(dipj->leftParticle()->id()==21); - assert(dipj->rightParticle()->id()==21); - - in1=in1.boost(-boostto); - in1=in1.rotateX(0.3); - in2=in2.boost(-boostto); - in2=in2.rotateX(0.3); - fillMGmom(mom0,in1); - fillMGmom(mom1,in2); - - vector < double * > momenta{{ mom0, mom1, mom2, - mom3, mom4, mom5}}; - - // calculate the permutation from madgraph process. - auto perm=pro.producePermutation(UseRandom::rnd(),momenta); - - bool didperm=perm[0]!=5; - - // For final state we can just swap gluon momenta. - tmpvec.push_back(dipj->leftParticle()->momentum()); // g1 - tmpvec.push_back(dipj->rightParticle()->momentum()); // g2 - - dipj->leftParticle() ->setMomentum(tmpvec[perm[0]-1-4]); - dipj->rightParticle()->setMomentum(tmpvec[perm[1]-1-4]); - - return didperm; - } - -} - - - - - -void Colorea::rearrange4(list<Dipole>::iterator dipi, - list<Dipole>::iterator dipj, -#ifndef NDEBUG - list<Dipole>::iterator dipk, -#else - list<Dipole>::iterator , -#endif - list<Dipole>::iterator dipl){ - - assert(dipk->leftParticle()==dipj->rightParticle()); - assert(dipl->leftParticle()==dipk->rightParticle()); - - double mom0[4], mom1[4], mom2[4], mom3[4]; - double mom6[4], mom4[4], mom5[4]; - - // q g1 g2 g3 qbar - // il -- ir=jl -- jr=kl -- kr=ll -- lr - - //q - fillMGmom(mom2,dipi->leftParticle()->momentum()); - //qbar - fillMGmom(mom3,dipl->rightParticle()->momentum()); - //g1 - fillMGmom(mom4,dipj->leftParticle()->momentum()); - //g2 - fillMGmom(mom5,dipj->rightParticle()->momentum()); - //g3 - fillMGmom(mom6,dipl->leftParticle()->momentum()); - - // q g1 g2 g3 qbar - // il -- ir=jl -- jr=kl -- kr=ll -- lr - auto fmomsum=dipi->leftParticle()->momentum()+ - dipj->leftParticle()->momentum()+ - dipj->rightParticle()->momentum()+ - dipl->leftParticle()->momentum()+ - dipl->rightParticle()->momentum(); - - auto boostto=fmomsum.findBoostToCM(); - - auto CME=fmomsum.m2(); - // point incoming axis along arbitrary y axis; - Lorentz5Momentum in1=Lorentz5Momentum(ZERO,sqrt(CME)/2.,ZERO,sqrt(CME)/2.); - Lorentz5Momentum in2=Lorentz5Momentum(ZERO,-sqrt(CME)/2.,ZERO,sqrt(CME)/2.); - - in1=in1.boost(-boostto); - in2=in2.boost(-boostto); - fillMGmom(mom0,in1); - fillMGmom(mom1,in2); - - vector < double * > momenta{{ mom0, mom1, - mom2, mom3, - mom4, mom5, mom6}}; - - static auto pro= eeuuggg(); - - // set mass of q qbar - pro.setMass( 3 , dipi->leftParticle()->momentum().m()/GeV); - pro.setMass( 5 , dipl->rightParticle()->momentum().m()/GeV); - - - auto perm=pro.producePermutation(UseRandom::rnd(),momenta); - - vector<Lorentz5Momentum> tmpvec; - tmpvec.push_back(dipj->leftParticle()->momentum()); // g1 - tmpvec.push_back(dipj->rightParticle()->momentum()); // g2 - tmpvec.push_back(dipl->leftParticle()->momentum()); // g3 - - dipj->leftParticle() ->setMomentum(tmpvec[perm[0]-1-4]); - dipj->rightParticle()->setMomentum(tmpvec[perm[1]-1-4]); - dipl->leftParticle() ->setMomentum(tmpvec[perm[2]-1-4]); - -} - - - - - -void Colorea::rearrange5(list<Dipole>::iterator dipi, - list<Dipole>::iterator dipj, -#ifndef NDEBUG - list<Dipole>::iterator dipk, -#else - list<Dipole>::iterator , -#endif - list<Dipole>::iterator dipl, - list<Dipole>::iterator dipm){ - - assert(dipk->leftParticle()==dipj->rightParticle()); - assert(dipl->leftParticle()==dipk->rightParticle()); - - - double mom0[4], mom1[4], mom2[4], mom3[4]; - double mom4[4], mom5[4], mom6[4], mom7[4]; - // q g1 g2 g3 g4 qbar - // il -- ir=jl -- jr=kl -- kr=ll -- lr=ml -- mr - - //q - fillMGmom(mom2,dipi->leftParticle()->momentum()); - //qbar - fillMGmom(mom3,dipm->rightParticle()->momentum()); - //g1 - fillMGmom(mom4,dipj->leftParticle()->momentum()); - //g2 - fillMGmom(mom5,dipj->rightParticle()->momentum()); - //g3 - fillMGmom(mom6,dipl->leftParticle()->momentum()); - //g4 - fillMGmom(mom7,dipm->leftParticle()->momentum()); - - // q g1 g2 g3 g4 qbar - // il -- ir=jl -- jr=kl -- kr=ll -- lr=ml -- mr - auto fmomsum=dipi->leftParticle()->momentum()+ - dipj->leftParticle()->momentum()+ - dipj->rightParticle()->momentum()+ - dipl->leftParticle()->momentum()+ - dipl->rightParticle()->momentum()+ - dipm->rightParticle()->momentum(); - - auto boostto=fmomsum.findBoostToCM(); - - auto CME=fmomsum.m2(); - // point incoming axis along arbitrary y axis; - Lorentz5Momentum in1=Lorentz5Momentum(ZERO,sqrt(CME)/2.,ZERO,sqrt(CME)/2.); - Lorentz5Momentum in2=Lorentz5Momentum(ZERO,-sqrt(CME)/2.,ZERO,sqrt(CME)/2.); - - - in1=in1.boost(-boostto); - in2=in2.boost(-boostto); - fillMGmom(mom0,in1); - fillMGmom(mom1,in2); - - vector < double * > momenta{{ mom0, mom1, mom2, mom3, - mom4, mom5, mom6, mom7}}; - - static auto pro= eeuugggg(); - - // set mass of q qbar - pro.setMass( 3 , dipi->leftParticle()->momentum().m()/GeV); - pro.setMass( 5 , dipl->rightParticle()->momentum().m()/GeV); - - auto perm=pro.producePermutation(UseRandom::rnd(),momenta); - - vector<Lorentz5Momentum> tmpvec; - tmpvec.push_back(dipj->leftParticle()->momentum()); // g1 - tmpvec.push_back(dipj->rightParticle()->momentum()); // g2 - tmpvec.push_back(dipl->leftParticle()->momentum()); // g3 - tmpvec.push_back(dipm->leftParticle()->momentum()); // g4 - - // set the gluon momenta with permuted momenta. - dipj->leftParticle() ->setMomentum(tmpvec[perm[0]-1-4]); - dipj->rightParticle()->setMomentum(tmpvec[perm[1]-1-4]); - dipl->leftParticle() ->setMomentum(tmpvec[perm[2]-1-4]); - dipm->leftParticle() ->setMomentum(tmpvec[perm[3]-1-4]); - -} - - - - - - diff --git a/Shower/Dipole/Colorea/Colorea.fh b/Shower/Dipole/Colorea/Colorea.fh deleted file mode 100644 --- a/Shower/Dipole/Colorea/Colorea.fh +++ /dev/null @@ -1,21 +0,0 @@ -// -*- C++ -*- -// This is the forward declaration of the Colorea class - -#ifndef HERWIG_Colorea_FH -#define HERWIG_Colorea_FH - -#include "ThePEG/Config/ThePEG.h" -#include "ThePEG/Config/Pointers.h" - - -namespace Herwig { - -class Colorea; -using namespace ThePEG; - - ThePEG_DECLARE_POINTERS(Colorea , ColoreaPtr ); - - -} - -#endif // HERWIG_Colorea_FH diff --git a/Shower/Dipole/Colorea/Colorea.h b/Shower/Dipole/Colorea/Colorea.h deleted file mode 100644 --- a/Shower/Dipole/Colorea/Colorea.h +++ /dev/null @@ -1,147 +0,0 @@ -// -*- C++ -*- -// -// Colorea.h is a part of Herwig - A multi-purpose Monte Carlo event generator -// Copyright (C) 2002-2017 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_Colorea_H -#define HERWIG_Colorea_H -// -// This is the declaration of the Colorea class. -// -#include "Herwig/Shower/Dipole/Base/DipoleChain.fh" -#include "Herwig/Shower/Dipole/Base/Dipole.h" - -namespace Herwig { - -using namespace ThePEG; - -/** - * \ingroup DipoleShower - * \author Johannes Bellm - * - * This class implemets the method described in arXiv:1801.06113. - * and it's extension described in arXiv:180X.XXXXX. - * It allows to calculate the probability to rearrange - * dipole chains with simple matrix elements. - * - * The implementation currently allows: - * - rearranging pure FF dipole chains with - * processes: eeuugg eeuuggg and eeuugggg - * - IF or FI dipoles can be rearranged with eeuugg. - * - II should not be rearranged. - * - masses of the q qbar particles are set. - * - */ -class Colorea { - -public: - - /** - * Default constructor - */ - Colorea(); - - /** - * main function to rearrange the dipole chain. - * - dipmax: chains with dipmax are rearranged with matix elements including - * dipmax dipoles: - * dipmax=3 -> eeuugg - * dipmax=4 -> eeuuggg - * dipmax=5 -> eeuugggg - * if a chain contains more than dipmax dipoles, we treat the chain - * as long. - * - diplong: this parameter allows to change the behaviour for Coloreas - * that are longer than dipmax (long chains). - * If diplong is 3 the chain is rearranged with eeuugg - * matrix elements. - * If diplong is 4 the chain is rearranged with eeuuggg - * matrix elements. diplong > 4 is currently not implemented. - * Note: We dont observe a difference between the diplong=3 or - * diplong=4 treatment. - */ - void rearrange(int dipmax,int diplong); - - /** - * Set the chain to use in the rearrangement. - */ - void setChain(Ptr<DipoleChain>::tptr ch){theChain=ch;}; - - // Everything below is private. The rearranging is acting only on the current chain. - private: - /** - * Main function for rearranging tripple dipoles. - */ - void rearrange3(list<Dipole>::iterator dipi, - list<Dipole>::iterator dipj, - list<Dipole>::iterator dipk); - - /** - * Function to rearrange triple dipoles in the all FF dipole case. - */ - void rearrange3_FF_FF_FF(list<Dipole>::iterator dipi, - list<Dipole>::iterator dipj, - list<Dipole>::iterator dipk); - - /** - * Function to rearrange triple dipoles if dipj is FI dipole. - * This function is also used for IF. - */ - void rearrange3_FF_FI_IF(list<Dipole>::iterator dipi, - list<Dipole>::iterator dipj, - list<Dipole>::iterator dipk); - /** - * Main function for rearranging 4 dipoles. - * This funtion currently only implements the case of 4 FF dipoles. - */ - void rearrange4(list<Dipole>::iterator dipi, - list<Dipole>::iterator dipj, - list<Dipole>::iterator dipk, - list<Dipole>::iterator dipl); - /** - * Main function for rearranging 5 dipoles. - * This funtion currently only implements the case of 5 FF dipoles. - */ - void rearrange5(list<Dipole>::iterator dipi, - list<Dipole>::iterator dipj, - list<Dipole>::iterator dipk, - list<Dipole>::iterator dipl, - list<Dipole>::iterator dipm); - /** - * Rearrange long chains. - */ - void rearrangeLong(int diplong); - - /** - * Produce the possible swapping or the dipj gluons. - */ - bool produceSwapping(list<Dipole>::iterator dipi, - list<Dipole>::iterator dipj, - list<Dipole>::iterator dipk,bool FF); - - // helper function to remove particles from color line if color line connects them. - void rmcol(tColinePtr A,tColinePtr B, list<Dipole>::iterator & dip); - - // remove connecting color lines from these dipoles - void removeColors(list<Dipole>::iterator dipi, - list<Dipole>::iterator dipj, - list<Dipole>::iterator dipk); - - // Access the dipoles of the current chain. - list<Dipole>& dipoles(); - - private: - // the current chain to rearrange. - Ptr<DipoleChain>::tptr theChain; - -}; - -inline ostream& operator << (ostream& os, const Colorea& ) { - return os; -} - -} - -#endif /* HERWIG_Colorea_H */ diff --git a/Shower/Dipole/Colorea/HelAmps_sm.cc b/Shower/Dipole/Colorea/HelAmps_sm.cc deleted file mode 100644 --- a/Shower/Dipole/Colorea/HelAmps_sm.cc +++ /dev/null @@ -1,1024 +0,0 @@ -//========================================================================== -// This file has been automatically generated for C++ Standalone by -// MadGraph5_aMC@NLO v. 2.5.4, 2017-03-28 -// By the MadGraph5_aMC@NLO Development Team -// Visit launchpad.net/madgraph5 and amcatnlo.web.cern.ch -//========================================================================== - -#include "HelAmps_sm.h" -#include <complex> -#include <cmath> -#include <iostream> -#include <cstdlib> -using namespace std; - -namespace MG5_sm_COLOREA -{ - -void ixxxxx(double p[4], double fmass, int nhel, int nsf, complex<double> fi[6]) -{ - complex<double> chi[2]; - double sf[2], sfomega[2], omega[2], pp, pp3, sqp0p3, sqm[2]; - int ip, im, nh; - fi[0] = complex<double> (-p[0] * nsf, -p[3] * nsf); - fi[1] = complex<double> (-p[1] * nsf, -p[2] * nsf); - nh = nhel * nsf; - if (fmass != 0.0) - { - pp = min(p[0], sqrt(p[1] * p[1] + p[2] * p[2] + p[3] * p[3])); - if (pp == 0.0) - { - sqm[0] = sqrt(std::abs(fmass)); - sqm[1] = Sgn(sqm[0], fmass); - ip = (1 + nh)/2; - im = (1 - nh)/2; - fi[2] = ip * sqm[ip]; - fi[3] = im * nsf * sqm[ip]; - fi[4] = ip * nsf * sqm[im]; - fi[5] = im * sqm[im]; - } - else - { - sf[0] = (1 + nsf + (1 - nsf) * nh) * 0.5; - sf[1] = (1 + nsf - (1 - nsf) * nh) * 0.5; - omega[0] = sqrt(p[0] + pp); - omega[1] = fmass/omega[0]; - ip = (1 + nh)/2; - im = (1 - nh)/2; - sfomega[0] = sf[0] * omega[ip]; - sfomega[1] = sf[1] * omega[im]; - pp3 = max(pp + p[3], 0.0); - chi[0] = complex<double> (sqrt(pp3 * 0.5/pp), 0); - if (pp3 == 0.0) - { - chi[1] = complex<double> (-nh, 0); - } - else - { - chi[1] = complex<double> (nh * p[1], p[2])/sqrt(2.0 * pp * pp3); - } - fi[2] = sfomega[0] * chi[im]; - fi[3] = sfomega[0] * chi[ip]; - fi[4] = sfomega[1] * chi[im]; - fi[5] = sfomega[1] * chi[ip]; - } - } - else - { - if (p[1] == 0.0 and p[2] == 0.0 and p[3] < 0.0) - { - sqp0p3 = 0.0; - } - else - { - sqp0p3 = sqrt(max(p[0] + p[3], 0.0)) * nsf; - } - chi[0] = complex<double> (sqp0p3, 0.0); - if (sqp0p3 == 0.0) - { - chi[1] = complex<double> (-nhel * sqrt(2.0 * p[0]), 0.0); - } - else - { - chi[1] = complex<double> (nh * p[1], p[2])/sqp0p3; - } - if (nh == 1) - { - fi[2] = complex<double> (0.0, 0.0); - fi[3] = complex<double> (0.0, 0.0); - fi[4] = chi[0]; - fi[5] = chi[1]; - } - else - { - fi[2] = chi[1]; - fi[3] = chi[0]; - fi[4] = complex<double> (0.0, 0.0); - fi[5] = complex<double> (0.0, 0.0); - } - } - return; -} - - -double Sgn(double a, double b) -{ - return (b < 0)? - abs(a):abs(a); -} - - -void txxxxx(double p[4], double tmass, int nhel, int nst, complex<double> - tc[18]) -{ - complex<double> ft[6][4], ep[4], em[4], e0[4]; - double pt, pt2, pp, pzpt, emp, sqh, sqs; - int i, j; - - sqh = sqrt(0.5); - sqs = sqrt(0.5/3); - - pt2 = p[1] * p[1] + p[2] * p[2]; - pp = min(p[0], sqrt(pt2 + p[3] * p[3])); - pt = min(pp, sqrt(pt2)); - - ft[4][0] = complex<double> (p[0] * nst, p[3] * nst); - ft[5][0] = complex<double> (p[1] * nst, p[2] * nst); - - // construct eps+ - if(nhel >= 0) - { - if(pp == 0) - { - ep[0] = complex<double> (0, 0); - ep[1] = complex<double> (-sqh, 0); - ep[2] = complex<double> (0, nst * sqh); - ep[3] = complex<double> (0, 0); - } - else - { - ep[0] = complex<double> (0, 0); - ep[3] = complex<double> (pt/pp * sqh, 0); - - if(pt != 0) - { - pzpt = p[3]/(pp * pt) * sqh; - ep[1] = complex<double> (-p[1] * pzpt, -nst * p[2]/pt * sqh); - ep[2] = complex<double> (-p[2] * pzpt, nst * p[1]/pt * sqh); - } - else - { - ep[1] = complex<double> (-sqh, 0); - ep[2] = complex<double> (0, nst * Sgn(sqh, p[3])); - } - } - - } - - // construct eps- - if(nhel <= 0) - { - if(pp == 0) - { - em[0] = complex<double> (0, 0); - em[1] = complex<double> (sqh, 0); - em[2] = complex<double> (0, nst * sqh); - em[3] = complex<double> (0, 0); - } - else - { - em[0] = complex<double> (0, 0); - em[3] = complex<double> (-pt/pp * sqh, 0); - - if(pt != 0) - { - pzpt = -p[3]/(pp * pt) * sqh; - em[1] = complex<double> (-p[1] * pzpt, -nst * p[2]/pt * sqh); - em[2] = complex<double> (-p[2] * pzpt, nst * p[1]/pt * sqh); - } - else - { - em[1] = complex<double> (sqh, 0); - em[2] = complex<double> (0, nst * Sgn(sqh, p[3])); - } - } - } - - // construct eps0 - if(std::labs(nhel) <= 1) - { - if(pp == 0) - { - e0[0] = complex<double> (0, 0); - e0[1] = complex<double> (0, 0); - e0[2] = complex<double> (0, 0); - e0[3] = complex<double> (1, 0); - } - else - { - emp = p[0]/(tmass * pp); - e0[0] = complex<double> (pp/tmass, 0); - e0[3] = complex<double> (p[3] * emp, 0); - - if(pt != 0) - { - e0[1] = complex<double> (p[1] * emp, 0); - e0[2] = complex<double> (p[2] * emp, 0); - } - else - { - e0[1] = complex<double> (0, 0); - e0[2] = complex<double> (0, 0); - } - } - } - - if(nhel == 2) - { - for(j = 0; j < 4; j++ ) - { - for(i = 0; i < 4; i++ ) - ft[i][j] = ep[i] * ep[j]; - } - } - else if(nhel == -2) - { - for(j = 0; j < 4; j++ ) - { - for(i = 0; i < 4; i++ ) - ft[i][j] = em[i] * em[j]; - } - } - else if(tmass == 0) - { - for(j = 0; j < 4; j++ ) - { - for(i = 0; i < 4; i++ ) - ft[i][j] = 0; - } - } - else if(tmass != 0) - { - if(nhel == 1) - { - for(j = 0; j < 4; j++ ) - { - for(i = 0; i < 4; i++ ) - ft[i][j] = sqh * (ep[i] * e0[j] + e0[i] * ep[j]); - } - } - else if(nhel == 0) - { - for(j = 0; j < 4; j++ ) - { - for(i = 0; i < 4; i++ ) - ft[i][j] = sqs * (ep[i] * em[j] + em[i] * ep[j] - + 2.0 * e0[i] * e0[j]); - } - } - else if(nhel == -1) - { - for(j = 0; j < 4; j++ ) - { - for(i = 0; i < 4; i++ ) - ft[i][j] = sqh * (em[i] * e0[j] + e0[i] * em[j]); - } - } - else - { - std::cerr << "Invalid helicity in txxxxx.\n"; - std::exit(1); - } - } - - tc[0] = ft[4][0]; - tc[1] = ft[5][0]; - - for(j = 0; j < 4; j++ ) - { - for(i = 0; i < 4; i++ ) - tc[j * 4 + i + 2] = ft[j][i]; - } -} - -void vxxxxx(double p[4], double vmass, int nhel, int nsv, complex<double> vc[6]) -{ - double hel, hel0, pt, pt2, pp, pzpt, emp, sqh; - int nsvahl; - sqh = sqrt(0.5); - hel = double(nhel); - nsvahl = nsv * std::abs(hel); - pt2 = (p[1] * p[1]) + (p[2] * p[2]); - pp = min(p[0], sqrt(pt2 + (p[3] * p[3]))); - pt = min(pp, sqrt(pt2)); - vc[0] = complex<double> (p[0] * nsv, p[3] * nsv); - vc[1] = complex<double> (p[1] * nsv, p[2] * nsv); - if (vmass != 0.0) - { - hel0 = 1.0 - std::abs(hel); - if(pp == 0.0) - { - vc[2] = complex<double> (0.0, 0.0); - vc[3] = complex<double> (-hel * sqh, 0.0); - vc[4] = complex<double> (0.0, nsvahl * sqh); - vc[5] = complex<double> (hel0, 0.0); - } - else - { - emp = p[0]/(vmass * pp); - vc[2] = complex<double> (hel0 * pp/vmass, 0.0); - vc[5] = complex<double> (hel0 * p[3] * emp + hel * pt/pp * sqh, 0.0); - if (pt != 0.0) - { - pzpt = p[3]/(pp * pt) * sqh * hel; - vc[3] = complex<double> (hel0 * p[1] * emp - p[1] * pzpt, -nsvahl * - p[2]/pt * sqh); - vc[4] = complex<double> (hel0 * p[2] * emp - p[2] * pzpt, nsvahl * - p[1]/pt * sqh); - } - else - { - vc[3] = complex<double> (-hel * sqh, 0.0); - vc[4] = complex<double> (0.0, nsvahl * Sgn(sqh, p[3])); - } - } - } - else - { - pp = p[0]; - pt = sqrt((p[1] * p[1]) + (p[2] * p[2])); - vc[2] = complex<double> (0.0, 0.0); - vc[5] = complex<double> (hel * pt/pp * sqh, 0.0); - if (pt != 0.0) - { - pzpt = p[3]/(pp * pt) * sqh * hel; - vc[3] = complex<double> (-p[1] * pzpt, -nsv * p[2]/pt * sqh); - vc[4] = complex<double> (-p[2] * pzpt, nsv * p[1]/pt * sqh); - } - else - { - vc[3] = complex<double> (-hel * sqh, 0.0); - vc[4] = complex<double> (0.0, nsv * Sgn(sqh, p[3])); - } - } - return; -} - -void sxxxxx(double p[4], int nss, complex<double> sc[3]) -{ - sc[2] = complex<double> (1.00, 0.00); - sc[0] = complex<double> (p[0] * nss, p[3] * nss); - sc[1] = complex<double> (p[1] * nss, p[2] * nss); - return; -} - -void oxxxxx(double p[4], double fmass, int nhel, int nsf, complex<double> fo[6]) -{ - complex<double> chi[2]; - double sf[2], sfomeg[2], omega[2], pp, pp3, sqp0p3, sqm[2]; - int nh, ip, im; - fo[0] = complex<double> (p[0] * nsf, p[3] * nsf); - fo[1] = complex<double> (p[1] * nsf, p[2] * nsf); - nh = nhel * nsf; - if (fmass != 0.000) - { - pp = min(p[0], sqrt((p[1] * p[1]) + (p[2] * p[2]) + (p[3] * p[3]))); - if (pp == 0.000) - { - sqm[0] = sqrt(std::abs(fmass)); - sqm[1] = Sgn(sqm[0], fmass); - ip = -((1 - nh)/2) * nhel; - im = (1 + nh)/2 * nhel; - fo[2] = im * sqm[std::abs(ip)]; - fo[3] = ip * nsf * sqm[std::abs(ip)]; - fo[4] = im * nsf * sqm[std::abs(im)]; - fo[5] = ip * sqm[std::abs(im)]; - } - else - { - pp = min(p[0], sqrt((p[1] * p[1]) + (p[2] * p[2]) + (p[3] * p[3]))); - sf[0] = double(1 + nsf + (1 - nsf) * nh) * 0.5; - sf[1] = double(1 + nsf - (1 - nsf) * nh) * 0.5; - omega[0] = sqrt(p[0] + pp); - omega[1] = fmass/omega[0]; - ip = (1 + nh)/2; - im = (1 - nh)/2; - sfomeg[0] = sf[0] * omega[ip]; - sfomeg[1] = sf[1] * omega[im]; - pp3 = max(pp + p[3], 0.00); - chi[0] = complex<double> (sqrt(pp3 * 0.5/pp), 0.00); - if (pp3 == 0.00) - { - chi[1] = complex<double> (-nh, 0.00); - } - else - { - chi[1] = complex<double> (nh * p[1], -p[2])/sqrt(2.0 * pp * pp3); - } - fo[2] = sfomeg[1] * chi[im]; - fo[3] = sfomeg[1] * chi[ip]; - fo[4] = sfomeg[0] * chi[im]; - fo[5] = sfomeg[0] * chi[ip]; - } - } - else - { - if((p[1] == 0.00) and (p[2] == 0.00) and (p[3] < 0.00)) - { - sqp0p3 = 0.00; - } - else - { - sqp0p3 = sqrt(max(p[0] + p[3], 0.00)) * nsf; - } - chi[0] = complex<double> (sqp0p3, 0.00); - if(sqp0p3 == 0.000) - { - chi[1] = complex<double> (-nhel, 0.00) * sqrt(2.0 * p[0]); - } - else - { - chi[1] = complex<double> (nh * p[1], -p[2])/sqp0p3; - } - if(nh == 1) - { - fo[2] = chi[0]; - fo[3] = chi[1]; - fo[4] = complex<double> (0.00, 0.00); - fo[5] = complex<double> (0.00, 0.00); - } - else - { - fo[2] = complex<double> (0.00, 0.00); - fo[3] = complex<double> (0.00, 0.00); - fo[4] = chi[1]; - fo[5] = chi[0]; - } - } - return; -} - -void FFV1P0_3(std::complex<double> F1[], std::complex<double> F2[], - std::complex<double> COUP, double M3, double W3, std::complex<double> V3[]) -{ - static std::complex<double> cI = std::complex<double> (0., 1.); - double P3[4]; - std::complex<double> denom; - V3[0] = +F1[0] + F2[0]; - V3[1] = +F1[1] + F2[1]; - P3[0] = -V3[0].real(); - P3[1] = -V3[1].real(); - P3[2] = -V3[1].imag(); - P3[3] = -V3[0].imag(); - denom = COUP/((P3[0] * P3[0]) - (P3[1] * P3[1]) - (P3[2] * P3[2]) - (P3[3] * - P3[3]) - M3 * (M3 - cI * W3)); - V3[2] = denom * (-cI) * (F1[2] * F2[4] + F1[3] * F2[5] + F1[4] * F2[2] + - F1[5] * F2[3]); - V3[3] = denom * (-cI) * (F1[4] * F2[3] + F1[5] * F2[2] - F1[2] * F2[5] - - F1[3] * F2[4]); - V3[4] = denom * (-cI) * (-cI * (F1[2] * F2[5] + F1[5] * F2[2]) + cI * (F1[3] - * F2[4] + F1[4] * F2[3])); - V3[5] = denom * (-cI) * (F1[3] * F2[5] + F1[4] * F2[2] - F1[2] * F2[4] - - F1[5] * F2[3]); -} - - -void FFV2_2(std::complex<double> F1[], std::complex<double> V3[], - std::complex<double> COUP, double M2, double W2, std::complex<double> F2[]) -{ - static std::complex<double> cI = std::complex<double> (0., 1.); - double P2[4]; - std::complex<double> denom; - F2[0] = +F1[0] + V3[0]; - F2[1] = +F1[1] + V3[1]; - P2[0] = -F2[0].real(); - P2[1] = -F2[1].real(); - P2[2] = -F2[1].imag(); - P2[3] = -F2[0].imag(); - denom = COUP/((P2[0] * P2[0]) - (P2[1] * P2[1]) - (P2[2] * P2[2]) - (P2[3] * - P2[3]) - M2 * (M2 - cI * W2)); - F2[2] = denom * cI * (F1[2] * (P2[0] * (V3[2] + V3[5]) + (P2[1] * (-1.) * - (V3[3] + cI * (V3[4])) + (P2[2] * (+cI * (V3[3]) - V3[4]) - P2[3] * - (V3[2] + V3[5])))) + F1[3] * (P2[0] * (V3[3] - cI * (V3[4])) + (P2[1] * - (V3[5] - V3[2]) + (P2[2] * (-cI * (V3[5]) + cI * (V3[2])) + P2[3] * (+cI - * (V3[4]) - V3[3]))))); - F2[3] = denom * cI * (F1[2] * (P2[0] * (V3[3] + cI * (V3[4])) + (P2[1] * - (-1.) * (V3[2] + V3[5]) + (P2[2] * (-1.) * (+cI * (V3[2] + V3[5])) + - P2[3] * (V3[3] + cI * (V3[4]))))) + F1[3] * (P2[0] * (V3[2] - V3[5]) + - (P2[1] * (+cI * (V3[4]) - V3[3]) + (P2[2] * (-1.) * (V3[4] + cI * - (V3[3])) + P2[3] * (V3[2] - V3[5]))))); - F2[4] = denom * - cI * M2 * (F1[2] * (-1.) * (V3[2] + V3[5]) + F1[3] * (+cI * - (V3[4]) - V3[3])); - F2[5] = denom * cI * M2 * (F1[2] * (V3[3] + cI * (V3[4])) + F1[3] * (V3[2] - - V3[5])); -} - -void FFV2_5_2(std::complex<double> F1[], std::complex<double> V3[], - std::complex<double> COUP1, std::complex<double> COUP2, double M2, double - W2, std::complex<double> F2[]) -{ - std::complex<double> Ftmp[6]; - int i; - FFV2_2(F1, V3, COUP1, M2, W2, F2); - FFV5_2(F1, V3, COUP2, M2, W2, Ftmp); - i = 2; - while (i < 6) - { - F2[i] = F2[i] + Ftmp[i]; - i++; - } -} - -void FFV1_2(std::complex<double> F1[], std::complex<double> V3[], - std::complex<double> COUP, double M2, double W2, std::complex<double> F2[]) -{ - static std::complex<double> cI = std::complex<double> (0., 1.); - double P2[4]; - std::complex<double> denom; - F2[0] = +F1[0] + V3[0]; - F2[1] = +F1[1] + V3[1]; - P2[0] = -F2[0].real(); - P2[1] = -F2[1].real(); - P2[2] = -F2[1].imag(); - P2[3] = -F2[0].imag(); - denom = COUP/((P2[0] * P2[0]) - (P2[1] * P2[1]) - (P2[2] * P2[2]) - (P2[3] * - P2[3]) - M2 * (M2 - cI * W2)); - F2[2] = denom * cI * (F1[2] * (P2[0] * (V3[2] + V3[5]) + (P2[1] * (-1.) * - (V3[3] + cI * (V3[4])) + (P2[2] * (+cI * (V3[3]) - V3[4]) - P2[3] * - (V3[2] + V3[5])))) + (F1[3] * (P2[0] * (V3[3] - cI * (V3[4])) + (P2[1] * - (V3[5] - V3[2]) + (P2[2] * (-cI * (V3[5]) + cI * (V3[2])) + P2[3] * (+cI - * (V3[4]) - V3[3])))) + M2 * (F1[4] * (V3[2] - V3[5]) + F1[5] * (+cI * - (V3[4]) - V3[3])))); - F2[3] = denom * (-cI) * (F1[2] * (P2[0] * (-1.) * (V3[3] + cI * (V3[4])) + - (P2[1] * (V3[2] + V3[5]) + (P2[2] * (+cI * (V3[2] + V3[5])) - P2[3] * - (V3[3] + cI * (V3[4]))))) + (F1[3] * (P2[0] * (V3[5] - V3[2]) + (P2[1] * - (V3[3] - cI * (V3[4])) + (P2[2] * (V3[4] + cI * (V3[3])) + P2[3] * (V3[5] - - V3[2])))) + M2 * (F1[4] * (V3[3] + cI * (V3[4])) - F1[5] * (V3[2] + - V3[5])))); - F2[4] = denom * (-cI) * (F1[4] * (P2[0] * (V3[5] - V3[2]) + (P2[1] * (V3[3] + - cI * (V3[4])) + (P2[2] * (V3[4] - cI * (V3[3])) + P2[3] * (V3[5] - - V3[2])))) + (F1[5] * (P2[0] * (V3[3] - cI * (V3[4])) + (P2[1] * (-1.) * - (V3[2] + V3[5]) + (P2[2] * (+cI * (V3[2] + V3[5])) + P2[3] * (V3[3] - cI - * (V3[4]))))) + M2 * (F1[2] * (-1.) * (V3[2] + V3[5]) + F1[3] * (+cI * - (V3[4]) - V3[3])))); - F2[5] = denom * cI * (F1[4] * (P2[0] * (-1.) * (V3[3] + cI * (V3[4])) + - (P2[1] * (V3[2] - V3[5]) + (P2[2] * (-cI * (V3[5]) + cI * (V3[2])) + - P2[3] * (V3[3] + cI * (V3[4]))))) + (F1[5] * (P2[0] * (V3[2] + V3[5]) + - (P2[1] * (+cI * (V3[4]) - V3[3]) + (P2[2] * (-1.) * (V3[4] + cI * - (V3[3])) - P2[3] * (V3[2] + V3[5])))) + M2 * (F1[2] * (V3[3] + cI * - (V3[4])) + F1[3] * (V3[2] - V3[5])))); -} - - -void FFV2_0(std::complex<double> F1[], std::complex<double> F2[], - std::complex<double> V3[], std::complex<double> COUP, std::complex<double> - & vertex) -{ - static std::complex<double> cI = std::complex<double> (0., 1.); - std::complex<double> TMP9; - TMP9 = (F1[2] * (F2[4] * (V3[2] + V3[5]) + F2[5] * (V3[3] + cI * (V3[4]))) + - F1[3] * (F2[4] * (V3[3] - cI * (V3[4])) + F2[5] * (V3[2] - V3[5]))); - vertex = COUP * - cI * TMP9; -} - -void FFV2_5_0(std::complex<double> F1[], std::complex<double> F2[], - std::complex<double> V3[], std::complex<double> COUP1, std::complex<double> - COUP2, std::complex<double> & vertex) -{ - std::complex<double> tmp; - FFV2_0(F1, F2, V3, COUP1, vertex); - FFV5_0(F1, F2, V3, COUP2, tmp); - vertex = vertex + tmp; -} - -void FFV5_1(std::complex<double> F2[], std::complex<double> V3[], - std::complex<double> COUP, double M1, double W1, std::complex<double> F1[]) -{ - static std::complex<double> cI = std::complex<double> (0., 1.); - double P1[4]; - std::complex<double> denom; - F1[0] = +F2[0] + V3[0]; - F1[1] = +F2[1] + V3[1]; - P1[0] = -F1[0].real(); - P1[1] = -F1[1].real(); - P1[2] = -F1[1].imag(); - P1[3] = -F1[0].imag(); - denom = COUP/((P1[0] * P1[0]) - (P1[1] * P1[1]) - (P1[2] * P1[2]) - (P1[3] * - P1[3]) - M1 * (M1 - cI * W1)); - F1[2] = denom * 4. * cI * (F2[2] * (P1[0] * (V3[5] - V3[2]) + (P1[1] * (V3[3] - - cI * (V3[4])) + (P1[2] * (V3[4] + cI * (V3[3])) + P1[3] * (V3[5] - - V3[2])))) + (+1./4. * (M1 * (F2[5] * (V3[3] + cI * (V3[4])) + 4. * (F2[4] - * 1./4. * (V3[2] + V3[5])))) + F2[3] * (P1[0] * (V3[3] + cI * (V3[4])) + - (P1[1] * (-1.) * (V3[2] + V3[5]) + (P1[2] * (-1.) * (+cI * (V3[2] + - V3[5])) + P1[3] * (V3[3] + cI * (V3[4]))))))); - F1[3] = denom * 4. * cI * (F2[2] * (P1[0] * (V3[3] - cI * (V3[4])) + (P1[1] * - (V3[5] - V3[2]) + (P1[2] * (-cI * (V3[5]) + cI * (V3[2])) + P1[3] * (+cI - * (V3[4]) - V3[3])))) + (+1./4. * (M1 * (F2[5] * (V3[2] - V3[5]) + 4. * - (F2[4] * 1./4. * (V3[3] - cI * (V3[4]))))) + F2[3] * (P1[0] * (-1.) * - (V3[2] + V3[5]) + (P1[1] * (V3[3] + cI * (V3[4])) + (P1[2] * (V3[4] - cI - * (V3[3])) + P1[3] * (V3[2] + V3[5])))))); - F1[4] = denom * (-cI) * (F2[4] * (P1[0] * (V3[2] + V3[5]) + (P1[1] * (+cI * - (V3[4]) - V3[3]) + (P1[2] * (-1.) * (V3[4] + cI * (V3[3])) - P1[3] * - (V3[2] + V3[5])))) + (F2[5] * (P1[0] * (V3[3] + cI * (V3[4])) + (P1[1] * - (V3[5] - V3[2]) + (P1[2] * (-cI * (V3[2]) + cI * (V3[5])) - P1[3] * - (V3[3] + cI * (V3[4]))))) + M1 * (F2[2] * 4. * (V3[5] - V3[2]) + 4. * - (F2[3] * (V3[3] + cI * (V3[4])))))); - F1[5] = denom * cI * (F2[4] * (P1[0] * (+cI * (V3[4]) - V3[3]) + (P1[1] * - (V3[2] + V3[5]) + (P1[2] * (-1.) * (+cI * (V3[2] + V3[5])) + P1[3] * (+cI - * (V3[4]) - V3[3])))) + (F2[5] * (P1[0] * (V3[5] - V3[2]) + (P1[1] * - (V3[3] + cI * (V3[4])) + (P1[2] * (V3[4] - cI * (V3[3])) + P1[3] * (V3[5] - - V3[2])))) + M1 * (F2[2] * 4. * (+cI * (V3[4]) - V3[3]) + 4. * (F2[3] * - (V3[2] + V3[5]))))); -} - - -void FFV1_0(std::complex<double> F1[], std::complex<double> F2[], - std::complex<double> V3[], std::complex<double> COUP, std::complex<double> - & vertex) -{ - static std::complex<double> cI = std::complex<double> (0., 1.); - std::complex<double> TMP13; - TMP13 = (F1[2] * (F2[4] * (V3[2] + V3[5]) + F2[5] * (V3[3] + cI * (V3[4]))) + - (F1[3] * (F2[4] * (V3[3] - cI * (V3[4])) + F2[5] * (V3[2] - V3[5])) + - (F1[4] * (F2[2] * (V3[2] - V3[5]) - F2[3] * (V3[3] + cI * (V3[4]))) + - F1[5] * (F2[2] * (+cI * (V3[4]) - V3[3]) + F2[3] * (V3[2] + V3[5]))))); - vertex = COUP * - cI * TMP13; -} - - -void VVVV4P0_1(std::complex<double> V2[], std::complex<double> V3[], - std::complex<double> V4[], std::complex<double> COUP, double M1, double W1, - std::complex<double> V1[]) -{ - static std::complex<double> cI = std::complex<double> (0., 1.); - std::complex<double> TMP12; - std::complex<double> TMP11; - double P1[4]; - std::complex<double> denom; - V1[0] = +V2[0] + V3[0] + V4[0]; - V1[1] = +V2[1] + V3[1] + V4[1]; - P1[0] = -V1[0].real(); - P1[1] = -V1[1].real(); - P1[2] = -V1[1].imag(); - P1[3] = -V1[0].imag(); - TMP11 = (V2[2] * V4[2] - V2[3] * V4[3] - V2[4] * V4[4] - V2[5] * V4[5]); - TMP12 = (V3[2] * V4[2] - V3[3] * V4[3] - V3[4] * V4[4] - V3[5] * V4[5]); - denom = COUP/((P1[0] * P1[0]) - (P1[1] * P1[1]) - (P1[2] * P1[2]) - (P1[3] * - P1[3]) - M1 * (M1 - cI * W1)); - V1[2] = denom * (-cI * (V3[2] * TMP11) + cI * (V2[2] * TMP12)); - V1[3] = denom * (-cI * (V3[3] * TMP11) + cI * (V2[3] * TMP12)); - V1[4] = denom * (-cI * (V3[4] * TMP11) + cI * (V2[4] * TMP12)); - V1[5] = denom * (-cI * (V3[5] * TMP11) + cI * (V2[5] * TMP12)); -} - - -void VVVV3P0_1(std::complex<double> V2[], std::complex<double> V3[], - std::complex<double> V4[], std::complex<double> COUP, double M1, double W1, - std::complex<double> V1[]) -{ - static std::complex<double> cI = std::complex<double> (0., 1.); - std::complex<double> TMP12; - double P1[4]; - std::complex<double> TMP6; - std::complex<double> denom; - V1[0] = +V2[0] + V3[0] + V4[0]; - V1[1] = +V2[1] + V3[1] + V4[1]; - P1[0] = -V1[0].real(); - P1[1] = -V1[1].real(); - P1[2] = -V1[1].imag(); - P1[3] = -V1[0].imag(); - TMP6 = (V3[2] * V2[2] - V3[3] * V2[3] - V3[4] * V2[4] - V3[5] * V2[5]); - TMP12 = (V3[2] * V4[2] - V3[3] * V4[3] - V3[4] * V4[4] - V3[5] * V4[5]); - denom = COUP/((P1[0] * P1[0]) - (P1[1] * P1[1]) - (P1[2] * P1[2]) - (P1[3] * - P1[3]) - M1 * (M1 - cI * W1)); - V1[2] = denom * (-cI * (TMP6 * V4[2]) + cI * (V2[2] * TMP12)); - V1[3] = denom * (-cI * (TMP6 * V4[3]) + cI * (V2[3] * TMP12)); - V1[4] = denom * (-cI * (TMP6 * V4[4]) + cI * (V2[4] * TMP12)); - V1[5] = denom * (-cI * (TMP6 * V4[5]) + cI * (V2[5] * TMP12)); -} - - -void VVV1_0(std::complex<double> V1[], std::complex<double> V2[], - std::complex<double> V3[], std::complex<double> COUP, std::complex<double> - & vertex) -{ - static std::complex<double> cI = std::complex<double> (0., 1.); - std::complex<double> TMP2; - std::complex<double> TMP1; - double P1[4]; - std::complex<double> TMP0; - double P2[4]; - std::complex<double> TMP7; - double P3[4]; - std::complex<double> TMP6; - std::complex<double> TMP5; - std::complex<double> TMP4; - std::complex<double> TMP3; - std::complex<double> TMP8; - P1[0] = V1[0].real(); - P1[1] = V1[1].real(); - P1[2] = V1[1].imag(); - P1[3] = V1[0].imag(); - P2[0] = V2[0].real(); - P2[1] = V2[1].real(); - P2[2] = V2[1].imag(); - P2[3] = V2[0].imag(); - P3[0] = V3[0].real(); - P3[1] = V3[1].real(); - P3[2] = V3[1].imag(); - P3[3] = V3[0].imag(); - TMP8 = (V1[2] * P3[0] - V1[3] * P3[1] - V1[4] * P3[2] - V1[5] * P3[3]); - TMP5 = (V2[2] * P3[0] - V2[3] * P3[1] - V2[4] * P3[2] - V2[5] * P3[3]); - TMP4 = (P1[0] * V2[2] - P1[1] * V2[3] - P1[2] * V2[4] - P1[3] * V2[5]); - TMP7 = (V1[2] * P2[0] - V1[3] * P2[1] - V1[4] * P2[2] - V1[5] * P2[3]); - TMP6 = (V3[2] * V2[2] - V3[3] * V2[3] - V3[4] * V2[4] - V3[5] * V2[5]); - TMP1 = (V2[2] * V1[2] - V2[3] * V1[3] - V2[4] * V1[4] - V2[5] * V1[5]); - TMP0 = (V3[2] * P1[0] - V3[3] * P1[1] - V3[4] * P1[2] - V3[5] * P1[3]); - TMP3 = (V3[2] * V1[2] - V3[3] * V1[3] - V3[4] * V1[4] - V3[5] * V1[5]); - TMP2 = (V3[2] * P2[0] - V3[3] * P2[1] - V3[4] * P2[2] - V3[5] * P2[3]); - vertex = COUP * (TMP1 * (-cI * (TMP0) + cI * (TMP2)) + (TMP3 * (-cI * (TMP5) - + cI * (TMP4)) + TMP6 * (-cI * (TMP7) + cI * (TMP8)))); -} - - -void FFV2_3(std::complex<double> F1[], std::complex<double> F2[], - std::complex<double> COUP, double M3, double W3, std::complex<double> V3[]) -{ - static std::complex<double> cI = std::complex<double> (0., 1.); - std::complex<double> denom; - std::complex<double> TMP10; - double P3[4]; - double OM3; - OM3 = 0.; - if (M3 != 0.) - OM3 = 1./(M3 * M3); - V3[0] = +F1[0] + F2[0]; - V3[1] = +F1[1] + F2[1]; - P3[0] = -V3[0].real(); - P3[1] = -V3[1].real(); - P3[2] = -V3[1].imag(); - P3[3] = -V3[0].imag(); - TMP10 = (F1[2] * (F2[4] * (P3[0] + P3[3]) + F2[5] * (P3[1] + cI * (P3[2]))) + - F1[3] * (F2[4] * (P3[1] - cI * (P3[2])) + F2[5] * (P3[0] - P3[3]))); - denom = COUP/((P3[0] * P3[0]) - (P3[1] * P3[1]) - (P3[2] * P3[2]) - (P3[3] * - P3[3]) - M3 * (M3 - cI * W3)); - V3[2] = denom * (-cI) * (F1[2] * F2[4] + F1[3] * F2[5] - P3[0] * OM3 * - TMP10); - V3[3] = denom * (-cI) * (-F1[2] * F2[5] - F1[3] * F2[4] - P3[1] * OM3 * - TMP10); - V3[4] = denom * (-cI) * (-cI * (F1[2] * F2[5]) + cI * (F1[3] * F2[4]) - P3[2] - * OM3 * TMP10); - V3[5] = denom * (-cI) * (F1[3] * F2[5] - F1[2] * F2[4] - P3[3] * OM3 * - TMP10); -} - -void FFV2_4_3(std::complex<double> F1[], std::complex<double> F2[], - std::complex<double> COUP1, std::complex<double> COUP2, double M3, double - W3, std::complex<double> V3[]) -{ - int i; - std::complex<double> Vtmp[6]; - FFV2_3(F1, F2, COUP1, M3, W3, V3); - FFV4_3(F1, F2, COUP2, M3, W3, Vtmp); - i = 2; - while (i < 6) - { - V3[i] = V3[i] + Vtmp[i]; - i++; - } -} - -void FFV5_2(std::complex<double> F1[], std::complex<double> V3[], - std::complex<double> COUP, double M2, double W2, std::complex<double> F2[]) -{ - static std::complex<double> cI = std::complex<double> (0., 1.); - double P2[4]; - std::complex<double> denom; - F2[0] = +F1[0] + V3[0]; - F2[1] = +F1[1] + V3[1]; - P2[0] = -F2[0].real(); - P2[1] = -F2[1].real(); - P2[2] = -F2[1].imag(); - P2[3] = -F2[0].imag(); - denom = COUP/((P2[0] * P2[0]) - (P2[1] * P2[1]) - (P2[2] * P2[2]) - (P2[3] * - P2[3]) - M2 * (M2 - cI * W2)); - F2[2] = denom * cI * (F1[2] * (P2[0] * (V3[2] + V3[5]) + (P2[1] * (-1.) * - (V3[3] + cI * (V3[4])) + (P2[2] * (+cI * (V3[3]) - V3[4]) - P2[3] * - (V3[2] + V3[5])))) + (F1[3] * (P2[0] * (V3[3] - cI * (V3[4])) + (P2[1] * - (V3[5] - V3[2]) + (P2[2] * (-cI * (V3[5]) + cI * (V3[2])) + P2[3] * (+cI - * (V3[4]) - V3[3])))) + M2 * (F1[4] * 4. * (V3[2] - V3[5]) + 4. * (F1[5] - * (+cI * (V3[4]) - V3[3]))))); - F2[3] = denom * cI * (F1[2] * (P2[0] * (V3[3] + cI * (V3[4])) + (P2[1] * - (-1.) * (V3[2] + V3[5]) + (P2[2] * (-1.) * (+cI * (V3[2] + V3[5])) + - P2[3] * (V3[3] + cI * (V3[4]))))) + (F1[3] * (P2[0] * (V3[2] - V3[5]) + - (P2[1] * (+cI * (V3[4]) - V3[3]) + (P2[2] * (-1.) * (V3[4] + cI * - (V3[3])) + P2[3] * (V3[2] - V3[5])))) + M2 * (F1[4] * (-4.) * (V3[3] + cI - * (V3[4])) + 4. * (F1[5] * (V3[2] + V3[5]))))); - F2[4] = denom * (-4. * cI) * (F1[4] * (P2[0] * (V3[5] - V3[2]) + (P2[1] * - (V3[3] + cI * (V3[4])) + (P2[2] * (V3[4] - cI * (V3[3])) + P2[3] * (V3[5] - - V3[2])))) + (+1./4. * (M2 * (F1[3] * (+cI * (V3[4]) - V3[3]) + 4. * - (F1[2] * (-1./4.) * (V3[2] + V3[5])))) + F1[5] * (P2[0] * (V3[3] - cI * - (V3[4])) + (P2[1] * (-1.) * (V3[2] + V3[5]) + (P2[2] * (+cI * (V3[2] + - V3[5])) + P2[3] * (V3[3] - cI * (V3[4]))))))); - F2[5] = denom * (-4. * cI) * (F1[4] * (P2[0] * (V3[3] + cI * (V3[4])) + - (P2[1] * (V3[5] - V3[2]) + (P2[2] * (-cI * (V3[2]) + cI * (V3[5])) - - P2[3] * (V3[3] + cI * (V3[4]))))) + (+1./4. * (M2 * (F1[3] * (V3[5] - - V3[2]) + 4. * (F1[2] * (-1./4.) * (V3[3] + cI * (V3[4]))))) + F1[5] * - (P2[0] * (-1.) * (V3[2] + V3[5]) + (P2[1] * (V3[3] - cI * (V3[4])) + - (P2[2] * (V3[4] + cI * (V3[3])) + P2[3] * (V3[2] + V3[5])))))); -} - - -void FFV2_1(std::complex<double> F2[], std::complex<double> V3[], - std::complex<double> COUP, double M1, double W1, std::complex<double> F1[]) -{ - static std::complex<double> cI = std::complex<double> (0., 1.); - double P1[4]; - std::complex<double> denom; - F1[0] = +F2[0] + V3[0]; - F1[1] = +F2[1] + V3[1]; - P1[0] = -F1[0].real(); - P1[1] = -F1[1].real(); - P1[2] = -F1[1].imag(); - P1[3] = -F1[0].imag(); - denom = COUP/((P1[0] * P1[0]) - (P1[1] * P1[1]) - (P1[2] * P1[2]) - (P1[3] * - P1[3]) - M1 * (M1 - cI * W1)); - F1[2] = denom * cI * M1 * (F2[4] * (V3[2] + V3[5]) + F2[5] * (V3[3] + cI * - (V3[4]))); - F1[3] = denom * - cI * M1 * (F2[4] * (+cI * (V3[4]) - V3[3]) + F2[5] * (V3[5] - - V3[2])); - F1[4] = denom * (-cI) * (F2[4] * (P1[0] * (V3[2] + V3[5]) + (P1[1] * (+cI * - (V3[4]) - V3[3]) + (P1[2] * (-1.) * (V3[4] + cI * (V3[3])) - P1[3] * - (V3[2] + V3[5])))) + F2[5] * (P1[0] * (V3[3] + cI * (V3[4])) + (P1[1] * - (V3[5] - V3[2]) + (P1[2] * (-cI * (V3[2]) + cI * (V3[5])) - P1[3] * - (V3[3] + cI * (V3[4])))))); - F1[5] = denom * (-cI) * (F2[4] * (P1[0] * (V3[3] - cI * (V3[4])) + (P1[1] * - (-1.) * (V3[2] + V3[5]) + (P1[2] * (+cI * (V3[2] + V3[5])) + P1[3] * - (V3[3] - cI * (V3[4]))))) + F2[5] * (P1[0] * (V3[2] - V3[5]) + (P1[1] * - (-1.) * (V3[3] + cI * (V3[4])) + (P1[2] * (+cI * (V3[3]) - V3[4]) + P1[3] - * (V3[2] - V3[5]))))); -} - -void FFV2_5_1(std::complex<double> F2[], std::complex<double> V3[], - std::complex<double> COUP1, std::complex<double> COUP2, double M1, double - W1, std::complex<double> F1[]) -{ - int i; - std::complex<double> Ftmp[6]; - FFV2_1(F2, V3, COUP1, M1, W1, F1); - FFV5_1(F2, V3, COUP2, M1, W1, Ftmp); - i = 2; - while (i < 6) - { - F1[i] = F1[i] + Ftmp[i]; - i++; - } -} - -void FFV5_0(std::complex<double> F1[], std::complex<double> F2[], - std::complex<double> V3[], std::complex<double> COUP, std::complex<double> - & vertex) -{ - static std::complex<double> cI = std::complex<double> (0., 1.); - std::complex<double> TMP15; - std::complex<double> TMP16; - TMP15 = (F1[2] * (F2[4] * (V3[2] + V3[5]) + F2[5] * (V3[3] + cI * (V3[4]))) + - F1[3] * (F2[4] * (V3[3] - cI * (V3[4])) + F2[5] * (V3[2] - V3[5]))); - TMP16 = (F1[4] * (F2[2] * (V3[2] - V3[5]) - F2[3] * (V3[3] + cI * (V3[4]))) + - F1[5] * (F2[2] * (+cI * (V3[4]) - V3[3]) + F2[3] * (V3[2] + V3[5]))); - vertex = COUP * (-1.) * (+cI * (TMP15) + 4. * cI * (TMP16)); -} - - -void FFV1_1(std::complex<double> F2[], std::complex<double> V3[], - std::complex<double> COUP, double M1, double W1, std::complex<double> F1[]) -{ - static std::complex<double> cI = std::complex<double> (0., 1.); - double P1[4]; - std::complex<double> denom; - F1[0] = +F2[0] + V3[0]; - F1[1] = +F2[1] + V3[1]; - P1[0] = -F1[0].real(); - P1[1] = -F1[1].real(); - P1[2] = -F1[1].imag(); - P1[3] = -F1[0].imag(); - denom = COUP/((P1[0] * P1[0]) - (P1[1] * P1[1]) - (P1[2] * P1[2]) - (P1[3] * - P1[3]) - M1 * (M1 - cI * W1)); - F1[2] = denom * cI * (F2[2] * (P1[0] * (V3[5] - V3[2]) + (P1[1] * (V3[3] - cI - * (V3[4])) + (P1[2] * (V3[4] + cI * (V3[3])) + P1[3] * (V3[5] - V3[2])))) - + (F2[3] * (P1[0] * (V3[3] + cI * (V3[4])) + (P1[1] * (-1.) * (V3[2] + - V3[5]) + (P1[2] * (-1.) * (+cI * (V3[2] + V3[5])) + P1[3] * (V3[3] + cI * - (V3[4]))))) + M1 * (F2[4] * (V3[2] + V3[5]) + F2[5] * (V3[3] + cI * - (V3[4]))))); - F1[3] = denom * (-cI) * (F2[2] * (P1[0] * (+cI * (V3[4]) - V3[3]) + (P1[1] * - (V3[2] - V3[5]) + (P1[2] * (-cI * (V3[2]) + cI * (V3[5])) + P1[3] * - (V3[3] - cI * (V3[4]))))) + (F2[3] * (P1[0] * (V3[2] + V3[5]) + (P1[1] * - (-1.) * (V3[3] + cI * (V3[4])) + (P1[2] * (+cI * (V3[3]) - V3[4]) - P1[3] - * (V3[2] + V3[5])))) + M1 * (F2[4] * (+cI * (V3[4]) - V3[3]) + F2[5] * - (V3[5] - V3[2])))); - F1[4] = denom * (-cI) * (F2[4] * (P1[0] * (V3[2] + V3[5]) + (P1[1] * (+cI * - (V3[4]) - V3[3]) + (P1[2] * (-1.) * (V3[4] + cI * (V3[3])) - P1[3] * - (V3[2] + V3[5])))) + (F2[5] * (P1[0] * (V3[3] + cI * (V3[4])) + (P1[1] * - (V3[5] - V3[2]) + (P1[2] * (-cI * (V3[2]) + cI * (V3[5])) - P1[3] * - (V3[3] + cI * (V3[4]))))) + M1 * (F2[2] * (V3[5] - V3[2]) + F2[3] * - (V3[3] + cI * (V3[4]))))); - F1[5] = denom * cI * (F2[4] * (P1[0] * (+cI * (V3[4]) - V3[3]) + (P1[1] * - (V3[2] + V3[5]) + (P1[2] * (-1.) * (+cI * (V3[2] + V3[5])) + P1[3] * (+cI - * (V3[4]) - V3[3])))) + (F2[5] * (P1[0] * (V3[5] - V3[2]) + (P1[1] * - (V3[3] + cI * (V3[4])) + (P1[2] * (V3[4] - cI * (V3[3])) + P1[3] * (V3[5] - - V3[2])))) + M1 * (F2[2] * (+cI * (V3[4]) - V3[3]) + F2[3] * (V3[2] + - V3[5])))); -} - - -void FFV4_3(std::complex<double> F1[], std::complex<double> F2[], - std::complex<double> COUP, double M3, double W3, std::complex<double> V3[]) -{ - static std::complex<double> cI = std::complex<double> (0., 1.); - std::complex<double> denom; - std::complex<double> TMP10; - double P3[4]; - double OM3; - std::complex<double> TMP14; - OM3 = 0.; - if (M3 != 0.) - OM3 = 1./(M3 * M3); - V3[0] = +F1[0] + F2[0]; - V3[1] = +F1[1] + F2[1]; - P3[0] = -V3[0].real(); - P3[1] = -V3[1].real(); - P3[2] = -V3[1].imag(); - P3[3] = -V3[0].imag(); - TMP14 = (F1[4] * (F2[2] * (P3[0] - P3[3]) - F2[3] * (P3[1] + cI * (P3[2]))) + - F1[5] * (F2[2] * (+cI * (P3[2]) - P3[1]) + F2[3] * (P3[0] + P3[3]))); - TMP10 = (F1[2] * (F2[4] * (P3[0] + P3[3]) + F2[5] * (P3[1] + cI * (P3[2]))) + - F1[3] * (F2[4] * (P3[1] - cI * (P3[2])) + F2[5] * (P3[0] - P3[3]))); - denom = COUP/((P3[0] * P3[0]) - (P3[1] * P3[1]) - (P3[2] * P3[2]) - (P3[3] * - P3[3]) - M3 * (M3 - cI * W3)); - V3[2] = denom * (-2. * cI) * (OM3 * - 1./2. * P3[0] * (TMP10 + 2. * (TMP14)) - + (+1./2. * (F1[2] * F2[4] + F1[3] * F2[5]) + F1[4] * F2[2] + F1[5] * - F2[3])); - V3[3] = denom * (-2. * cI) * (OM3 * - 1./2. * P3[1] * (TMP10 + 2. * (TMP14)) - + (-1./2. * (F1[2] * F2[5] + F1[3] * F2[4]) + F1[4] * F2[3] + F1[5] * - F2[2])); - V3[4] = denom * 2. * cI * (OM3 * 1./2. * P3[2] * (TMP10 + 2. * (TMP14)) + - (+1./2. * cI * (F1[2] * F2[5]) - 1./2. * cI * (F1[3] * F2[4]) - cI * - (F1[4] * F2[3]) + cI * (F1[5] * F2[2]))); - V3[5] = denom * 2. * cI * (OM3 * 1./2. * P3[3] * (TMP10 + 2. * (TMP14)) + - (+1./2. * (F1[2] * F2[4]) - 1./2. * (F1[3] * F2[5]) - F1[4] * F2[2] + - F1[5] * F2[3])); -} - - -void VVVV1P0_1(std::complex<double> V2[], std::complex<double> V3[], - std::complex<double> V4[], std::complex<double> COUP, double M1, double W1, - std::complex<double> V1[]) -{ - static std::complex<double> cI = std::complex<double> (0., 1.); - std::complex<double> TMP11; - double P1[4]; - std::complex<double> TMP6; - std::complex<double> denom; - V1[0] = +V2[0] + V3[0] + V4[0]; - V1[1] = +V2[1] + V3[1] + V4[1]; - P1[0] = -V1[0].real(); - P1[1] = -V1[1].real(); - P1[2] = -V1[1].imag(); - P1[3] = -V1[0].imag(); - TMP6 = (V3[2] * V2[2] - V3[3] * V2[3] - V3[4] * V2[4] - V3[5] * V2[5]); - TMP11 = (V2[2] * V4[2] - V2[3] * V4[3] - V2[4] * V4[4] - V2[5] * V4[5]); - denom = COUP/((P1[0] * P1[0]) - (P1[1] * P1[1]) - (P1[2] * P1[2]) - (P1[3] * - P1[3]) - M1 * (M1 - cI * W1)); - V1[2] = denom * (-cI * (TMP6 * V4[2]) + cI * (V3[2] * TMP11)); - V1[3] = denom * (-cI * (TMP6 * V4[3]) + cI * (V3[3] * TMP11)); - V1[4] = denom * (-cI * (TMP6 * V4[4]) + cI * (V3[4] * TMP11)); - V1[5] = denom * (-cI * (TMP6 * V4[5]) + cI * (V3[5] * TMP11)); -} - - -void VVV1P0_1(std::complex<double> V2[], std::complex<double> V3[], - std::complex<double> COUP, double M1, double W1, std::complex<double> V1[]) -{ - static std::complex<double> cI = std::complex<double> (0., 1.); - std::complex<double> TMP2; - double P1[4]; - std::complex<double> TMP0; - double P2[4]; - double P3[4]; - std::complex<double> TMP6; - std::complex<double> TMP5; - std::complex<double> TMP4; - std::complex<double> denom; - P2[0] = V2[0].real(); - P2[1] = V2[1].real(); - P2[2] = V2[1].imag(); - P2[3] = V2[0].imag(); - P3[0] = V3[0].real(); - P3[1] = V3[1].real(); - P3[2] = V3[1].imag(); - P3[3] = V3[0].imag(); - V1[0] = +V2[0] + V3[0]; - V1[1] = +V2[1] + V3[1]; - P1[0] = -V1[0].real(); - P1[1] = -V1[1].real(); - P1[2] = -V1[1].imag(); - P1[3] = -V1[0].imag(); - TMP5 = (V2[2] * P3[0] - V2[3] * P3[1] - V2[4] * P3[2] - V2[5] * P3[3]); - TMP4 = (P1[0] * V2[2] - P1[1] * V2[3] - P1[2] * V2[4] - P1[3] * V2[5]); - TMP6 = (V3[2] * V2[2] - V3[3] * V2[3] - V3[4] * V2[4] - V3[5] * V2[5]); - TMP0 = (V3[2] * P1[0] - V3[3] * P1[1] - V3[4] * P1[2] - V3[5] * P1[3]); - TMP2 = (V3[2] * P2[0] - V3[3] * P2[1] - V3[4] * P2[2] - V3[5] * P2[3]); - denom = COUP/((P1[0] * P1[0]) - (P1[1] * P1[1]) - (P1[2] * P1[2]) - (P1[3] * - P1[3]) - M1 * (M1 - cI * W1)); - V1[2] = denom * (TMP6 * (-cI * (P2[0]) + cI * (P3[0])) + (V2[2] * (-cI * - (TMP0) + cI * (TMP2)) + V3[2] * (-cI * (TMP5) + cI * (TMP4)))); - V1[3] = denom * (TMP6 * (-cI * (P2[1]) + cI * (P3[1])) + (V2[3] * (-cI * - (TMP0) + cI * (TMP2)) + V3[3] * (-cI * (TMP5) + cI * (TMP4)))); - V1[4] = denom * (TMP6 * (-cI * (P2[2]) + cI * (P3[2])) + (V2[4] * (-cI * - (TMP0) + cI * (TMP2)) + V3[4] * (-cI * (TMP5) + cI * (TMP4)))); - V1[5] = denom * (TMP6 * (-cI * (P2[3]) + cI * (P3[3])) + (V2[5] * (-cI * - (TMP0) + cI * (TMP2)) + V3[5] * (-cI * (TMP5) + cI * (TMP4)))); -} - - -} // end namespace MG5_sm_COLOREA - diff --git a/Shower/Dipole/Colorea/HelAmps_sm.h b/Shower/Dipole/Colorea/HelAmps_sm.h deleted file mode 100644 --- a/Shower/Dipole/Colorea/HelAmps_sm.h +++ /dev/null @@ -1,106 +0,0 @@ -//========================================================================== -// This file has been automatically generated for C++ Standalone -// MadGraph5_aMC@NLO v. 2.5.4, 2017-03-28 -// By the MadGraph5_aMC@NLO Development Team -// Visit launchpad.net/madgraph5 and amcatnlo.web.cern.ch -//========================================================================== - -#ifndef HelAmps_sm_H -#define HelAmps_sm_H - -#include <cmath> -#include <complex> - -using namespace std; - -namespace MG5_sm_COLOREA -{ -double Sgn(double e, double f); - -void oxxxxx(double p[4], double fmass, int nhel, int nsf, std::complex<double> - fo[6]); - -void sxxxxx(double p[4], int nss, std::complex<double> sc[3]); - -void ixxxxx(double p[4], double fmass, int nhel, int nsf, std::complex<double> - fi[6]); - -void txxxxx(double p[4], double tmass, int nhel, int nst, std::complex<double> - fi[18]); - -void vxxxxx(double p[4], double vmass, int nhel, int nsv, std::complex<double> - v[6]); - -void FFV1P0_3(std::complex<double> F1[], std::complex<double> F2[], - std::complex<double> COUP, double M3, double W3, std::complex<double> V3[]); - -void FFV2_2(std::complex<double> F1[], std::complex<double> V3[], - std::complex<double> COUP, double M2, double W2, std::complex<double> F2[]); -void FFV2_5_2(std::complex<double> F1[], std::complex<double> V3[], - std::complex<double> COUP1, std::complex<double> COUP2, double M2, double - W2, std::complex<double> F2[]); - -void FFV1_2(std::complex<double> F1[], std::complex<double> V3[], - std::complex<double> COUP, double M2, double W2, std::complex<double> F2[]); - -void FFV2_0(std::complex<double> F1[], std::complex<double> F2[], - std::complex<double> V3[], std::complex<double> COUP, std::complex<double> - & vertex); -void FFV2_5_0(std::complex<double> F1[], std::complex<double> F2[], - std::complex<double> V3[], std::complex<double> COUP1, std::complex<double> - COUP2, std::complex<double> & vertex); - -void FFV5_1(std::complex<double> F2[], std::complex<double> V3[], - std::complex<double> COUP, double M1, double W1, std::complex<double> F1[]); - -void FFV1_0(std::complex<double> F1[], std::complex<double> F2[], - std::complex<double> V3[], std::complex<double> COUP, std::complex<double> - & vertex); - -void VVVV4P0_1(std::complex<double> V2[], std::complex<double> V3[], - std::complex<double> V4[], std::complex<double> COUP, double M1, double W1, - std::complex<double> V1[]); - -void VVVV3P0_1(std::complex<double> V2[], std::complex<double> V3[], - std::complex<double> V4[], std::complex<double> COUP, double M1, double W1, - std::complex<double> V1[]); - -void VVV1_0(std::complex<double> V1[], std::complex<double> V2[], - std::complex<double> V3[], std::complex<double> COUP, std::complex<double> - & vertex); - -void FFV2_3(std::complex<double> F1[], std::complex<double> F2[], - std::complex<double> COUP, double M3, double W3, std::complex<double> V3[]); -void FFV2_4_3(std::complex<double> F1[], std::complex<double> F2[], - std::complex<double> COUP1, std::complex<double> COUP2, double M3, double - W3, std::complex<double> V3[]); - -void FFV5_2(std::complex<double> F1[], std::complex<double> V3[], - std::complex<double> COUP, double M2, double W2, std::complex<double> F2[]); - -void FFV2_1(std::complex<double> F2[], std::complex<double> V3[], - std::complex<double> COUP, double M1, double W1, std::complex<double> F1[]); -void FFV2_5_1(std::complex<double> F2[], std::complex<double> V3[], - std::complex<double> COUP1, std::complex<double> COUP2, double M1, double - W1, std::complex<double> F1[]); - -void FFV5_0(std::complex<double> F1[], std::complex<double> F2[], - std::complex<double> V3[], std::complex<double> COUP, std::complex<double> - & vertex); - -void FFV1_1(std::complex<double> F2[], std::complex<double> V3[], - std::complex<double> COUP, double M1, double W1, std::complex<double> F1[]); - -void FFV4_3(std::complex<double> F1[], std::complex<double> F2[], - std::complex<double> COUP, double M3, double W3, std::complex<double> V3[]); - -void VVVV1P0_1(std::complex<double> V2[], std::complex<double> V3[], - std::complex<double> V4[], std::complex<double> COUP, double M1, double W1, - std::complex<double> V1[]); - -void VVV1P0_1(std::complex<double> V2[], std::complex<double> V3[], - std::complex<double> COUP, double M1, double W1, std::complex<double> V1[]); - -} // end namespace MG5_sm_COLOREA - -#endif // HelAmps_sm_H diff --git a/Shower/Dipole/Colorea/Makefile.am b/Shower/Dipole/Colorea/Makefile.am deleted file mode 100644 --- a/Shower/Dipole/Colorea/Makefile.am +++ /dev/null @@ -1,19 +0,0 @@ -noinst_LTLIBRARIES = libHwDipoleShowerColorea.la - -libHwDipoleShowerColorea_la_SOURCES = \ - Colorea.fh \ - Colorea.cc \ - Colorea.h \ - HelAmps_sm.cc \ - HelAmps_sm.h \ - Parameters_sm.cc \ - Parameters_sm.h \ - read_slha_COLOREA.cc \ - read_slha_COLOREA.h \ - eeuugg.h \ - eeuugg.cc \ - eeuuggg.h \ - eeuuggg.cc \ - eeuugggg.h \ - eeuugggg.cc - diff --git a/Shower/Dipole/Colorea/Parameters_sm.cc b/Shower/Dipole/Colorea/Parameters_sm.cc deleted file mode 100644 --- a/Shower/Dipole/Colorea/Parameters_sm.cc +++ /dev/null @@ -1,241 +0,0 @@ -//========================================================================== -// This file has been automatically generated for C++ by -// MadGraph5_aMC@NLO v. 2.5.4, 2017-03-28 -// By the MadGraph5_aMC@NLO Development Team -// Visit launchpad.net/madgraph5 and amcatnlo.web.cern.ch -//========================================================================== - -#include <iostream> -#include <iomanip> -#include "Parameters_sm.h" - -// Initialize static instance -Parameters_sm * Parameters_sm::instance = 0; - -// Function to get static instance - only one instance per program -Parameters_sm * Parameters_sm::getInstance() -{ - if (instance == 0) - instance = new Parameters_sm(); - - return instance; -} - -void Parameters_sm::setIndependentParameters(SLHAReader_COLOREA& slha) -{ - // Define "zero" - zero = 0; - ZERO = 0; - // Prepare a vector for indices - vector<int> indices(2, 0); - mdl_WH = slha.get_block_entry("decay", 25, 6.382339e-03); - mdl_WW = slha.get_block_entry("decay", 24, 2.047600e+00); - mdl_WZ = slha.get_block_entry("decay", 23, 2.441404e+00); - mdl_WT = slha.get_block_entry("decay", 6, 1.491500e+00); - mdl_ymtau = slha.get_block_entry("yukawa", 15, 1.777000e+00); - mdl_ymt = slha.get_block_entry("yukawa", 6, 1.730000e+02); - mdl_ymb = slha.get_block_entry("yukawa", 5, 4.700000e+00); - aS = slha.get_block_entry("sminputs", 3, 1.180000e-01); - mdl_Gf = slha.get_block_entry("sminputs", 2, 1.166390e-05); - aEWM1 = slha.get_block_entry("sminputs", 1, 1.325070e+02); - mdl_MH = slha.get_block_entry("mass", 25, 1.250000e+02); - mdl_MZ = slha.get_block_entry("mass", 23, 9.118800e+01); - mdl_MTA = slha.get_block_entry("mass", 15, 1.777000e+00); - mdl_MT = slha.get_block_entry("mass", 6, 1.730000e+02); - mdl_MB = slha.get_block_entry("mass", 5, 4.700000e+00); - mdl_conjg__CKM3x3 = 1.; - mdl_CKM3x3 = 1.; - mdl_conjg__CKM1x1 = 1.; - mdl_complexi = std::complex<double> (0., 1.); - mdl_MZ__exp__2 = ((mdl_MZ) * (mdl_MZ)); - mdl_MZ__exp__4 = ((mdl_MZ) * (mdl_MZ) * (mdl_MZ) * (mdl_MZ)); - mdl_sqrt__2 = sqrt(2.); - mdl_MH__exp__2 = ((mdl_MH) * (mdl_MH)); - mdl_aEW = 1./aEWM1; - mdl_MW = sqrt(mdl_MZ__exp__2/2. + sqrt(mdl_MZ__exp__4/4. - (mdl_aEW * M_PI * - mdl_MZ__exp__2)/(mdl_Gf * mdl_sqrt__2))); - mdl_sqrt__aEW = sqrt(mdl_aEW); - mdl_ee = 2. * mdl_sqrt__aEW * sqrt(M_PI); - mdl_MW__exp__2 = ((mdl_MW) * (mdl_MW)); - mdl_sw2 = 1. - mdl_MW__exp__2/mdl_MZ__exp__2; - mdl_cw = sqrt(1. - mdl_sw2); - mdl_sqrt__sw2 = sqrt(mdl_sw2); - mdl_sw = mdl_sqrt__sw2; - mdl_g1 = mdl_ee/mdl_cw; - mdl_gw = mdl_ee/mdl_sw; - mdl_vev = (2. * mdl_MW * mdl_sw)/mdl_ee; - mdl_vev__exp__2 = ((mdl_vev) * (mdl_vev)); - mdl_lam = mdl_MH__exp__2/(2. * mdl_vev__exp__2); - mdl_yb = (mdl_ymb * mdl_sqrt__2)/mdl_vev; - mdl_yt = (mdl_ymt * mdl_sqrt__2)/mdl_vev; - mdl_ytau = (mdl_ymtau * mdl_sqrt__2)/mdl_vev; - mdl_muH = sqrt(mdl_lam * mdl_vev__exp__2); - mdl_I1x33 = mdl_yb * mdl_conjg__CKM3x3; - mdl_I2x33 = mdl_yt * mdl_conjg__CKM3x3; - mdl_I3x33 = mdl_CKM3x3 * mdl_yt; - mdl_I4x33 = mdl_CKM3x3 * mdl_yb; - mdl_ee__exp__2 = ((mdl_ee) * (mdl_ee)); - mdl_sw__exp__2 = ((mdl_sw) * (mdl_sw)); - mdl_cw__exp__2 = ((mdl_cw) * (mdl_cw)); -} -void Parameters_sm::setIndependentCouplings() -{ - GC_2 = (2. * mdl_ee * mdl_complexi)/3.; - GC_3 = -(mdl_ee * mdl_complexi); - GC_50 = -(mdl_cw * mdl_ee * mdl_complexi)/(2. * mdl_sw); - GC_51 = (mdl_cw * mdl_ee * mdl_complexi)/(2. * mdl_sw); - GC_58 = -(mdl_ee * mdl_complexi * mdl_sw)/(6. * mdl_cw); - GC_59 = (mdl_ee * mdl_complexi * mdl_sw)/(2. * mdl_cw); -} -void Parameters_sm::setDependentParameters() -{ - mdl_sqrt__aS = sqrt(aS); - G = 2. * mdl_sqrt__aS * sqrt(M_PI); - mdl_G__exp__2 = ((G) * (G)); -} -void Parameters_sm::setDependentCouplings() -{ - GC_12 = mdl_complexi * mdl_G__exp__2; - GC_11 = mdl_complexi * G; - GC_10 = -G; -} - -// Routines for printing out parameters -void Parameters_sm::printIndependentParameters() -{ - cout << "sm model parameters independent of event kinematics:" << endl; - cout << setw(20) << "mdl_WH " << "= " << setiosflags(ios::scientific) << - setw(10) << mdl_WH << endl; - cout << setw(20) << "mdl_WW " << "= " << setiosflags(ios::scientific) << - setw(10) << mdl_WW << endl; - cout << setw(20) << "mdl_WZ " << "= " << setiosflags(ios::scientific) << - setw(10) << mdl_WZ << endl; - cout << setw(20) << "mdl_WT " << "= " << setiosflags(ios::scientific) << - setw(10) << mdl_WT << endl; - cout << setw(20) << "mdl_ymtau " << "= " << setiosflags(ios::scientific) << - setw(10) << mdl_ymtau << endl; - cout << setw(20) << "mdl_ymt " << "= " << setiosflags(ios::scientific) << - setw(10) << mdl_ymt << endl; - cout << setw(20) << "mdl_ymb " << "= " << setiosflags(ios::scientific) << - setw(10) << mdl_ymb << endl; - cout << setw(20) << "aS " << "= " << setiosflags(ios::scientific) << - setw(10) << aS << endl; - cout << setw(20) << "mdl_Gf " << "= " << setiosflags(ios::scientific) << - setw(10) << mdl_Gf << endl; - cout << setw(20) << "aEWM1 " << "= " << setiosflags(ios::scientific) << - setw(10) << aEWM1 << endl; - cout << setw(20) << "mdl_MH " << "= " << setiosflags(ios::scientific) << - setw(10) << mdl_MH << endl; - cout << setw(20) << "mdl_MZ " << "= " << setiosflags(ios::scientific) << - setw(10) << mdl_MZ << endl; - cout << setw(20) << "mdl_MTA " << "= " << setiosflags(ios::scientific) << - setw(10) << mdl_MTA << endl; - cout << setw(20) << "mdl_MT " << "= " << setiosflags(ios::scientific) << - setw(10) << mdl_MT << endl; - cout << setw(20) << "mdl_MB " << "= " << setiosflags(ios::scientific) << - setw(10) << mdl_MB << endl; - cout << setw(20) << "mdl_conjg__CKM3x3 " << "= " << - setiosflags(ios::scientific) << setw(10) << mdl_conjg__CKM3x3 << endl; - cout << setw(20) << "mdl_CKM3x3 " << "= " << setiosflags(ios::scientific) - << setw(10) << mdl_CKM3x3 << endl; - cout << setw(20) << "mdl_conjg__CKM1x1 " << "= " << - setiosflags(ios::scientific) << setw(10) << mdl_conjg__CKM1x1 << endl; - cout << setw(20) << "mdl_complexi " << "= " << setiosflags(ios::scientific) - << setw(10) << mdl_complexi << endl; - cout << setw(20) << "mdl_MZ__exp__2 " << "= " << - setiosflags(ios::scientific) << setw(10) << mdl_MZ__exp__2 << endl; - cout << setw(20) << "mdl_MZ__exp__4 " << "= " << - setiosflags(ios::scientific) << setw(10) << mdl_MZ__exp__4 << endl; - cout << setw(20) << "mdl_sqrt__2 " << "= " << setiosflags(ios::scientific) - << setw(10) << mdl_sqrt__2 << endl; - cout << setw(20) << "mdl_MH__exp__2 " << "= " << - setiosflags(ios::scientific) << setw(10) << mdl_MH__exp__2 << endl; - cout << setw(20) << "mdl_aEW " << "= " << setiosflags(ios::scientific) << - setw(10) << mdl_aEW << endl; - cout << setw(20) << "mdl_MW " << "= " << setiosflags(ios::scientific) << - setw(10) << mdl_MW << endl; - cout << setw(20) << "mdl_sqrt__aEW " << "= " << - setiosflags(ios::scientific) << setw(10) << mdl_sqrt__aEW << endl; - cout << setw(20) << "mdl_ee " << "= " << setiosflags(ios::scientific) << - setw(10) << mdl_ee << endl; - cout << setw(20) << "mdl_MW__exp__2 " << "= " << - setiosflags(ios::scientific) << setw(10) << mdl_MW__exp__2 << endl; - cout << setw(20) << "mdl_sw2 " << "= " << setiosflags(ios::scientific) << - setw(10) << mdl_sw2 << endl; - cout << setw(20) << "mdl_cw " << "= " << setiosflags(ios::scientific) << - setw(10) << mdl_cw << endl; - cout << setw(20) << "mdl_sqrt__sw2 " << "= " << - setiosflags(ios::scientific) << setw(10) << mdl_sqrt__sw2 << endl; - cout << setw(20) << "mdl_sw " << "= " << setiosflags(ios::scientific) << - setw(10) << mdl_sw << endl; - cout << setw(20) << "mdl_g1 " << "= " << setiosflags(ios::scientific) << - setw(10) << mdl_g1 << endl; - cout << setw(20) << "mdl_gw " << "= " << setiosflags(ios::scientific) << - setw(10) << mdl_gw << endl; - cout << setw(20) << "mdl_vev " << "= " << setiosflags(ios::scientific) << - setw(10) << mdl_vev << endl; - cout << setw(20) << "mdl_vev__exp__2 " << "= " << - setiosflags(ios::scientific) << setw(10) << mdl_vev__exp__2 << endl; - cout << setw(20) << "mdl_lam " << "= " << setiosflags(ios::scientific) << - setw(10) << mdl_lam << endl; - cout << setw(20) << "mdl_yb " << "= " << setiosflags(ios::scientific) << - setw(10) << mdl_yb << endl; - cout << setw(20) << "mdl_yt " << "= " << setiosflags(ios::scientific) << - setw(10) << mdl_yt << endl; - cout << setw(20) << "mdl_ytau " << "= " << setiosflags(ios::scientific) << - setw(10) << mdl_ytau << endl; - cout << setw(20) << "mdl_muH " << "= " << setiosflags(ios::scientific) << - setw(10) << mdl_muH << endl; - cout << setw(20) << "mdl_I1x33 " << "= " << setiosflags(ios::scientific) << - setw(10) << mdl_I1x33 << endl; - cout << setw(20) << "mdl_I2x33 " << "= " << setiosflags(ios::scientific) << - setw(10) << mdl_I2x33 << endl; - cout << setw(20) << "mdl_I3x33 " << "= " << setiosflags(ios::scientific) << - setw(10) << mdl_I3x33 << endl; - cout << setw(20) << "mdl_I4x33 " << "= " << setiosflags(ios::scientific) << - setw(10) << mdl_I4x33 << endl; - cout << setw(20) << "mdl_ee__exp__2 " << "= " << - setiosflags(ios::scientific) << setw(10) << mdl_ee__exp__2 << endl; - cout << setw(20) << "mdl_sw__exp__2 " << "= " << - setiosflags(ios::scientific) << setw(10) << mdl_sw__exp__2 << endl; - cout << setw(20) << "mdl_cw__exp__2 " << "= " << - setiosflags(ios::scientific) << setw(10) << mdl_cw__exp__2 << endl; -} -void Parameters_sm::printIndependentCouplings() -{ - cout << "sm model couplings independent of event kinematics:" << endl; - cout << setw(20) << "GC_2 " << "= " << setiosflags(ios::scientific) << - setw(10) << GC_2 << endl; - cout << setw(20) << "GC_3 " << "= " << setiosflags(ios::scientific) << - setw(10) << GC_3 << endl; - cout << setw(20) << "GC_50 " << "= " << setiosflags(ios::scientific) << - setw(10) << GC_50 << endl; - cout << setw(20) << "GC_51 " << "= " << setiosflags(ios::scientific) << - setw(10) << GC_51 << endl; - cout << setw(20) << "GC_58 " << "= " << setiosflags(ios::scientific) << - setw(10) << GC_58 << endl; - cout << setw(20) << "GC_59 " << "= " << setiosflags(ios::scientific) << - setw(10) << GC_59 << endl; -} -void Parameters_sm::printDependentParameters() -{ - cout << "sm model parameters dependent on event kinematics:" << endl; - cout << setw(20) << "mdl_sqrt__aS " << "= " << setiosflags(ios::scientific) - << setw(10) << mdl_sqrt__aS << endl; - cout << setw(20) << "G " << "= " << setiosflags(ios::scientific) << - setw(10) << G << endl; - cout << setw(20) << "mdl_G__exp__2 " << "= " << - setiosflags(ios::scientific) << setw(10) << mdl_G__exp__2 << endl; -} -void Parameters_sm::printDependentCouplings() -{ - cout << "sm model couplings dependent on event kinematics:" << endl; - cout << setw(20) << "GC_12 " << "= " << setiosflags(ios::scientific) << - setw(10) << GC_12 << endl; - cout << setw(20) << "GC_11 " << "= " << setiosflags(ios::scientific) << - setw(10) << GC_11 << endl; - cout << setw(20) << "GC_10 " << "= " << setiosflags(ios::scientific) << - setw(10) << GC_10 << endl; -} - - diff --git a/Shower/Dipole/Colorea/Parameters_sm.h b/Shower/Dipole/Colorea/Parameters_sm.h deleted file mode 100644 --- a/Shower/Dipole/Colorea/Parameters_sm.h +++ /dev/null @@ -1,66 +0,0 @@ -//========================================================================== -// This file has been automatically generated for C++ -// MadGraph5_aMC@NLO v. 2.5.4, 2017-03-28 -// By the MadGraph5_aMC@NLO Development Team -// Visit launchpad.net/madgraph5 and amcatnlo.web.cern.ch -//========================================================================== - -#ifndef Parameters_sm_H -#define Parameters_sm_H - -#include <complex> - -#include "read_slha_COLOREA.h" -using namespace std; - -class Parameters_sm -{ - public: - - static Parameters_sm * getInstance(); - - // Define "zero" - double zero, ZERO; - // Model parameters independent of aS - double mdl_WH, mdl_WW, mdl_WZ, mdl_WT, mdl_ymtau, mdl_ymt, mdl_ymb, aS, - mdl_Gf, aEWM1, mdl_MH, mdl_MZ, mdl_MTA, mdl_MT, mdl_MB, - mdl_conjg__CKM3x3, mdl_CKM3x3, mdl_conjg__CKM1x1, mdl_MZ__exp__2, - mdl_MZ__exp__4, mdl_sqrt__2, mdl_MH__exp__2, mdl_aEW, mdl_MW, - mdl_sqrt__aEW, mdl_ee, mdl_MW__exp__2, mdl_sw2, mdl_cw, mdl_sqrt__sw2, - mdl_sw, mdl_g1, mdl_gw, mdl_vev, mdl_vev__exp__2, mdl_lam, mdl_yb, - mdl_yt, mdl_ytau, mdl_muH, mdl_ee__exp__2, mdl_sw__exp__2, - mdl_cw__exp__2; - std::complex<double> mdl_complexi, mdl_I1x33, mdl_I2x33, mdl_I3x33, - mdl_I4x33; - // Model parameters dependent on aS - double mdl_sqrt__aS, G, mdl_G__exp__2; - // Model couplings independent of aS - std::complex<double> GC_2, GC_3, GC_50, GC_51, GC_58, GC_59; - // Model couplings dependent on aS - std::complex<double> GC_12, GC_11, GC_10; - - // Set parameters that are unchanged during the run - void setIndependentParameters(SLHAReader_COLOREA& slha); - // Set couplings that are unchanged during the run - void setIndependentCouplings(); - // Set parameters that are changed event by event - void setDependentParameters(); - // Set couplings that are changed event by event - void setDependentCouplings(); - - // Print parameters that are unchanged during the run - void printIndependentParameters(); - // Print couplings that are unchanged during the run - void printIndependentCouplings(); - // Print parameters that are changed event by event - void printDependentParameters(); - // Print couplings that are changed event by event - void printDependentCouplings(); - - - private: - static Parameters_sm * instance; -}; - -#endif // Parameters_sm_H - diff --git a/Shower/Dipole/Colorea/eeuugg.cc b/Shower/Dipole/Colorea/eeuugg.cc deleted file mode 100644 --- a/Shower/Dipole/Colorea/eeuugg.cc +++ /dev/null @@ -1,291 +0,0 @@ -//========================================================================== -// This file has been automatically generated for C++ Standalone by -// MadGraph5_aMC@NLO v. 2.5.4, 2017-03-28 -// By the MadGraph5_aMC@NLO Development Team -// Visit launchpad.net/madgraph5 and amcatnlo.web.cern.ch -//========================================================================== -// and was then modified by J. Bellm. -#include "eeuugg.h" -#include "HelAmps_sm.h" -#include <iostream> - -using namespace MG5_sm_COLOREA; - -//========================================================================== -// Class member functions for calculating the matrix elements for -// Process: e+ e- > u u~ g g WEIGHTED<=6 @1 - -//-------------------------------------------------------------------------- -// Initialize process. - -vector<int> eeuugg::producePermutation(double r,vector < double * > & momenta){ - - setMomenta(momenta); - sigmaKin(); - - static const int res[2][5] = { - {5, 6, 3, 4, 0}, - {6, 5, 3, 4, 0}}; - - double jampsum=0.; - for( int i=0;i<2;i++) jampsum+=jamp2[0][i]; -// std::cout<<"\njampsum "<<jampsum<<std::flush; - double cur=0.; - - for(int i=0;i<2;i++){ -// std::cout<<"\njamp2[0][i] "<<jamp2[0][i]<<std::flush; - cur+=jamp2[0][i]; - if( cur/jampsum > r )return std::vector<int>(res[i], res[i] + sizeof res[i] / sizeof res[i][0]); - } - std::cerr<<"\nproducePermutation: Upps.. Something went wrong!!\n"<<std::flush; - return std::vector<int>(); -} - - - -void eeuugg::initProc(string param_card_name) -{ - cout<<"\nColorea: Init process eeuugg for rearrangement (arXiv:1801.06113)."; - // Instantiate the model class and set parameters that stay fixed during run - pars = Parameters_sm::getInstance(); - SLHAReader_COLOREA slha(param_card_name); - pars->setIndependentParameters(slha); - pars->setIndependentCouplings(); -// pars->printIndependentParameters(); -// pars->printIndependentCouplings(); - // Set external particle masses for this matrix element - mME.push_back(pars->ZERO); - mME.push_back(pars->ZERO); - mME.push_back(pars->ZERO); - mME.push_back(pars->ZERO); - mME.push_back(pars->ZERO); - mME.push_back(pars->ZERO); - jamp2[0] = new double[2]; -} - -//-------------------------------------------------------------------------- -// Evaluate |M|^2, part independent of incoming flavour. - -void eeuugg::sigmaKin() -{ - // Set the parameters which change event by event - pars->setDependentParameters(); - pars->setDependentCouplings(); - static bool firsttime = true; - if (firsttime) - { -// pars->printDependentParameters(); -// pars->printDependentCouplings(); - firsttime = false; - } - - // Reset color flows - for(int i = 0; i < 2; i++ ) - jamp2[0][i] = 0.; - - // Local variables and constants - const int ncomb = 64; - static bool goodhel[ncomb] = {false}; - static int ntry = 0, sum_hel = 0, ngood = 0; - static int igood[ncomb]; - static int jhel; - double t[nprocesses]; - // Helicities for the process - static const int helicities[ncomb][nexternal] = {{-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}, {-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}, - {-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}, {-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}, {-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}, {-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}, {-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}, - {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}, {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}, {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}, {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}, {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}, {1, 1, 1, 1, -1, -1}, {1, - 1, 1, 1, -1, 1}, {1, 1, 1, 1, 1, -1}, {1, 1, 1, 1, 1, 1}}; - // Denominators: spins, colors and identical particles - const int denominators[nprocesses] = {8}; - - ntry = ntry + 1; - - // Reset the matrix elements - for(int i = 0; i < nprocesses; i++ ) - { - matrix_element[i] = 0.; - } - // Define permutation - int perm[nexternal]; - for(int i = 0; i < nexternal; i++ ) - { - perm[i] = i; - } - - if (sum_hel == 0 || ntry < 10) - { - // Calculate the matrix element for all helicities - for(int ihel = 0; ihel < ncomb; ihel++ ) - { - if (goodhel[ihel] || ntry < 2) - { - calculate_wavefunctions(perm, helicities[ihel]); - t[0] = matrix_1_epem_uuxgg(); - - double tsum = 0; - for(int iproc = 0; iproc < nprocesses; iproc++ ) - { - matrix_element[iproc] += t[iproc]; - tsum += t[iproc]; - } - // Store which helicities give non-zero result - if (tsum != 0. && !goodhel[ihel]) - { - goodhel[ihel] = true; - ngood++; - igood[ngood] = ihel; - } - } - } - jhel = 0; - sum_hel = min(sum_hel, ngood); - } - else - { - // Only use the "good" helicities - for(int j = 0; j < sum_hel; j++ ) - { - jhel++; - if (jhel >= ngood) - jhel = 0; - double hwgt = double(ngood)/double(sum_hel); - int ihel = igood[jhel]; - calculate_wavefunctions(perm, helicities[ihel]); - t[0] = matrix_1_epem_uuxgg(); - - for(int iproc = 0; iproc < nprocesses; iproc++ ) - { - matrix_element[iproc] += t[iproc] * hwgt; - } - } - } - - for (int i = 0; i < nprocesses; i++ ) - matrix_element[i] /= denominators[i]; - - - -} - - -//-------------------------------------------------------------------------- -// Evaluate |M|^2 for each subprocess - -void eeuugg::calculate_wavefunctions(const int perm[], const int hel[]) -{ - // Calculate wavefunctions for all processes - - - // Calculate all wavefunctions - oxxxxx(p[perm[0]], mME[0], hel[0], -1, w[0]); - ixxxxx(p[perm[1]], mME[1], hel[1], +1, w[1]); - oxxxxx(p[perm[2]], mME[2], hel[2], +1, w[2]); - ixxxxx(p[perm[3]], mME[3], hel[3], -1, w[3]); - vxxxxx(p[perm[4]], mME[4], hel[4], +1, w[4]); - vxxxxx(p[perm[5]], mME[5], hel[5], +1, w[5]); - FFV1P0_3(w[1], w[0], pars->GC_3, pars->ZERO, pars->ZERO, w[6]); - FFV1_1(w[2], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[7]); - FFV1_2(w[3], w[6], pars->GC_2, pars->ZERO, pars->ZERO, w[8]); - FFV2_4_3(w[1], w[0], pars->GC_50, pars->GC_59, pars->mdl_MZ, pars->mdl_WZ, - w[9]); - FFV2_5_2(w[3], w[9], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO, - w[10]); - FFV1_2(w[3], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[11]); - FFV1_1(w[2], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[12]); - FFV1_2(w[3], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[13]); - FFV1_1(w[2], w[6], pars->GC_2, pars->ZERO, pars->ZERO, w[14]); - FFV2_5_1(w[2], w[9], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO, - w[15]); - VVV1P0_1(w[4], w[5], pars->GC_10, pars->ZERO, pars->ZERO, w[16]); - - // Calculate all amplitudes - // Amplitude(s) for diagram number 0 - FFV1_0(w[8], w[7], w[5], pars->GC_11, amp[0]); - FFV1_0(w[10], w[7], w[5], pars->GC_11, amp[1]); - FFV1_0(w[11], w[7], w[6], pars->GC_2, amp[2]); - FFV2_5_0(w[11], w[7], w[9], pars->GC_51, pars->GC_58, amp[3]); - FFV1_0(w[8], w[12], w[4], pars->GC_11, amp[4]); - FFV1_0(w[10], w[12], w[4], pars->GC_11, amp[5]); - FFV1_0(w[13], w[12], w[6], pars->GC_2, amp[6]); - FFV2_5_0(w[13], w[12], w[9], pars->GC_51, pars->GC_58, amp[7]); - FFV1_0(w[13], w[14], w[5], pars->GC_11, amp[8]); - FFV1_0(w[13], w[15], w[5], pars->GC_11, amp[9]); - FFV1_0(w[11], w[14], w[4], pars->GC_11, amp[10]); - FFV1_0(w[11], w[15], w[4], pars->GC_11, amp[11]); - FFV1_0(w[3], w[14], w[16], pars->GC_11, amp[12]); - FFV1_0(w[8], w[2], w[16], pars->GC_11, amp[13]); - FFV1_0(w[3], w[15], w[16], pars->GC_11, amp[14]); - FFV1_0(w[10], w[2], w[16], pars->GC_11, amp[15]); - -} -double eeuugg::matrix_1_epem_uuxgg() -{ - //int i, j; - // Local variables - //const int ngraphs = 16; - //const int ncolor = 2; - std::complex<double> jamp[2]; - // The color matrix; - //static const double denom[ncolor] = {3, 3}; - //static const double cf[ncolor][ncolor] = {{16, -2}, {-2, 16}}; - - // Calculate color flows - jamp[0] = +amp[0] + amp[1] + amp[2] + amp[3] + amp[10] + amp[11] - - std::complex<double> (0, 1) * amp[12] - std::complex<double> (0, 1) * - amp[13] - std::complex<double> (0, 1) * amp[14] - std::complex<double> - (0, 1) * amp[15]; - jamp[1] = +amp[4] + amp[5] + amp[6] + amp[7] + amp[8] + amp[9] + - std::complex<double> (0, 1) * amp[12] + std::complex<double> (0, 1) * - amp[13] + std::complex<double> (0, 1) * amp[14] + std::complex<double> - (0, 1) * amp[15]; - - // Store the leading color flows for choice of color - for(int i = 0; i < 2; i++ ) - jamp2[0][i] += real(jamp[i] * conj(jamp[i])); - - return -1.; -} - - -double eeuugg::get_jamp2(int i) -{ - return jamp2[0][i]; -} - -int eeuugg::colorstring(int i, int j) -{ - static const double res[2][5] = { - {5, 6, 3, 4, 0}, - {6, 5, 3, 4, 0}}; - return res[i][j]; -} - - -int eeuugg::NCol() -{ - const int ncolor = 2; - return ncolor; -} - - - - - - diff --git a/Shower/Dipole/Colorea/eeuugg.h b/Shower/Dipole/Colorea/eeuugg.h deleted file mode 100644 --- a/Shower/Dipole/Colorea/eeuugg.h +++ /dev/null @@ -1,52 +0,0 @@ - //========================================================================== - // This file has been automatically generated for C++ Standalone by - // MadGraph5_aMC@NLO v. 2.5.4, 2017-03-28 - // By the MadGraph5_aMC@NLO Development Team - // Visit launchpad.net/madgraph5 and amcatnlo.web.cern.ch - //========================================================================== - // and was then modified by J. Bellm. -#ifndef MG5_Sigma_sm_epem_uuxgg_H -#define MG5_Sigma_sm_epem_uuxgg_H -#include <complex> -#include <vector> -#include "Parameters_sm.h" -using namespace std; -class eeuugg -{ - public: - eeuugg() { - initProc("param_card.dat"); - } - // Retrun the prefered gluon order - vector<int> producePermutation(double r,vector < double * > & momenta); - void setMass(int i,double M){mME[i]=M;} - private: - ///////// Process Dependent - static const int ninitial = 2; - static const int nexternal = 6; - static const int nprocesses = 1; - static const int nwavefuncs = 17; - static const int namplitudes = 16; - std::complex<double> w[nwavefuncs][18]; - double matrix_1_epem_uuxgg(); - ///////// Generic - double matrix_element[nprocesses]; - std::complex<double> amp[namplitudes]; - double * jamp2[nprocesses]; - Parameters_sm * pars; - vector<double> mME; - vector < double * > p; - int id1, id2; - void initProc(string param_card_name); - void sigmaKin(); - const vector<double> & getMasses() const {return mME;} - vector < double * > getMomenta(){return p;} - void setMomenta(vector < double * > & momenta){p = momenta;} - void setInitial(int inid1, int inid2){id1 = inid1; id2 = inid2;} - void calculate_wavefunctions(const int perm[], const int hel[]); - // New function - double get_jamp2(int i); - int colorstring(int i, int j); - int NCol(); -}; -#endif // MG5_Sigma_sm_epem_uuxgg_H diff --git a/Shower/Dipole/Colorea/eeuuggg.cc b/Shower/Dipole/Colorea/eeuuggg.cc deleted file mode 100644 --- a/Shower/Dipole/Colorea/eeuuggg.cc +++ /dev/null @@ -1,531 +0,0 @@ -//========================================================================== -// This file has been automatically generated for C++ Standalone by -// MadGraph5_aMC@NLO v. 2.5.4, 2017-03-28 -// By the MadGraph5_aMC@NLO Development Team -// Visit launchpad.net/madgraph5 and amcatnlo.web.cern.ch -//========================================================================== -// and was then modified by J. Bellm. -#include "eeuuggg.h" -#include "HelAmps_sm.h" -#include <iostream> - -using namespace MG5_sm_COLOREA; - -//========================================================================== -// Class member functions for calculating the matrix elements for -// Process: e+ e- > u u~ g g g WEIGHTED<=7 @1 - -//-------------------------------------------------------------------------- -// Initialize process. - -vector<int> eeuuggg::producePermutation(double r,vector < double * > & momenta){ - static bool initialized=false; - if (!initialized){ - initProc("param_card.dat"); - initialized=true; - } - setMomenta(momenta); - sigmaKin(); - - static const int res[6][6] = { - {5, 6, 7, 3, 4, 0}, - {5, 7, 6, 3, 4, 0}, - {6, 5, 7, 3, 4, 0}, - {6, 7, 5, 3, 4, 0}, - {7, 5, 6, 3, 4, 0}, - {7, 6, 5, 3, 4, 0}}; - - double jampsum=0.; - for( int i=0;i<6;i++) jampsum+=jamp2[0][i]; - double cur=0.; - for(int i=0;i<6;i++){ - cur+=jamp2[0][i]; - if( cur/jampsum > r )return std::vector<int>(res[i], res[i] + sizeof res[i] / sizeof res[i][0]); - } - //std::cout<<"producePermutation: Upps.. Something went wrong!!"; - return std::vector<int>(); -} - - -void eeuuggg::initProc(string param_card_name) -{ - // Instantiate the model class and set parameters that stay fixed during run - cout<<"\nColorea: Init process eeuuggg for rearrangement (arXiv:1801.06113)."; - pars = Parameters_sm::getInstance(); - SLHAReader_COLOREA slha(param_card_name); - pars->setIndependentParameters(slha); - pars->setIndependentCouplings(); -// pars->printIndependentParameters(); -// pars->printIndependentCouplings(); - // Set external particle masses for this matrix element - mME.push_back(pars->ZERO); - mME.push_back(pars->ZERO); - mME.push_back(pars->ZERO); - mME.push_back(pars->ZERO); - mME.push_back(pars->ZERO); - mME.push_back(pars->ZERO); - mME.push_back(pars->ZERO); - jamp2[0] = new double[6]; -} - -//-------------------------------------------------------------------------- -// Evaluate |M|^2, part independent of incoming flavour. - -void eeuuggg::sigmaKin() -{ - // Set the parameters which change event by event - pars->setDependentParameters(); - pars->setDependentCouplings(); - static bool firsttime = true; - if (firsttime) - { -// pars->printDependentParameters(); -// pars->printDependentCouplings(); - firsttime = false; - } - - // Reset color flows - for(int i = 0; i < 6; i++ ) - jamp2[0][i] = 0.; - - // Local variables and constants - const int ncomb = 128; - static bool goodhel[ncomb] = {false}; - static int ntry = 0, sum_hel = 0, ngood = 0; - static int igood[ncomb]; - static int jhel; -// std::complex<double> * * wfs; - double t[nprocesses]; - // Helicities for the process - static const int helicities[ncomb][nexternal] = {{-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, -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, -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, -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, -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, -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, -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}, {-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, -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, 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, -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, 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, -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, 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}, {-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, -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, 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, -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, -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, -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, -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}, {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, 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, -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, -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, 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, 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, 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}, {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, 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}}; - // Denominators: spins, colors and identical particles - const int denominators[nprocesses] = {24}; - - ntry = ntry + 1; - - // Reset the matrix elements - for(int i = 0; i < nprocesses; i++ ) - { - matrix_element[i] = 0.; - } - // Define permutation - int perm[nexternal]; - for(int i = 0; i < nexternal; i++ ) - { - perm[i] = i; - } - - if (sum_hel == 0 || ntry < 10) - { - // Calculate the matrix element for all helicities - for(int ihel = 0; ihel < ncomb; ihel++ ) - { - if (goodhel[ihel] || ntry < 2) - { - calculate_wavefunctions(perm, helicities[ihel]); - t[0] = matrix_1_epem_uuxggg(); - - double tsum = 0; - for(int iproc = 0; iproc < nprocesses; iproc++ ) - { - matrix_element[iproc] += t[iproc]; - tsum += t[iproc]; - } - // Store which helicities give non-zero result - if (tsum != 0. && !goodhel[ihel]) - { - goodhel[ihel] = true; - ngood++; - igood[ngood] = ihel; - } - } - } - jhel = 0; - sum_hel = min(sum_hel, ngood); - } - else - { - // Only use the "good" helicities - for(int j = 0; j < sum_hel; j++ ) - { - jhel++; - if (jhel >= ngood) - jhel = 0; - double hwgt = double(ngood)/double(sum_hel); - int ihel = igood[jhel]; - calculate_wavefunctions(perm, helicities[ihel]); - t[0] = matrix_1_epem_uuxggg(); - - for(int iproc = 0; iproc < nprocesses; iproc++ ) - { - matrix_element[iproc] += t[iproc] * hwgt; - } - } - } - - for (int i = 0; i < nprocesses; i++ ) - matrix_element[i] /= denominators[i]; - - - -} - - -//========================================================================== -// Private class member functions - -//-------------------------------------------------------------------------- -// Evaluate |M|^2 for each subprocess - -void eeuuggg::calculate_wavefunctions(const int perm[], const int hel[]) -{ - // Calculate wavefunctions for all processes -// int i;//, j; - - // Calculate all wavefunctions - oxxxxx(p[perm[0]], mME[0], hel[0], -1, w[0]); - ixxxxx(p[perm[1]], mME[1], hel[1], +1, w[1]); - oxxxxx(p[perm[2]], mME[2], hel[2], +1, w[2]); - ixxxxx(p[perm[3]], mME[3], hel[3], -1, w[3]); - vxxxxx(p[perm[4]], mME[4], hel[4], +1, w[4]); - vxxxxx(p[perm[5]], mME[5], hel[5], +1, w[5]); - vxxxxx(p[perm[6]], mME[6], hel[6], +1, w[6]); - FFV1P0_3(w[1], w[0], pars->GC_3, pars->ZERO, pars->ZERO, w[7]); - FFV1_1(w[2], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[8]); - FFV1_2(w[3], w[7], pars->GC_2, pars->ZERO, pars->ZERO, w[9]); - FFV1_1(w[8], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[10]); - FFV1_1(w[8], w[6], pars->GC_11, pars->ZERO, pars->ZERO, w[11]); - FFV2_4_3(w[1], w[0], pars->GC_50, pars->GC_59, pars->mdl_MZ, pars->mdl_WZ, - w[12]); - FFV2_5_2(w[3], w[12], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO, - w[13]); - FFV1_2(w[3], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[14]); - FFV1_1(w[8], w[7], pars->GC_2, pars->ZERO, pars->ZERO, w[15]); - FFV1_2(w[14], w[7], pars->GC_2, pars->ZERO, pars->ZERO, w[16]); - FFV2_5_1(w[8], w[12], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO, - w[17]); - FFV2_5_2(w[14], w[12], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO, - w[18]); - FFV1_2(w[3], w[6], pars->GC_11, pars->ZERO, pars->ZERO, w[19]); - FFV1_2(w[19], w[7], pars->GC_2, pars->ZERO, pars->ZERO, w[20]); - FFV2_5_2(w[19], w[12], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO, - w[21]); - VVV1P0_1(w[5], w[6], pars->GC_10, pars->ZERO, pars->ZERO, w[22]); - FFV1_1(w[2], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[23]); - FFV1_1(w[23], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[24]); - FFV1_1(w[23], w[6], pars->GC_11, pars->ZERO, pars->ZERO, w[25]); - FFV1_2(w[3], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[26]); - FFV1_1(w[23], w[7], pars->GC_2, pars->ZERO, pars->ZERO, w[27]); - FFV1_2(w[26], w[7], pars->GC_2, pars->ZERO, pars->ZERO, w[28]); - FFV2_5_1(w[23], w[12], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO, - w[29]); - FFV2_5_2(w[26], w[12], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO, - w[30]); - VVV1P0_1(w[4], w[6], pars->GC_10, pars->ZERO, pars->ZERO, w[31]); - FFV1_1(w[2], w[6], pars->GC_11, pars->ZERO, pars->ZERO, w[32]); - FFV1_1(w[32], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[33]); - FFV1_1(w[32], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[34]); - FFV1_1(w[32], w[7], pars->GC_2, pars->ZERO, pars->ZERO, w[35]); - FFV2_5_1(w[32], w[12], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO, - w[36]); - VVV1P0_1(w[4], w[5], pars->GC_10, pars->ZERO, pars->ZERO, w[37]); - FFV1_1(w[2], w[7], pars->GC_2, pars->ZERO, pars->ZERO, w[38]); - FFV1_2(w[26], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[39]); - FFV1_2(w[26], w[6], pars->GC_11, pars->ZERO, pars->ZERO, w[40]); - FFV2_5_1(w[2], w[12], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO, - w[41]); - FFV1_2(w[14], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[42]); - FFV1_2(w[14], w[6], pars->GC_11, pars->ZERO, pars->ZERO, w[43]); - FFV1_2(w[19], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[44]); - FFV1_2(w[19], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[45]); - FFV1_2(w[3], w[37], pars->GC_11, pars->ZERO, pars->ZERO, w[46]); - VVV1P0_1(w[37], w[6], pars->GC_10, pars->ZERO, pars->ZERO, w[47]); - FFV1_1(w[2], w[37], pars->GC_11, pars->ZERO, pars->ZERO, w[48]); - FFV1_2(w[3], w[31], pars->GC_11, pars->ZERO, pars->ZERO, w[49]); - VVV1P0_1(w[31], w[5], pars->GC_10, pars->ZERO, pars->ZERO, w[50]); - FFV1_1(w[2], w[31], pars->GC_11, pars->ZERO, pars->ZERO, w[51]); - FFV1_2(w[3], w[22], pars->GC_11, pars->ZERO, pars->ZERO, w[52]); - VVV1P0_1(w[4], w[22], pars->GC_10, pars->ZERO, pars->ZERO, w[53]); - FFV1_1(w[2], w[22], pars->GC_11, pars->ZERO, pars->ZERO, w[54]); - VVVV1P0_1(w[4], w[5], w[6], pars->GC_12, pars->ZERO, pars->ZERO, w[55]); - VVVV3P0_1(w[4], w[5], w[6], pars->GC_12, pars->ZERO, pars->ZERO, w[56]); - VVVV4P0_1(w[4], w[5], w[6], pars->GC_12, pars->ZERO, pars->ZERO, w[57]); - - // Calculate all amplitudes - // Amplitude(s) for diagram number 0 - FFV1_0(w[9], w[10], w[6], pars->GC_11, amp[0]); - FFV1_0(w[9], w[11], w[5], pars->GC_11, amp[1]); - FFV1_0(w[13], w[10], w[6], pars->GC_11, amp[2]); - FFV1_0(w[13], w[11], w[5], pars->GC_11, amp[3]); - FFV1_0(w[14], w[15], w[6], pars->GC_11, amp[4]); - FFV1_0(w[16], w[8], w[6], pars->GC_11, amp[5]); - FFV1_0(w[14], w[17], w[6], pars->GC_11, amp[6]); - FFV1_0(w[18], w[8], w[6], pars->GC_11, amp[7]); - FFV1_0(w[19], w[15], w[5], pars->GC_11, amp[8]); - FFV1_0(w[20], w[8], w[5], pars->GC_11, amp[9]); - FFV1_0(w[19], w[17], w[5], pars->GC_11, amp[10]); - FFV1_0(w[21], w[8], w[5], pars->GC_11, amp[11]); - FFV1_0(w[3], w[15], w[22], pars->GC_11, amp[12]); - FFV1_0(w[9], w[8], w[22], pars->GC_11, amp[13]); - FFV1_0(w[3], w[17], w[22], pars->GC_11, amp[14]); - FFV1_0(w[13], w[8], w[22], pars->GC_11, amp[15]); - FFV1_0(w[9], w[24], w[6], pars->GC_11, amp[16]); - FFV1_0(w[9], w[25], w[4], pars->GC_11, amp[17]); - FFV1_0(w[13], w[24], w[6], pars->GC_11, amp[18]); - FFV1_0(w[13], w[25], w[4], pars->GC_11, amp[19]); - FFV1_0(w[26], w[27], w[6], pars->GC_11, amp[20]); - FFV1_0(w[28], w[23], w[6], pars->GC_11, amp[21]); - FFV1_0(w[26], w[29], w[6], pars->GC_11, amp[22]); - FFV1_0(w[30], w[23], w[6], pars->GC_11, amp[23]); - FFV1_0(w[19], w[27], w[4], pars->GC_11, amp[24]); - FFV1_0(w[20], w[23], w[4], pars->GC_11, amp[25]); - FFV1_0(w[19], w[29], w[4], pars->GC_11, amp[26]); - FFV1_0(w[21], w[23], w[4], pars->GC_11, amp[27]); - FFV1_0(w[3], w[27], w[31], pars->GC_11, amp[28]); - FFV1_0(w[9], w[23], w[31], pars->GC_11, amp[29]); - FFV1_0(w[3], w[29], w[31], pars->GC_11, amp[30]); - FFV1_0(w[13], w[23], w[31], pars->GC_11, amp[31]); - FFV1_0(w[9], w[33], w[5], pars->GC_11, amp[32]); - FFV1_0(w[9], w[34], w[4], pars->GC_11, amp[33]); - FFV1_0(w[13], w[33], w[5], pars->GC_11, amp[34]); - FFV1_0(w[13], w[34], w[4], pars->GC_11, amp[35]); - FFV1_0(w[26], w[35], w[5], pars->GC_11, amp[36]); - FFV1_0(w[28], w[32], w[5], pars->GC_11, amp[37]); - FFV1_0(w[26], w[36], w[5], pars->GC_11, amp[38]); - FFV1_0(w[30], w[32], w[5], pars->GC_11, amp[39]); - FFV1_0(w[14], w[35], w[4], pars->GC_11, amp[40]); - FFV1_0(w[16], w[32], w[4], pars->GC_11, amp[41]); - FFV1_0(w[14], w[36], w[4], pars->GC_11, amp[42]); - FFV1_0(w[18], w[32], w[4], pars->GC_11, amp[43]); - FFV1_0(w[3], w[35], w[37], pars->GC_11, amp[44]); - FFV1_0(w[9], w[32], w[37], pars->GC_11, amp[45]); - FFV1_0(w[3], w[36], w[37], pars->GC_11, amp[46]); - FFV1_0(w[13], w[32], w[37], pars->GC_11, amp[47]); - FFV1_0(w[39], w[38], w[6], pars->GC_11, amp[48]); - FFV1_0(w[40], w[38], w[5], pars->GC_11, amp[49]); - FFV1_0(w[39], w[41], w[6], pars->GC_11, amp[50]); - FFV1_0(w[40], w[41], w[5], pars->GC_11, amp[51]); - FFV1_0(w[26], w[38], w[22], pars->GC_11, amp[52]); - FFV1_0(w[28], w[2], w[22], pars->GC_11, amp[53]); - FFV1_0(w[26], w[41], w[22], pars->GC_11, amp[54]); - FFV1_0(w[30], w[2], w[22], pars->GC_11, amp[55]); - FFV1_0(w[42], w[38], w[6], pars->GC_11, amp[56]); - FFV1_0(w[43], w[38], w[4], pars->GC_11, amp[57]); - FFV1_0(w[42], w[41], w[6], pars->GC_11, amp[58]); - FFV1_0(w[43], w[41], w[4], pars->GC_11, amp[59]); - FFV1_0(w[14], w[38], w[31], pars->GC_11, amp[60]); - FFV1_0(w[16], w[2], w[31], pars->GC_11, amp[61]); - FFV1_0(w[14], w[41], w[31], pars->GC_11, amp[62]); - FFV1_0(w[18], w[2], w[31], pars->GC_11, amp[63]); - FFV1_0(w[44], w[38], w[5], pars->GC_11, amp[64]); - FFV1_0(w[45], w[38], w[4], pars->GC_11, amp[65]); - FFV1_0(w[44], w[41], w[5], pars->GC_11, amp[66]); - FFV1_0(w[45], w[41], w[4], pars->GC_11, amp[67]); - FFV1_0(w[19], w[38], w[37], pars->GC_11, amp[68]); - FFV1_0(w[20], w[2], w[37], pars->GC_11, amp[69]); - FFV1_0(w[19], w[41], w[37], pars->GC_11, amp[70]); - FFV1_0(w[21], w[2], w[37], pars->GC_11, amp[71]); - FFV1_0(w[46], w[38], w[6], pars->GC_11, amp[72]); - FFV1_0(w[3], w[38], w[47], pars->GC_11, amp[73]); - FFV1_0(w[9], w[48], w[6], pars->GC_11, amp[74]); - FFV1_0(w[9], w[2], w[47], pars->GC_11, amp[75]); - FFV1_0(w[46], w[41], w[6], pars->GC_11, amp[76]); - FFV1_0(w[3], w[41], w[47], pars->GC_11, amp[77]); - FFV1_0(w[13], w[48], w[6], pars->GC_11, amp[78]); - FFV1_0(w[13], w[2], w[47], pars->GC_11, amp[79]); - FFV1_0(w[49], w[38], w[5], pars->GC_11, amp[80]); - FFV1_0(w[3], w[38], w[50], pars->GC_11, amp[81]); - FFV1_0(w[9], w[51], w[5], pars->GC_11, amp[82]); - FFV1_0(w[9], w[2], w[50], pars->GC_11, amp[83]); - FFV1_0(w[49], w[41], w[5], pars->GC_11, amp[84]); - FFV1_0(w[3], w[41], w[50], pars->GC_11, amp[85]); - FFV1_0(w[13], w[51], w[5], pars->GC_11, amp[86]); - FFV1_0(w[13], w[2], w[50], pars->GC_11, amp[87]); - FFV1_0(w[52], w[38], w[4], pars->GC_11, amp[88]); - FFV1_0(w[3], w[38], w[53], pars->GC_11, amp[89]); - FFV1_0(w[9], w[54], w[4], pars->GC_11, amp[90]); - FFV1_0(w[9], w[2], w[53], pars->GC_11, amp[91]); - FFV1_0(w[52], w[41], w[4], pars->GC_11, amp[92]); - FFV1_0(w[3], w[41], w[53], pars->GC_11, amp[93]); - FFV1_0(w[13], w[54], w[4], pars->GC_11, amp[94]); - FFV1_0(w[13], w[2], w[53], pars->GC_11, amp[95]); - FFV1_0(w[3], w[38], w[55], pars->GC_11, amp[96]); - FFV1_0(w[3], w[38], w[56], pars->GC_11, amp[97]); - FFV1_0(w[3], w[38], w[57], pars->GC_11, amp[98]); - FFV1_0(w[9], w[2], w[55], pars->GC_11, amp[99]); - FFV1_0(w[9], w[2], w[56], pars->GC_11, amp[100]); - FFV1_0(w[9], w[2], w[57], pars->GC_11, amp[101]); - FFV1_0(w[3], w[41], w[55], pars->GC_11, amp[102]); - FFV1_0(w[3], w[41], w[56], pars->GC_11, amp[103]); - FFV1_0(w[3], w[41], w[57], pars->GC_11, amp[104]); - FFV1_0(w[13], w[2], w[55], pars->GC_11, amp[105]); - FFV1_0(w[13], w[2], w[56], pars->GC_11, amp[106]); - FFV1_0(w[13], w[2], w[57], pars->GC_11, amp[107]); - -} -double eeuuggg::matrix_1_epem_uuxggg() -{ - int i;//, j; - // Local variables -// const int ngraphs = 108; - const int ncolor = 6; - std::complex<double> jamp[ncolor]; - // The color matrix; -// static const double denom[ncolor] = {9, 9, 9, 9, 9, 9}; -// static const double cf[ncolor][ncolor] = {{64, -8, -8, 1, 1, 10}, {-8, 64, 1, -// 10, -8, 1}, {-8, 1, 64, -8, 10, 1}, {1, 10, -8, 64, 1, -8}, {1, -8, 10, -// 1, 64, -8}, {10, 1, 1, -8, -8, 64}}; - - // Calculate color flows - jamp[0] = +amp[0] + amp[2] + amp[8] + amp[9] + amp[10] + amp[11] - - std::complex<double> (0, 1) * amp[12] - std::complex<double> (0, 1) * - amp[13] - std::complex<double> (0, 1) * amp[14] - std::complex<double> - (0, 1) * amp[15] + amp[65] + amp[67] - std::complex<double> (0, 1) * - amp[68] - std::complex<double> (0, 1) * amp[69] - std::complex<double> - (0, 1) * amp[70] - std::complex<double> (0, 1) * amp[71] - amp[73] - - std::complex<double> (0, 1) * amp[74] - amp[75] - amp[77] - - std::complex<double> (0, 1) * amp[78] - amp[79] - std::complex<double> - (0, 1) * amp[88] - amp[89] - amp[91] - std::complex<double> (0, 1) * - amp[92] - amp[93] - amp[95] + amp[98] - amp[96] + amp[101] - amp[99] + - amp[104] - amp[102] + amp[107] - amp[105]; - jamp[1] = +amp[1] + amp[3] + amp[4] + amp[5] + amp[6] + amp[7] + - std::complex<double> (0, 1) * amp[12] + std::complex<double> (0, 1) * - amp[13] + std::complex<double> (0, 1) * amp[14] + std::complex<double> - (0, 1) * amp[15] + amp[57] + amp[59] - std::complex<double> (0, 1) * - amp[60] - std::complex<double> (0, 1) * amp[61] - std::complex<double> - (0, 1) * amp[62] - std::complex<double> (0, 1) * amp[63] - amp[81] - - std::complex<double> (0, 1) * amp[82] - amp[83] - amp[85] - - std::complex<double> (0, 1) * amp[86] - amp[87] + std::complex<double> - (0, 1) * amp[88] + amp[89] + amp[91] + std::complex<double> (0, 1) * - amp[92] + amp[93] + amp[95] + amp[96] + amp[97] + amp[99] + amp[100] + - amp[102] + amp[103] + amp[105] + amp[106]; - jamp[2] = +amp[16] + amp[18] + amp[24] + amp[25] + amp[26] + amp[27] - - std::complex<double> (0, 1) * amp[28] - std::complex<double> (0, 1) * - amp[29] - std::complex<double> (0, 1) * amp[30] - std::complex<double> - (0, 1) * amp[31] + amp[64] + amp[66] + std::complex<double> (0, 1) * - amp[68] + std::complex<double> (0, 1) * amp[69] + std::complex<double> - (0, 1) * amp[70] + std::complex<double> (0, 1) * amp[71] + amp[73] + - std::complex<double> (0, 1) * amp[74] + amp[75] + amp[77] + - std::complex<double> (0, 1) * amp[78] + amp[79] - std::complex<double> - (0, 1) * amp[80] + amp[81] + amp[83] - std::complex<double> (0, 1) * - amp[84] + amp[85] + amp[87] - amp[98] - amp[97] - amp[101] - amp[100] - - amp[104] - amp[103] - amp[107] - amp[106]; - jamp[3] = +amp[17] + amp[19] + amp[20] + amp[21] + amp[22] + amp[23] + - std::complex<double> (0, 1) * amp[28] + std::complex<double> (0, 1) * - amp[29] + std::complex<double> (0, 1) * amp[30] + std::complex<double> - (0, 1) * amp[31] + amp[49] + amp[51] - std::complex<double> (0, 1) * - amp[52] - std::complex<double> (0, 1) * amp[53] - std::complex<double> - (0, 1) * amp[54] - std::complex<double> (0, 1) * amp[55] + - std::complex<double> (0, 1) * amp[80] - amp[81] - amp[83] + - std::complex<double> (0, 1) * amp[84] - amp[85] - amp[87] + amp[89] - - std::complex<double> (0, 1) * amp[90] + amp[91] + amp[93] - - std::complex<double> (0, 1) * amp[94] + amp[95] + amp[96] + amp[97] + - amp[99] + amp[100] + amp[102] + amp[103] + amp[105] + amp[106]; - jamp[4] = +amp[32] + amp[34] + amp[40] + amp[41] + amp[42] + amp[43] - - std::complex<double> (0, 1) * amp[44] - std::complex<double> (0, 1) * - amp[45] - std::complex<double> (0, 1) * amp[46] - std::complex<double> - (0, 1) * amp[47] + amp[56] + amp[58] + std::complex<double> (0, 1) * - amp[60] + std::complex<double> (0, 1) * amp[61] + std::complex<double> - (0, 1) * amp[62] + std::complex<double> (0, 1) * amp[63] - - std::complex<double> (0, 1) * amp[72] + amp[73] + amp[75] - - std::complex<double> (0, 1) * amp[76] + amp[77] + amp[79] + amp[81] + - std::complex<double> (0, 1) * amp[82] + amp[83] + amp[85] + - std::complex<double> (0, 1) * amp[86] + amp[87] - amp[98] - amp[97] - - amp[101] - amp[100] - amp[104] - amp[103] - amp[107] - amp[106]; - jamp[5] = +amp[33] + amp[35] + amp[36] + amp[37] + amp[38] + amp[39] + - std::complex<double> (0, 1) * amp[44] + std::complex<double> (0, 1) * - amp[45] + std::complex<double> (0, 1) * amp[46] + std::complex<double> - (0, 1) * amp[47] + amp[48] + amp[50] + std::complex<double> (0, 1) * - amp[52] + std::complex<double> (0, 1) * amp[53] + std::complex<double> - (0, 1) * amp[54] + std::complex<double> (0, 1) * amp[55] + - std::complex<double> (0, 1) * amp[72] - amp[73] - amp[75] + - std::complex<double> (0, 1) * amp[76] - amp[77] - amp[79] - amp[89] + - std::complex<double> (0, 1) * amp[90] - amp[91] - amp[93] + - std::complex<double> (0, 1) * amp[94] - amp[95] + amp[98] - amp[96] + - amp[101] - amp[99] + amp[104] - amp[102] + amp[107] - amp[105]; - - - - // Store the leading color flows for choice of color - for(i = 0; i < ncolor; i++ ) - jamp2[0][i] += real(jamp[i] * conj(jamp[i])); - - return -1.; -} - - -double eeuuggg::get_jamp2(int i) -{ - return jamp2[0][i]; -} - -int eeuuggg::colorstring(int i, int j) -{ - static const double res[6][6] = { - {5, 6, 7, 3, 4, 0}, - {5, 7, 6, 3, 4, 0}, - {6, 5, 7, 3, 4, 0}, - {6, 7, 5, 3, 4, 0}, - {7, 5, 6, 3, 4, 0}, - {7, 6, 5, 3, 4, 0}}; - return res[i][j]; -} - - -int eeuuggg::NCol() -{ - const int ncolor = 6; - return ncolor; -} - - - - - diff --git a/Shower/Dipole/Colorea/eeuuggg.h b/Shower/Dipole/Colorea/eeuuggg.h deleted file mode 100644 --- a/Shower/Dipole/Colorea/eeuuggg.h +++ /dev/null @@ -1,52 +0,0 @@ - //========================================================================== - // This file has been automatically generated for C++ Standalone by - // MadGraph5_aMC@NLO v. 2.5.4, 2017-03-28 - // By the MadGraph5_aMC@NLO Development Team - // Visit launchpad.net/madgraph5 and amcatnlo.web.cern.ch - //========================================================================== - // and was then modified by J. Bellm. -#ifndef MG5_Sigma_sm_epem_uuxggg_H -#define MG5_Sigma_sm_epem_uuxggg_H -#include <complex> -#include <vector> -#include "Parameters_sm.h" -using namespace std; -class eeuuggg -{ - public: - eeuuggg() { - initProc("param_card.dat"); - } - // Retrun the prefered gluon order - vector<int> producePermutation(double r,vector < double * > & momenta); - void setMass(int i,double M){mME[i]=M;} - private: - ///////// Process Dependent - static const int ninitial = 2; - static const int nexternal = 7; - static const int nprocesses = 1; - static const int nwavefuncs = 58; - static const int namplitudes = 108; - std::complex<double> w[nwavefuncs][18]; - double matrix_1_epem_uuxggg(); - ///////// Generic - double matrix_element[nprocesses]; - std::complex<double> amp[namplitudes]; - double * jamp2[nprocesses]; - Parameters_sm * pars; - vector<double> mME; - vector < double * > p; - int id1, id2; - void initProc(string param_card_name); - void sigmaKin(); - const vector<double> & getMasses() const {return mME;} - vector < double * > getMomenta(){return p;} - void setMomenta(vector < double * > & momenta){p = momenta;} - void setInitial(int inid1, int inid2){id1 = inid1; id2 = inid2;} - void calculate_wavefunctions(const int perm[], const int hel[]); - // New function - double get_jamp2(int i); - int colorstring(int i, int j); - int NCol(); -}; -#endif // MG5_Sigma_sm_epem_uuxggg_H diff --git a/Shower/Dipole/Colorea/eeuugggg.cc b/Shower/Dipole/Colorea/eeuugggg.cc deleted file mode 100644 --- a/Shower/Dipole/Colorea/eeuugggg.cc +++ /dev/null @@ -1,3119 +0,0 @@ -//========================================================================== -// This file has been automatically generated for C++ Standalone by -// MadGraph5_aMC@NLO v. 2.5.4, 2017-03-28 -// By the MadGraph5_aMC@NLO Development Team -// Visit launchpad.net/madgraph5 and amcatnlo.web.cern.ch -//========================================================================== -// and was then modified by J. Bellm. -#include "eeuugggg.h" -#include "HelAmps_sm.h" -#include <iostream> - -using namespace MG5_sm_COLOREA; - -//========================================================================== -// Class member functions for calculating the matrix elements for -// Process: e+ e- > u u~ g g g g WEIGHTED<=8 @1 - -//-------------------------------------------------------------------------- -// Initialize process. - -vector<int> eeuugggg::producePermutation(double r,vector < double * > & momenta){ - static bool initialized=false; - if (!initialized){ - initProc("param_card.dat"); - initialized=true; - } - setMomenta(momenta); - sigmaKin(); - - - static const int res[24][8] = { - {5, 6, 7, 8, 3, 4, 0, 0}, - {5, 6, 8, 7, 3, 4, 0, 0}, - {5, 7, 6, 8, 3, 4, 0, 0}, - {5, 7, 8, 6, 3, 4, 0, 0}, - {5, 8, 6, 7, 3, 4, 0, 0}, - {5, 8, 7, 6, 3, 4, 0, 0}, - {6, 5, 7, 8, 3, 4, 0, 0}, - {6, 5, 8, 7, 3, 4, 0, 0}, - {6, 7, 5, 8, 3, 4, 0, 0}, - {6, 7, 8, 5, 3, 4, 0, 0}, - {6, 8, 5, 7, 3, 4, 0, 0}, - {6, 8, 7, 5, 3, 4, 0, 0}, - {7, 5, 6, 8, 3, 4, 0, 0}, - {7, 5, 8, 6, 3, 4, 0, 0}, - {7, 6, 5, 8, 3, 4, 0, 0}, - {7, 6, 8, 5, 3, 4, 0, 0}, - {7, 8, 5, 6, 3, 4, 0, 0}, - {7, 8, 6, 5, 3, 4, 0, 0}, - {8, 5, 6, 7, 3, 4, 0, 0}, - {8, 5, 7, 6, 3, 4, 0, 0}, - {8, 6, 5, 7, 3, 4, 0, 0}, - {8, 6, 7, 5, 3, 4, 0, 0}, - {8, 7, 5, 6, 3, 4, 0, 0}, - {8, 7, 6, 5, 3, 4, 0, 0}}; - - double jampsum=0.; - for( int i=0;i<24;i++) jampsum+=jamp2[0][i]; - double cur=0.; - for(int i=0;i<24;i++){ - cur+=jamp2[0][i]; - if( cur/jampsum > r )return std::vector<int>(res[i], res[i] + sizeof res[i] / sizeof res[i][0]); - } - //std::cout<<"producePermutation: Upps.. Something went wrong!!"; - return std::vector<int>(); -} - - - -void eeuugggg::initProc(string param_card_name) -{ - cout<<"\nColorea: Init process eeuugggg for rearrangement (arXiv:1801.06113)."; - // Instantiate the model class and set parameters that stay fixed during run - pars = Parameters_sm::getInstance(); - SLHAReader_COLOREA slha(param_card_name); - pars->setIndependentParameters(slha); - pars->setIndependentCouplings(); -// pars->printIndependentParameters(); -// pars->printIndependentCouplings(); - // Set external particle masses for this matrix element - mME.push_back(pars->ZERO); - mME.push_back(pars->ZERO); - mME.push_back(pars->ZERO); - mME.push_back(pars->ZERO); - mME.push_back(pars->ZERO); - mME.push_back(pars->ZERO); - mME.push_back(pars->ZERO); - mME.push_back(pars->ZERO); - jamp2[0] = new double[24]; -} - -//-------------------------------------------------------------------------- -// Evaluate |M|^2, part independent of incoming flavour. - -void eeuugggg::sigmaKin() -{ - // Set the parameters which change event by event - pars->setDependentParameters(); - pars->setDependentCouplings(); - static bool firsttime = true; - if (firsttime) - { -// pars->printDependentParameters(); -// pars->printDependentCouplings(); - firsttime = false; - } - - // Reset color flows - for(int i = 0; i < 24; i++ ) - jamp2[0][i] = 0.; - - // Local variables and constants - const int ncomb = 256; - static bool goodhel[ncomb] = {false}; - static int ntry = 0, sum_hel = 0, ngood = 0; - static int igood[ncomb]; - static int jhel; -// std::complex<double> * * wfs; - double t[nprocesses]; - // Helicities for the process - static const int helicities[ncomb][nexternal] = {{-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, 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, - -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, -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}, {-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, 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, -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, -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}, {-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, -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, -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, 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}, {-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, -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, -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, 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}, {-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, 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, -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, -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}, {-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, 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, -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, -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}, {-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, -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, -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, 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}, {-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, -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, -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, 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}, {-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, 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, 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, -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}, {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, - 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, 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, -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}, {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, -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, 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, 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}, - {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, -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, 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, 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}, {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, 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, 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, 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}, {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, 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, 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, -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}, {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, -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, 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, -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}, {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, -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, 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, 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}, {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, 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, -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, 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}, {1, 1, 1, 1, 1, 1, 1, 1}}; - // Denominators: spins, colors and identical particles - const int denominators[nprocesses] = {96}; - - ntry = ntry + 1; - - // Reset the matrix elements - for(int i = 0; i < nprocesses; i++ ) - { - matrix_element[i] = 0.; - } - // Define permutation - int perm[nexternal]; - for(int i = 0; i < nexternal; i++ ) - { - perm[i] = i; - } - - if (sum_hel == 0 || ntry < 10) - { - // Calculate the matrix element for all helicities - for(int ihel = 0; ihel < ncomb; ihel++ ) - { - if (goodhel[ihel] || ntry < 2) - { - calculate_wavefunctions(perm, helicities[ihel]); - t[0] = matrix_1_epem_uuxgggg(); - - double tsum = 0; - for(int iproc = 0; iproc < nprocesses; iproc++ ) - { - matrix_element[iproc] += t[iproc]; - tsum += t[iproc]; - } - // Store which helicities give non-zero result - if (tsum != 0. && !goodhel[ihel]) - { - goodhel[ihel] = true; - ngood++; - igood[ngood] = ihel; - } - } - } - jhel = 0; - sum_hel = min(sum_hel, ngood); - } - else - { - // Only use the "good" helicities - for(int j = 0; j < sum_hel; j++ ) - { - jhel++; - if (jhel >= ngood) - jhel = 0; - double hwgt = double(ngood)/double(sum_hel); - int ihel = igood[jhel]; - calculate_wavefunctions(perm, helicities[ihel]); - t[0] = matrix_1_epem_uuxgggg(); - - for(int iproc = 0; iproc < nprocesses; iproc++ ) - { - matrix_element[iproc] += t[iproc] * hwgt; - } - } - } - - for (int i = 0; i < nprocesses; i++ ) - matrix_element[i] /= denominators[i]; - - - -} - - -//-------------------------------------------------------------------------- -// Evaluate |M|^2 for each subprocess - -void eeuugggg::calculate_wavefunctions(const int perm[], const int hel[]) -{ - - // Calculate all wavefunctions - oxxxxx(p[perm[0]], mME[0], hel[0], -1, w[0]); - ixxxxx(p[perm[1]], mME[1], hel[1], +1, w[1]); - oxxxxx(p[perm[2]], mME[2], hel[2], +1, w[2]); - ixxxxx(p[perm[3]], mME[3], hel[3], -1, w[3]); - vxxxxx(p[perm[4]], mME[4], hel[4], +1, w[4]); - vxxxxx(p[perm[5]], mME[5], hel[5], +1, w[5]); - vxxxxx(p[perm[6]], mME[6], hel[6], +1, w[6]); - vxxxxx(p[perm[7]], mME[7], hel[7], +1, w[7]); - FFV1P0_3(w[1], w[0], pars->GC_3, pars->ZERO, pars->ZERO, w[8]); - FFV1_1(w[2], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[9]); - FFV1_2(w[3], w[8], pars->GC_2, pars->ZERO, pars->ZERO, w[10]); - FFV1_1(w[9], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[11]); - FFV1_2(w[10], w[6], pars->GC_11, pars->ZERO, pars->ZERO, w[12]); - FFV1_2(w[10], w[7], pars->GC_11, pars->ZERO, pars->ZERO, w[13]); - FFV1_1(w[9], w[6], pars->GC_11, pars->ZERO, pars->ZERO, w[14]); - FFV1_2(w[10], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[15]); - FFV1_1(w[9], w[7], pars->GC_11, pars->ZERO, pars->ZERO, w[16]); - FFV2_4_3(w[1], w[0], pars->GC_50, pars->GC_59, pars->mdl_MZ, pars->mdl_WZ, - w[17]); - FFV2_5_2(w[3], w[17], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO, - w[18]); - FFV1_2(w[18], w[6], pars->GC_11, pars->ZERO, pars->ZERO, w[19]); - FFV1_2(w[18], w[7], pars->GC_11, pars->ZERO, pars->ZERO, w[20]); - FFV1_2(w[18], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[21]); - FFV1_2(w[3], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[22]); - FFV1_1(w[9], w[8], pars->GC_2, pars->ZERO, pars->ZERO, w[23]); - FFV1_2(w[22], w[6], pars->GC_11, pars->ZERO, pars->ZERO, w[24]); - FFV1_2(w[22], w[7], pars->GC_11, pars->ZERO, pars->ZERO, w[25]); - FFV1_2(w[22], w[8], pars->GC_2, pars->ZERO, pars->ZERO, w[26]); - FFV2_5_1(w[9], w[17], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO, - w[27]); - FFV2_5_2(w[22], w[17], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO, - w[28]); - VVV1P0_1(w[6], w[7], pars->GC_10, pars->ZERO, pars->ZERO, w[29]); - FFV1_2(w[3], w[6], pars->GC_11, pars->ZERO, pars->ZERO, w[30]); - FFV1_2(w[30], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[31]); - FFV1_2(w[30], w[7], pars->GC_11, pars->ZERO, pars->ZERO, w[32]); - FFV1_2(w[30], w[8], pars->GC_2, pars->ZERO, pars->ZERO, w[33]); - FFV2_5_2(w[30], w[17], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO, - w[34]); - VVV1P0_1(w[5], w[7], pars->GC_10, pars->ZERO, pars->ZERO, w[35]); - FFV1_2(w[3], w[7], pars->GC_11, pars->ZERO, pars->ZERO, w[36]); - FFV1_2(w[36], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[37]); - FFV1_2(w[36], w[6], pars->GC_11, pars->ZERO, pars->ZERO, w[38]); - FFV1_2(w[36], w[8], pars->GC_2, pars->ZERO, pars->ZERO, w[39]); - FFV2_5_2(w[36], w[17], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO, - w[40]); - VVV1P0_1(w[5], w[6], pars->GC_10, pars->ZERO, pars->ZERO, w[41]); - FFV1_2(w[3], w[41], pars->GC_11, pars->ZERO, pars->ZERO, w[42]); - VVV1P0_1(w[41], w[7], pars->GC_10, pars->ZERO, pars->ZERO, w[43]); - FFV1_1(w[9], w[41], pars->GC_11, pars->ZERO, pars->ZERO, w[44]); - FFV1_2(w[3], w[35], pars->GC_11, pars->ZERO, pars->ZERO, w[45]); - VVV1P0_1(w[35], w[6], pars->GC_10, pars->ZERO, pars->ZERO, w[46]); - FFV1_1(w[9], w[35], pars->GC_11, pars->ZERO, pars->ZERO, w[47]); - FFV1_2(w[3], w[29], pars->GC_11, pars->ZERO, pars->ZERO, w[48]); - VVV1P0_1(w[5], w[29], pars->GC_10, pars->ZERO, pars->ZERO, w[49]); - FFV1_1(w[9], w[29], pars->GC_11, pars->ZERO, pars->ZERO, w[50]); - VVVV1P0_1(w[5], w[6], w[7], pars->GC_12, pars->ZERO, pars->ZERO, w[51]); - VVVV3P0_1(w[5], w[6], w[7], pars->GC_12, pars->ZERO, pars->ZERO, w[52]); - VVVV4P0_1(w[5], w[6], w[7], pars->GC_12, pars->ZERO, pars->ZERO, w[53]); - FFV1_1(w[2], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[54]); - FFV1_1(w[54], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[55]); - FFV1_1(w[54], w[6], pars->GC_11, pars->ZERO, pars->ZERO, w[56]); - FFV1_2(w[10], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[57]); - FFV1_1(w[54], w[7], pars->GC_11, pars->ZERO, pars->ZERO, w[58]); - FFV1_2(w[18], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[59]); - FFV1_2(w[3], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[60]); - FFV1_1(w[54], w[8], pars->GC_2, pars->ZERO, pars->ZERO, w[61]); - FFV1_2(w[60], w[6], pars->GC_11, pars->ZERO, pars->ZERO, w[62]); - FFV1_2(w[60], w[7], pars->GC_11, pars->ZERO, pars->ZERO, w[63]); - FFV1_2(w[60], w[8], pars->GC_2, pars->ZERO, pars->ZERO, w[64]); - FFV2_5_1(w[54], w[17], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO, - w[65]); - FFV2_5_2(w[60], w[17], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO, - w[66]); - FFV1_2(w[30], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[67]); - VVV1P0_1(w[4], w[7], pars->GC_10, pars->ZERO, pars->ZERO, w[68]); - FFV1_2(w[36], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[69]); - VVV1P0_1(w[4], w[6], pars->GC_10, pars->ZERO, pars->ZERO, w[70]); - FFV1_2(w[3], w[70], pars->GC_11, pars->ZERO, pars->ZERO, w[71]); - VVV1P0_1(w[70], w[7], pars->GC_10, pars->ZERO, pars->ZERO, w[72]); - FFV1_1(w[54], w[70], pars->GC_11, pars->ZERO, pars->ZERO, w[73]); - FFV1_2(w[3], w[68], pars->GC_11, pars->ZERO, pars->ZERO, w[74]); - VVV1P0_1(w[68], w[6], pars->GC_10, pars->ZERO, pars->ZERO, w[75]); - FFV1_1(w[54], w[68], pars->GC_11, pars->ZERO, pars->ZERO, w[76]); - VVV1P0_1(w[4], w[29], pars->GC_10, pars->ZERO, pars->ZERO, w[77]); - FFV1_1(w[54], w[29], pars->GC_11, pars->ZERO, pars->ZERO, w[78]); - VVVV1P0_1(w[4], w[6], w[7], pars->GC_12, pars->ZERO, pars->ZERO, w[79]); - VVVV3P0_1(w[4], w[6], w[7], pars->GC_12, pars->ZERO, pars->ZERO, w[80]); - VVVV4P0_1(w[4], w[6], w[7], pars->GC_12, pars->ZERO, pars->ZERO, w[81]); - FFV1_1(w[2], w[6], pars->GC_11, pars->ZERO, pars->ZERO, w[82]); - FFV1_1(w[82], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[83]); - FFV1_1(w[82], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[84]); - FFV1_1(w[82], w[7], pars->GC_11, pars->ZERO, pars->ZERO, w[85]); - FFV1_1(w[82], w[8], pars->GC_2, pars->ZERO, pars->ZERO, w[86]); - FFV1_2(w[60], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[87]); - FFV2_5_1(w[82], w[17], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO, - w[88]); - FFV1_2(w[22], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[89]); - VVV1P0_1(w[4], w[5], pars->GC_10, pars->ZERO, pars->ZERO, w[90]); - FFV1_2(w[3], w[90], pars->GC_11, pars->ZERO, pars->ZERO, w[91]); - VVV1P0_1(w[90], w[7], pars->GC_10, pars->ZERO, pars->ZERO, w[92]); - FFV1_1(w[82], w[90], pars->GC_11, pars->ZERO, pars->ZERO, w[93]); - VVV1P0_1(w[68], w[5], pars->GC_10, pars->ZERO, pars->ZERO, w[94]); - FFV1_1(w[82], w[68], pars->GC_11, pars->ZERO, pars->ZERO, w[95]); - VVV1P0_1(w[4], w[35], pars->GC_10, pars->ZERO, pars->ZERO, w[96]); - FFV1_1(w[82], w[35], pars->GC_11, pars->ZERO, pars->ZERO, w[97]); - VVVV1P0_1(w[4], w[5], w[7], pars->GC_12, pars->ZERO, pars->ZERO, w[98]); - VVVV3P0_1(w[4], w[5], w[7], pars->GC_12, pars->ZERO, pars->ZERO, w[99]); - VVVV4P0_1(w[4], w[5], w[7], pars->GC_12, pars->ZERO, pars->ZERO, w[100]); - FFV1_1(w[2], w[7], pars->GC_11, pars->ZERO, pars->ZERO, w[101]); - FFV1_1(w[101], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[102]); - FFV1_1(w[101], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[103]); - FFV1_1(w[101], w[6], pars->GC_11, pars->ZERO, pars->ZERO, w[104]); - FFV1_1(w[101], w[8], pars->GC_2, pars->ZERO, pars->ZERO, w[105]); - FFV2_5_1(w[101], w[17], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO, - w[106]); - VVV1P0_1(w[90], w[6], pars->GC_10, pars->ZERO, pars->ZERO, w[107]); - FFV1_1(w[101], w[90], pars->GC_11, pars->ZERO, pars->ZERO, w[108]); - VVV1P0_1(w[70], w[5], pars->GC_10, pars->ZERO, pars->ZERO, w[109]); - FFV1_1(w[101], w[70], pars->GC_11, pars->ZERO, pars->ZERO, w[110]); - VVV1P0_1(w[4], w[41], pars->GC_10, pars->ZERO, pars->ZERO, w[111]); - FFV1_1(w[101], w[41], pars->GC_11, pars->ZERO, pars->ZERO, w[112]); - VVVV1P0_1(w[4], w[5], w[6], pars->GC_12, pars->ZERO, pars->ZERO, w[113]); - VVVV3P0_1(w[4], w[5], w[6], pars->GC_12, pars->ZERO, pars->ZERO, w[114]); - VVVV4P0_1(w[4], w[5], w[6], pars->GC_12, pars->ZERO, pars->ZERO, w[115]); - FFV1_1(w[2], w[8], pars->GC_2, pars->ZERO, pars->ZERO, w[116]); - FFV1_1(w[116], w[6], pars->GC_11, pars->ZERO, pars->ZERO, w[117]); - FFV1_1(w[116], w[7], pars->GC_11, pars->ZERO, pars->ZERO, w[118]); - FFV1_1(w[116], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[119]); - FFV2_5_1(w[2], w[17], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO, - w[120]); - FFV1_1(w[120], w[6], pars->GC_11, pars->ZERO, pars->ZERO, w[121]); - FFV1_1(w[120], w[7], pars->GC_11, pars->ZERO, pars->ZERO, w[122]); - FFV1_1(w[120], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[123]); - FFV1_2(w[60], w[41], pars->GC_11, pars->ZERO, pars->ZERO, w[124]); - FFV1_1(w[2], w[41], pars->GC_11, pars->ZERO, pars->ZERO, w[125]); - FFV1_2(w[60], w[35], pars->GC_11, pars->ZERO, pars->ZERO, w[126]); - FFV1_1(w[2], w[35], pars->GC_11, pars->ZERO, pars->ZERO, w[127]); - FFV1_2(w[60], w[29], pars->GC_11, pars->ZERO, pars->ZERO, w[128]); - FFV1_1(w[2], w[29], pars->GC_11, pars->ZERO, pars->ZERO, w[129]); - FFV1_1(w[116], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[130]); - FFV1_1(w[120], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[131]); - FFV1_2(w[22], w[70], pars->GC_11, pars->ZERO, pars->ZERO, w[132]); - FFV1_1(w[2], w[70], pars->GC_11, pars->ZERO, pars->ZERO, w[133]); - FFV1_2(w[22], w[68], pars->GC_11, pars->ZERO, pars->ZERO, w[134]); - FFV1_1(w[2], w[68], pars->GC_11, pars->ZERO, pars->ZERO, w[135]); - FFV1_2(w[22], w[29], pars->GC_11, pars->ZERO, pars->ZERO, w[136]); - FFV1_2(w[30], w[90], pars->GC_11, pars->ZERO, pars->ZERO, w[137]); - FFV1_1(w[2], w[90], pars->GC_11, pars->ZERO, pars->ZERO, w[138]); - FFV1_2(w[30], w[68], pars->GC_11, pars->ZERO, pars->ZERO, w[139]); - FFV1_2(w[30], w[35], pars->GC_11, pars->ZERO, pars->ZERO, w[140]); - FFV1_2(w[36], w[90], pars->GC_11, pars->ZERO, pars->ZERO, w[141]); - FFV1_2(w[36], w[70], pars->GC_11, pars->ZERO, pars->ZERO, w[142]); - FFV1_2(w[36], w[41], pars->GC_11, pars->ZERO, pars->ZERO, w[143]); - FFV1P0_3(w[3], w[116], pars->GC_11, pars->ZERO, pars->ZERO, w[144]); - VVVV1P0_1(w[90], w[6], w[7], pars->GC_12, pars->ZERO, pars->ZERO, w[145]); - VVVV3P0_1(w[90], w[6], w[7], pars->GC_12, pars->ZERO, pars->ZERO, w[146]); - VVVV4P0_1(w[90], w[6], w[7], pars->GC_12, pars->ZERO, pars->ZERO, w[147]); - FFV1P0_3(w[10], w[2], pars->GC_11, pars->ZERO, pars->ZERO, w[148]); - FFV1P0_3(w[3], w[120], pars->GC_11, pars->ZERO, pars->ZERO, w[149]); - FFV1P0_3(w[18], w[2], pars->GC_11, pars->ZERO, pars->ZERO, w[150]); - VVV1P0_1(w[90], w[29], pars->GC_10, pars->ZERO, pars->ZERO, w[151]); - VVVV1P0_1(w[70], w[5], w[7], pars->GC_12, pars->ZERO, pars->ZERO, w[152]); - VVVV3P0_1(w[70], w[5], w[7], pars->GC_12, pars->ZERO, pars->ZERO, w[153]); - VVVV4P0_1(w[70], w[5], w[7], pars->GC_12, pars->ZERO, pars->ZERO, w[154]); - VVV1P0_1(w[70], w[35], pars->GC_10, pars->ZERO, pars->ZERO, w[155]); - VVVV1P0_1(w[68], w[5], w[6], pars->GC_12, pars->ZERO, pars->ZERO, w[156]); - VVVV3P0_1(w[68], w[5], w[6], pars->GC_12, pars->ZERO, pars->ZERO, w[157]); - VVVV4P0_1(w[68], w[5], w[6], pars->GC_12, pars->ZERO, pars->ZERO, w[158]); - VVV1P0_1(w[68], w[41], pars->GC_10, pars->ZERO, pars->ZERO, w[159]); - VVVV1P0_1(w[4], w[41], w[7], pars->GC_12, pars->ZERO, pars->ZERO, w[160]); - VVVV3P0_1(w[4], w[41], w[7], pars->GC_12, pars->ZERO, pars->ZERO, w[161]); - VVVV4P0_1(w[4], w[41], w[7], pars->GC_12, pars->ZERO, pars->ZERO, w[162]); - VVVV1P0_1(w[4], w[35], w[6], pars->GC_12, pars->ZERO, pars->ZERO, w[163]); - VVVV3P0_1(w[4], w[35], w[6], pars->GC_12, pars->ZERO, pars->ZERO, w[164]); - VVVV4P0_1(w[4], w[35], w[6], pars->GC_12, pars->ZERO, pars->ZERO, w[165]); - VVVV1P0_1(w[4], w[5], w[29], pars->GC_12, pars->ZERO, pars->ZERO, w[166]); - VVVV3P0_1(w[4], w[5], w[29], pars->GC_12, pars->ZERO, pars->ZERO, w[167]); - VVVV4P0_1(w[4], w[5], w[29], pars->GC_12, pars->ZERO, pars->ZERO, w[168]); - FFV1_2(w[3], w[113], pars->GC_11, pars->ZERO, pars->ZERO, w[169]); - FFV1_2(w[3], w[114], pars->GC_11, pars->ZERO, pars->ZERO, w[170]); - FFV1_2(w[3], w[115], pars->GC_11, pars->ZERO, pars->ZERO, w[171]); - VVV1P0_1(w[113], w[7], pars->GC_10, pars->ZERO, pars->ZERO, w[172]); - VVV1P0_1(w[114], w[7], pars->GC_10, pars->ZERO, pars->ZERO, w[173]); - VVV1P0_1(w[115], w[7], pars->GC_10, pars->ZERO, pars->ZERO, w[174]); - FFV1_1(w[2], w[113], pars->GC_11, pars->ZERO, pars->ZERO, w[175]); - FFV1_1(w[2], w[114], pars->GC_11, pars->ZERO, pars->ZERO, w[176]); - FFV1_1(w[2], w[115], pars->GC_11, pars->ZERO, pars->ZERO, w[177]); - FFV1_2(w[3], w[98], pars->GC_11, pars->ZERO, pars->ZERO, w[178]); - FFV1_2(w[3], w[99], pars->GC_11, pars->ZERO, pars->ZERO, w[179]); - FFV1_2(w[3], w[100], pars->GC_11, pars->ZERO, pars->ZERO, w[180]); - VVV1P0_1(w[98], w[6], pars->GC_10, pars->ZERO, pars->ZERO, w[181]); - VVV1P0_1(w[99], w[6], pars->GC_10, pars->ZERO, pars->ZERO, w[182]); - VVV1P0_1(w[100], w[6], pars->GC_10, pars->ZERO, pars->ZERO, w[183]); - FFV1_1(w[2], w[98], pars->GC_11, pars->ZERO, pars->ZERO, w[184]); - FFV1_1(w[2], w[99], pars->GC_11, pars->ZERO, pars->ZERO, w[185]); - FFV1_1(w[2], w[100], pars->GC_11, pars->ZERO, pars->ZERO, w[186]); - FFV1_2(w[3], w[79], pars->GC_11, pars->ZERO, pars->ZERO, w[187]); - FFV1_2(w[3], w[80], pars->GC_11, pars->ZERO, pars->ZERO, w[188]); - FFV1_2(w[3], w[81], pars->GC_11, pars->ZERO, pars->ZERO, w[189]); - VVV1P0_1(w[79], w[5], pars->GC_10, pars->ZERO, pars->ZERO, w[190]); - VVV1P0_1(w[80], w[5], pars->GC_10, pars->ZERO, pars->ZERO, w[191]); - VVV1P0_1(w[81], w[5], pars->GC_10, pars->ZERO, pars->ZERO, w[192]); - FFV1_1(w[2], w[79], pars->GC_11, pars->ZERO, pars->ZERO, w[193]); - FFV1_1(w[2], w[80], pars->GC_11, pars->ZERO, pars->ZERO, w[194]); - FFV1_1(w[2], w[81], pars->GC_11, pars->ZERO, pars->ZERO, w[195]); - FFV1_2(w[3], w[51], pars->GC_11, pars->ZERO, pars->ZERO, w[196]); - FFV1_2(w[3], w[52], pars->GC_11, pars->ZERO, pars->ZERO, w[197]); - FFV1_2(w[3], w[53], pars->GC_11, pars->ZERO, pars->ZERO, w[198]); - VVV1P0_1(w[4], w[51], pars->GC_10, pars->ZERO, pars->ZERO, w[199]); - VVV1P0_1(w[4], w[52], pars->GC_10, pars->ZERO, pars->ZERO, w[200]); - VVV1P0_1(w[4], w[53], pars->GC_10, pars->ZERO, pars->ZERO, w[201]); - FFV1_1(w[2], w[51], pars->GC_11, pars->ZERO, pars->ZERO, w[202]); - FFV1_1(w[2], w[52], pars->GC_11, pars->ZERO, pars->ZERO, w[203]); - FFV1_1(w[2], w[53], pars->GC_11, pars->ZERO, pars->ZERO, w[204]); - - // Calculate all amplitudes - // Amplitude(s) for diagram number 0 - FFV1_0(w[12], w[11], w[7], pars->GC_11, amp[0]); - FFV1_0(w[13], w[11], w[6], pars->GC_11, amp[1]); - FFV1_0(w[15], w[14], w[7], pars->GC_11, amp[2]); - FFV1_0(w[13], w[14], w[5], pars->GC_11, amp[3]); - FFV1_0(w[15], w[16], w[6], pars->GC_11, amp[4]); - FFV1_0(w[12], w[16], w[5], pars->GC_11, amp[5]); - FFV1_0(w[19], w[11], w[7], pars->GC_11, amp[6]); - FFV1_0(w[20], w[11], w[6], pars->GC_11, amp[7]); - FFV1_0(w[21], w[14], w[7], pars->GC_11, amp[8]); - FFV1_0(w[20], w[14], w[5], pars->GC_11, amp[9]); - FFV1_0(w[21], w[16], w[6], pars->GC_11, amp[10]); - FFV1_0(w[19], w[16], w[5], pars->GC_11, amp[11]); - FFV1_0(w[24], w[23], w[7], pars->GC_11, amp[12]); - FFV1_0(w[25], w[23], w[6], pars->GC_11, amp[13]); - FFV1_0(w[26], w[14], w[7], pars->GC_11, amp[14]); - FFV1_0(w[26], w[16], w[6], pars->GC_11, amp[15]); - FFV1_0(w[25], w[14], w[8], pars->GC_2, amp[16]); - FFV1_0(w[24], w[16], w[8], pars->GC_2, amp[17]); - FFV1_0(w[24], w[27], w[7], pars->GC_11, amp[18]); - FFV1_0(w[25], w[27], w[6], pars->GC_11, amp[19]); - FFV1_0(w[28], w[14], w[7], pars->GC_11, amp[20]); - FFV1_0(w[28], w[16], w[6], pars->GC_11, amp[21]); - FFV2_5_0(w[25], w[14], w[17], pars->GC_51, pars->GC_58, amp[22]); - FFV2_5_0(w[24], w[16], w[17], pars->GC_51, pars->GC_58, amp[23]); - FFV1_0(w[22], w[23], w[29], pars->GC_11, amp[24]); - FFV1_0(w[26], w[9], w[29], pars->GC_11, amp[25]); - FFV1_0(w[22], w[27], w[29], pars->GC_11, amp[26]); - FFV1_0(w[28], w[9], w[29], pars->GC_11, amp[27]); - FFV1_0(w[31], w[23], w[7], pars->GC_11, amp[28]); - FFV1_0(w[32], w[23], w[5], pars->GC_11, amp[29]); - FFV1_0(w[33], w[11], w[7], pars->GC_11, amp[30]); - FFV1_0(w[33], w[16], w[5], pars->GC_11, amp[31]); - FFV1_0(w[32], w[11], w[8], pars->GC_2, amp[32]); - FFV1_0(w[31], w[16], w[8], pars->GC_2, amp[33]); - FFV1_0(w[31], w[27], w[7], pars->GC_11, amp[34]); - FFV1_0(w[32], w[27], w[5], pars->GC_11, amp[35]); - FFV1_0(w[34], w[11], w[7], pars->GC_11, amp[36]); - FFV1_0(w[34], w[16], w[5], pars->GC_11, amp[37]); - FFV2_5_0(w[32], w[11], w[17], pars->GC_51, pars->GC_58, amp[38]); - FFV2_5_0(w[31], w[16], w[17], pars->GC_51, pars->GC_58, amp[39]); - FFV1_0(w[30], w[23], w[35], pars->GC_11, amp[40]); - FFV1_0(w[33], w[9], w[35], pars->GC_11, amp[41]); - FFV1_0(w[30], w[27], w[35], pars->GC_11, amp[42]); - FFV1_0(w[34], w[9], w[35], pars->GC_11, amp[43]); - FFV1_0(w[37], w[23], w[6], pars->GC_11, amp[44]); - FFV1_0(w[38], w[23], w[5], pars->GC_11, amp[45]); - FFV1_0(w[39], w[11], w[6], pars->GC_11, amp[46]); - FFV1_0(w[39], w[14], w[5], pars->GC_11, amp[47]); - FFV1_0(w[38], w[11], w[8], pars->GC_2, amp[48]); - FFV1_0(w[37], w[14], w[8], pars->GC_2, amp[49]); - FFV1_0(w[37], w[27], w[6], pars->GC_11, amp[50]); - FFV1_0(w[38], w[27], w[5], pars->GC_11, amp[51]); - FFV1_0(w[40], w[11], w[6], pars->GC_11, amp[52]); - FFV1_0(w[40], w[14], w[5], pars->GC_11, amp[53]); - FFV2_5_0(w[38], w[11], w[17], pars->GC_51, pars->GC_58, amp[54]); - FFV2_5_0(w[37], w[14], w[17], pars->GC_51, pars->GC_58, amp[55]); - FFV1_0(w[36], w[23], w[41], pars->GC_11, amp[56]); - FFV1_0(w[39], w[9], w[41], pars->GC_11, amp[57]); - FFV1_0(w[36], w[27], w[41], pars->GC_11, amp[58]); - FFV1_0(w[40], w[9], w[41], pars->GC_11, amp[59]); - FFV1_0(w[42], w[23], w[7], pars->GC_11, amp[60]); - FFV1_0(w[3], w[23], w[43], pars->GC_11, amp[61]); - FFV1_0(w[10], w[44], w[7], pars->GC_11, amp[62]); - FFV1_0(w[10], w[16], w[41], pars->GC_11, amp[63]); - FFV1_0(w[10], w[9], w[43], pars->GC_11, amp[64]); - FFV1_0(w[42], w[16], w[8], pars->GC_2, amp[65]); - FFV1_0(w[42], w[27], w[7], pars->GC_11, amp[66]); - FFV1_0(w[3], w[27], w[43], pars->GC_11, amp[67]); - FFV1_0(w[18], w[44], w[7], pars->GC_11, amp[68]); - FFV1_0(w[18], w[16], w[41], pars->GC_11, amp[69]); - FFV1_0(w[18], w[9], w[43], pars->GC_11, amp[70]); - FFV2_5_0(w[42], w[16], w[17], pars->GC_51, pars->GC_58, amp[71]); - FFV1_0(w[45], w[23], w[6], pars->GC_11, amp[72]); - FFV1_0(w[3], w[23], w[46], pars->GC_11, amp[73]); - FFV1_0(w[10], w[47], w[6], pars->GC_11, amp[74]); - FFV1_0(w[10], w[14], w[35], pars->GC_11, amp[75]); - FFV1_0(w[10], w[9], w[46], pars->GC_11, amp[76]); - FFV1_0(w[45], w[14], w[8], pars->GC_2, amp[77]); - FFV1_0(w[45], w[27], w[6], pars->GC_11, amp[78]); - FFV1_0(w[3], w[27], w[46], pars->GC_11, amp[79]); - FFV1_0(w[18], w[47], w[6], pars->GC_11, amp[80]); - FFV1_0(w[18], w[14], w[35], pars->GC_11, amp[81]); - FFV1_0(w[18], w[9], w[46], pars->GC_11, amp[82]); - FFV2_5_0(w[45], w[14], w[17], pars->GC_51, pars->GC_58, amp[83]); - FFV1_0(w[48], w[23], w[5], pars->GC_11, amp[84]); - FFV1_0(w[3], w[23], w[49], pars->GC_11, amp[85]); - FFV1_0(w[10], w[11], w[29], pars->GC_11, amp[86]); - FFV1_0(w[10], w[50], w[5], pars->GC_11, amp[87]); - FFV1_0(w[10], w[9], w[49], pars->GC_11, amp[88]); - FFV1_0(w[48], w[11], w[8], pars->GC_2, amp[89]); - FFV1_0(w[48], w[27], w[5], pars->GC_11, amp[90]); - FFV1_0(w[3], w[27], w[49], pars->GC_11, amp[91]); - FFV1_0(w[18], w[11], w[29], pars->GC_11, amp[92]); - FFV1_0(w[18], w[50], w[5], pars->GC_11, amp[93]); - FFV1_0(w[18], w[9], w[49], pars->GC_11, amp[94]); - FFV2_5_0(w[48], w[11], w[17], pars->GC_51, pars->GC_58, amp[95]); - FFV1_0(w[3], w[23], w[51], pars->GC_11, amp[96]); - FFV1_0(w[3], w[23], w[52], pars->GC_11, amp[97]); - FFV1_0(w[3], w[23], w[53], pars->GC_11, amp[98]); - FFV1_0(w[10], w[9], w[51], pars->GC_11, amp[99]); - FFV1_0(w[10], w[9], w[52], pars->GC_11, amp[100]); - FFV1_0(w[10], w[9], w[53], pars->GC_11, amp[101]); - FFV1_0(w[3], w[27], w[51], pars->GC_11, amp[102]); - FFV1_0(w[3], w[27], w[52], pars->GC_11, amp[103]); - FFV1_0(w[3], w[27], w[53], pars->GC_11, amp[104]); - FFV1_0(w[18], w[9], w[51], pars->GC_11, amp[105]); - FFV1_0(w[18], w[9], w[52], pars->GC_11, amp[106]); - FFV1_0(w[18], w[9], w[53], pars->GC_11, amp[107]); - FFV1_0(w[12], w[55], w[7], pars->GC_11, amp[108]); - FFV1_0(w[13], w[55], w[6], pars->GC_11, amp[109]); - FFV1_0(w[57], w[56], w[7], pars->GC_11, amp[110]); - FFV1_0(w[13], w[56], w[4], pars->GC_11, amp[111]); - FFV1_0(w[57], w[58], w[6], pars->GC_11, amp[112]); - FFV1_0(w[12], w[58], w[4], pars->GC_11, amp[113]); - FFV1_0(w[19], w[55], w[7], pars->GC_11, amp[114]); - FFV1_0(w[20], w[55], w[6], pars->GC_11, amp[115]); - FFV1_0(w[59], w[56], w[7], pars->GC_11, amp[116]); - FFV1_0(w[20], w[56], w[4], pars->GC_11, amp[117]); - FFV1_0(w[59], w[58], w[6], pars->GC_11, amp[118]); - FFV1_0(w[19], w[58], w[4], pars->GC_11, amp[119]); - FFV1_0(w[62], w[61], w[7], pars->GC_11, amp[120]); - FFV1_0(w[63], w[61], w[6], pars->GC_11, amp[121]); - FFV1_0(w[64], w[56], w[7], pars->GC_11, amp[122]); - FFV1_0(w[64], w[58], w[6], pars->GC_11, amp[123]); - FFV1_0(w[63], w[56], w[8], pars->GC_2, amp[124]); - FFV1_0(w[62], w[58], w[8], pars->GC_2, amp[125]); - FFV1_0(w[62], w[65], w[7], pars->GC_11, amp[126]); - FFV1_0(w[63], w[65], w[6], pars->GC_11, amp[127]); - FFV1_0(w[66], w[56], w[7], pars->GC_11, amp[128]); - FFV1_0(w[66], w[58], w[6], pars->GC_11, amp[129]); - FFV2_5_0(w[63], w[56], w[17], pars->GC_51, pars->GC_58, amp[130]); - FFV2_5_0(w[62], w[58], w[17], pars->GC_51, pars->GC_58, amp[131]); - FFV1_0(w[60], w[61], w[29], pars->GC_11, amp[132]); - FFV1_0(w[64], w[54], w[29], pars->GC_11, amp[133]); - FFV1_0(w[60], w[65], w[29], pars->GC_11, amp[134]); - FFV1_0(w[66], w[54], w[29], pars->GC_11, amp[135]); - FFV1_0(w[67], w[61], w[7], pars->GC_11, amp[136]); - FFV1_0(w[32], w[61], w[4], pars->GC_11, amp[137]); - FFV1_0(w[33], w[55], w[7], pars->GC_11, amp[138]); - FFV1_0(w[33], w[58], w[4], pars->GC_11, amp[139]); - FFV1_0(w[32], w[55], w[8], pars->GC_2, amp[140]); - FFV1_0(w[67], w[58], w[8], pars->GC_2, amp[141]); - FFV1_0(w[67], w[65], w[7], pars->GC_11, amp[142]); - FFV1_0(w[32], w[65], w[4], pars->GC_11, amp[143]); - FFV1_0(w[34], w[55], w[7], pars->GC_11, amp[144]); - FFV1_0(w[34], w[58], w[4], pars->GC_11, amp[145]); - FFV2_5_0(w[32], w[55], w[17], pars->GC_51, pars->GC_58, amp[146]); - FFV2_5_0(w[67], w[58], w[17], pars->GC_51, pars->GC_58, amp[147]); - FFV1_0(w[30], w[61], w[68], pars->GC_11, amp[148]); - FFV1_0(w[33], w[54], w[68], pars->GC_11, amp[149]); - FFV1_0(w[30], w[65], w[68], pars->GC_11, amp[150]); - FFV1_0(w[34], w[54], w[68], pars->GC_11, amp[151]); - FFV1_0(w[69], w[61], w[6], pars->GC_11, amp[152]); - FFV1_0(w[38], w[61], w[4], pars->GC_11, amp[153]); - FFV1_0(w[39], w[55], w[6], pars->GC_11, amp[154]); - FFV1_0(w[39], w[56], w[4], pars->GC_11, amp[155]); - FFV1_0(w[38], w[55], w[8], pars->GC_2, amp[156]); - FFV1_0(w[69], w[56], w[8], pars->GC_2, amp[157]); - FFV1_0(w[69], w[65], w[6], pars->GC_11, amp[158]); - FFV1_0(w[38], w[65], w[4], pars->GC_11, amp[159]); - FFV1_0(w[40], w[55], w[6], pars->GC_11, amp[160]); - FFV1_0(w[40], w[56], w[4], pars->GC_11, amp[161]); - FFV2_5_0(w[38], w[55], w[17], pars->GC_51, pars->GC_58, amp[162]); - FFV2_5_0(w[69], w[56], w[17], pars->GC_51, pars->GC_58, amp[163]); - FFV1_0(w[36], w[61], w[70], pars->GC_11, amp[164]); - FFV1_0(w[39], w[54], w[70], pars->GC_11, amp[165]); - FFV1_0(w[36], w[65], w[70], pars->GC_11, amp[166]); - FFV1_0(w[40], w[54], w[70], pars->GC_11, amp[167]); - FFV1_0(w[71], w[61], w[7], pars->GC_11, amp[168]); - FFV1_0(w[3], w[61], w[72], pars->GC_11, amp[169]); - FFV1_0(w[10], w[73], w[7], pars->GC_11, amp[170]); - FFV1_0(w[10], w[58], w[70], pars->GC_11, amp[171]); - FFV1_0(w[10], w[54], w[72], pars->GC_11, amp[172]); - FFV1_0(w[71], w[58], w[8], pars->GC_2, amp[173]); - FFV1_0(w[71], w[65], w[7], pars->GC_11, amp[174]); - FFV1_0(w[3], w[65], w[72], pars->GC_11, amp[175]); - FFV1_0(w[18], w[73], w[7], pars->GC_11, amp[176]); - FFV1_0(w[18], w[58], w[70], pars->GC_11, amp[177]); - FFV1_0(w[18], w[54], w[72], pars->GC_11, amp[178]); - FFV2_5_0(w[71], w[58], w[17], pars->GC_51, pars->GC_58, amp[179]); - FFV1_0(w[74], w[61], w[6], pars->GC_11, amp[180]); - FFV1_0(w[3], w[61], w[75], pars->GC_11, amp[181]); - FFV1_0(w[10], w[76], w[6], pars->GC_11, amp[182]); - FFV1_0(w[10], w[56], w[68], pars->GC_11, amp[183]); - FFV1_0(w[10], w[54], w[75], pars->GC_11, amp[184]); - FFV1_0(w[74], w[56], w[8], pars->GC_2, amp[185]); - FFV1_0(w[74], w[65], w[6], pars->GC_11, amp[186]); - FFV1_0(w[3], w[65], w[75], pars->GC_11, amp[187]); - FFV1_0(w[18], w[76], w[6], pars->GC_11, amp[188]); - FFV1_0(w[18], w[56], w[68], pars->GC_11, amp[189]); - FFV1_0(w[18], w[54], w[75], pars->GC_11, amp[190]); - FFV2_5_0(w[74], w[56], w[17], pars->GC_51, pars->GC_58, amp[191]); - FFV1_0(w[48], w[61], w[4], pars->GC_11, amp[192]); - FFV1_0(w[3], w[61], w[77], pars->GC_11, amp[193]); - FFV1_0(w[10], w[55], w[29], pars->GC_11, amp[194]); - FFV1_0(w[10], w[78], w[4], pars->GC_11, amp[195]); - FFV1_0(w[10], w[54], w[77], pars->GC_11, amp[196]); - FFV1_0(w[48], w[55], w[8], pars->GC_2, amp[197]); - FFV1_0(w[48], w[65], w[4], pars->GC_11, amp[198]); - FFV1_0(w[3], w[65], w[77], pars->GC_11, amp[199]); - FFV1_0(w[18], w[55], w[29], pars->GC_11, amp[200]); - FFV1_0(w[18], w[78], w[4], pars->GC_11, amp[201]); - FFV1_0(w[18], w[54], w[77], pars->GC_11, amp[202]); - FFV2_5_0(w[48], w[55], w[17], pars->GC_51, pars->GC_58, amp[203]); - FFV1_0(w[3], w[61], w[79], pars->GC_11, amp[204]); - FFV1_0(w[3], w[61], w[80], pars->GC_11, amp[205]); - FFV1_0(w[3], w[61], w[81], pars->GC_11, amp[206]); - FFV1_0(w[10], w[54], w[79], pars->GC_11, amp[207]); - FFV1_0(w[10], w[54], w[80], pars->GC_11, amp[208]); - FFV1_0(w[10], w[54], w[81], pars->GC_11, amp[209]); - FFV1_0(w[3], w[65], w[79], pars->GC_11, amp[210]); - FFV1_0(w[3], w[65], w[80], pars->GC_11, amp[211]); - FFV1_0(w[3], w[65], w[81], pars->GC_11, amp[212]); - FFV1_0(w[18], w[54], w[79], pars->GC_11, amp[213]); - FFV1_0(w[18], w[54], w[80], pars->GC_11, amp[214]); - FFV1_0(w[18], w[54], w[81], pars->GC_11, amp[215]); - FFV1_0(w[15], w[83], w[7], pars->GC_11, amp[216]); - FFV1_0(w[13], w[83], w[5], pars->GC_11, amp[217]); - FFV1_0(w[57], w[84], w[7], pars->GC_11, amp[218]); - FFV1_0(w[13], w[84], w[4], pars->GC_11, amp[219]); - FFV1_0(w[57], w[85], w[5], pars->GC_11, amp[220]); - FFV1_0(w[15], w[85], w[4], pars->GC_11, amp[221]); - FFV1_0(w[21], w[83], w[7], pars->GC_11, amp[222]); - FFV1_0(w[20], w[83], w[5], pars->GC_11, amp[223]); - FFV1_0(w[59], w[84], w[7], pars->GC_11, amp[224]); - FFV1_0(w[20], w[84], w[4], pars->GC_11, amp[225]); - FFV1_0(w[59], w[85], w[5], pars->GC_11, amp[226]); - FFV1_0(w[21], w[85], w[4], pars->GC_11, amp[227]); - FFV1_0(w[87], w[86], w[7], pars->GC_11, amp[228]); - FFV1_0(w[63], w[86], w[5], pars->GC_11, amp[229]); - FFV1_0(w[64], w[84], w[7], pars->GC_11, amp[230]); - FFV1_0(w[64], w[85], w[5], pars->GC_11, amp[231]); - FFV1_0(w[63], w[84], w[8], pars->GC_2, amp[232]); - FFV1_0(w[87], w[85], w[8], pars->GC_2, amp[233]); - FFV1_0(w[87], w[88], w[7], pars->GC_11, amp[234]); - FFV1_0(w[63], w[88], w[5], pars->GC_11, amp[235]); - FFV1_0(w[66], w[84], w[7], pars->GC_11, amp[236]); - FFV1_0(w[66], w[85], w[5], pars->GC_11, amp[237]); - FFV2_5_0(w[63], w[84], w[17], pars->GC_51, pars->GC_58, amp[238]); - FFV2_5_0(w[87], w[85], w[17], pars->GC_51, pars->GC_58, amp[239]); - FFV1_0(w[60], w[86], w[35], pars->GC_11, amp[240]); - FFV1_0(w[64], w[82], w[35], pars->GC_11, amp[241]); - FFV1_0(w[60], w[88], w[35], pars->GC_11, amp[242]); - FFV1_0(w[66], w[82], w[35], pars->GC_11, amp[243]); - FFV1_0(w[89], w[86], w[7], pars->GC_11, amp[244]); - FFV1_0(w[25], w[86], w[4], pars->GC_11, amp[245]); - FFV1_0(w[26], w[83], w[7], pars->GC_11, amp[246]); - FFV1_0(w[26], w[85], w[4], pars->GC_11, amp[247]); - FFV1_0(w[25], w[83], w[8], pars->GC_2, amp[248]); - FFV1_0(w[89], w[85], w[8], pars->GC_2, amp[249]); - FFV1_0(w[89], w[88], w[7], pars->GC_11, amp[250]); - FFV1_0(w[25], w[88], w[4], pars->GC_11, amp[251]); - FFV1_0(w[28], w[83], w[7], pars->GC_11, amp[252]); - FFV1_0(w[28], w[85], w[4], pars->GC_11, amp[253]); - FFV2_5_0(w[25], w[83], w[17], pars->GC_51, pars->GC_58, amp[254]); - FFV2_5_0(w[89], w[85], w[17], pars->GC_51, pars->GC_58, amp[255]); - FFV1_0(w[22], w[86], w[68], pars->GC_11, amp[256]); - FFV1_0(w[26], w[82], w[68], pars->GC_11, amp[257]); - FFV1_0(w[22], w[88], w[68], pars->GC_11, amp[258]); - FFV1_0(w[28], w[82], w[68], pars->GC_11, amp[259]); - FFV1_0(w[69], w[86], w[5], pars->GC_11, amp[260]); - FFV1_0(w[37], w[86], w[4], pars->GC_11, amp[261]); - FFV1_0(w[39], w[83], w[5], pars->GC_11, amp[262]); - FFV1_0(w[39], w[84], w[4], pars->GC_11, amp[263]); - FFV1_0(w[37], w[83], w[8], pars->GC_2, amp[264]); - FFV1_0(w[69], w[84], w[8], pars->GC_2, amp[265]); - FFV1_0(w[69], w[88], w[5], pars->GC_11, amp[266]); - FFV1_0(w[37], w[88], w[4], pars->GC_11, amp[267]); - FFV1_0(w[40], w[83], w[5], pars->GC_11, amp[268]); - FFV1_0(w[40], w[84], w[4], pars->GC_11, amp[269]); - FFV2_5_0(w[37], w[83], w[17], pars->GC_51, pars->GC_58, amp[270]); - FFV2_5_0(w[69], w[84], w[17], pars->GC_51, pars->GC_58, amp[271]); - FFV1_0(w[36], w[86], w[90], pars->GC_11, amp[272]); - FFV1_0(w[39], w[82], w[90], pars->GC_11, amp[273]); - FFV1_0(w[36], w[88], w[90], pars->GC_11, amp[274]); - FFV1_0(w[40], w[82], w[90], pars->GC_11, amp[275]); - FFV1_0(w[91], w[86], w[7], pars->GC_11, amp[276]); - FFV1_0(w[3], w[86], w[92], pars->GC_11, amp[277]); - FFV1_0(w[10], w[93], w[7], pars->GC_11, amp[278]); - FFV1_0(w[10], w[85], w[90], pars->GC_11, amp[279]); - FFV1_0(w[10], w[82], w[92], pars->GC_11, amp[280]); - FFV1_0(w[91], w[85], w[8], pars->GC_2, amp[281]); - FFV1_0(w[91], w[88], w[7], pars->GC_11, amp[282]); - FFV1_0(w[3], w[88], w[92], pars->GC_11, amp[283]); - FFV1_0(w[18], w[93], w[7], pars->GC_11, amp[284]); - FFV1_0(w[18], w[85], w[90], pars->GC_11, amp[285]); - FFV1_0(w[18], w[82], w[92], pars->GC_11, amp[286]); - FFV2_5_0(w[91], w[85], w[17], pars->GC_51, pars->GC_58, amp[287]); - FFV1_0(w[74], w[86], w[5], pars->GC_11, amp[288]); - FFV1_0(w[3], w[86], w[94], pars->GC_11, amp[289]); - FFV1_0(w[10], w[95], w[5], pars->GC_11, amp[290]); - FFV1_0(w[10], w[84], w[68], pars->GC_11, amp[291]); - FFV1_0(w[10], w[82], w[94], pars->GC_11, amp[292]); - FFV1_0(w[74], w[84], w[8], pars->GC_2, amp[293]); - FFV1_0(w[74], w[88], w[5], pars->GC_11, amp[294]); - FFV1_0(w[3], w[88], w[94], pars->GC_11, amp[295]); - FFV1_0(w[18], w[95], w[5], pars->GC_11, amp[296]); - FFV1_0(w[18], w[84], w[68], pars->GC_11, amp[297]); - FFV1_0(w[18], w[82], w[94], pars->GC_11, amp[298]); - FFV2_5_0(w[74], w[84], w[17], pars->GC_51, pars->GC_58, amp[299]); - FFV1_0(w[45], w[86], w[4], pars->GC_11, amp[300]); - FFV1_0(w[3], w[86], w[96], pars->GC_11, amp[301]); - FFV1_0(w[10], w[83], w[35], pars->GC_11, amp[302]); - FFV1_0(w[10], w[97], w[4], pars->GC_11, amp[303]); - FFV1_0(w[10], w[82], w[96], pars->GC_11, amp[304]); - FFV1_0(w[45], w[83], w[8], pars->GC_2, amp[305]); - FFV1_0(w[45], w[88], w[4], pars->GC_11, amp[306]); - FFV1_0(w[3], w[88], w[96], pars->GC_11, amp[307]); - FFV1_0(w[18], w[83], w[35], pars->GC_11, amp[308]); - FFV1_0(w[18], w[97], w[4], pars->GC_11, amp[309]); - FFV1_0(w[18], w[82], w[96], pars->GC_11, amp[310]); - FFV2_5_0(w[45], w[83], w[17], pars->GC_51, pars->GC_58, amp[311]); - FFV1_0(w[3], w[86], w[98], pars->GC_11, amp[312]); - FFV1_0(w[3], w[86], w[99], pars->GC_11, amp[313]); - FFV1_0(w[3], w[86], w[100], pars->GC_11, amp[314]); - FFV1_0(w[10], w[82], w[98], pars->GC_11, amp[315]); - FFV1_0(w[10], w[82], w[99], pars->GC_11, amp[316]); - FFV1_0(w[10], w[82], w[100], pars->GC_11, amp[317]); - FFV1_0(w[3], w[88], w[98], pars->GC_11, amp[318]); - FFV1_0(w[3], w[88], w[99], pars->GC_11, amp[319]); - FFV1_0(w[3], w[88], w[100], pars->GC_11, amp[320]); - FFV1_0(w[18], w[82], w[98], pars->GC_11, amp[321]); - FFV1_0(w[18], w[82], w[99], pars->GC_11, amp[322]); - FFV1_0(w[18], w[82], w[100], pars->GC_11, amp[323]); - FFV1_0(w[15], w[102], w[6], pars->GC_11, amp[324]); - FFV1_0(w[12], w[102], w[5], pars->GC_11, amp[325]); - FFV1_0(w[57], w[103], w[6], pars->GC_11, amp[326]); - FFV1_0(w[12], w[103], w[4], pars->GC_11, amp[327]); - FFV1_0(w[57], w[104], w[5], pars->GC_11, amp[328]); - FFV1_0(w[15], w[104], w[4], pars->GC_11, amp[329]); - FFV1_0(w[21], w[102], w[6], pars->GC_11, amp[330]); - FFV1_0(w[19], w[102], w[5], pars->GC_11, amp[331]); - FFV1_0(w[59], w[103], w[6], pars->GC_11, amp[332]); - FFV1_0(w[19], w[103], w[4], pars->GC_11, amp[333]); - FFV1_0(w[59], w[104], w[5], pars->GC_11, amp[334]); - FFV1_0(w[21], w[104], w[4], pars->GC_11, amp[335]); - FFV1_0(w[87], w[105], w[6], pars->GC_11, amp[336]); - FFV1_0(w[62], w[105], w[5], pars->GC_11, amp[337]); - FFV1_0(w[64], w[103], w[6], pars->GC_11, amp[338]); - FFV1_0(w[64], w[104], w[5], pars->GC_11, amp[339]); - FFV1_0(w[62], w[103], w[8], pars->GC_2, amp[340]); - FFV1_0(w[87], w[104], w[8], pars->GC_2, amp[341]); - FFV1_0(w[87], w[106], w[6], pars->GC_11, amp[342]); - FFV1_0(w[62], w[106], w[5], pars->GC_11, amp[343]); - FFV1_0(w[66], w[103], w[6], pars->GC_11, amp[344]); - FFV1_0(w[66], w[104], w[5], pars->GC_11, amp[345]); - FFV2_5_0(w[62], w[103], w[17], pars->GC_51, pars->GC_58, amp[346]); - FFV2_5_0(w[87], w[104], w[17], pars->GC_51, pars->GC_58, amp[347]); - FFV1_0(w[60], w[105], w[41], pars->GC_11, amp[348]); - FFV1_0(w[64], w[101], w[41], pars->GC_11, amp[349]); - FFV1_0(w[60], w[106], w[41], pars->GC_11, amp[350]); - FFV1_0(w[66], w[101], w[41], pars->GC_11, amp[351]); - FFV1_0(w[89], w[105], w[6], pars->GC_11, amp[352]); - FFV1_0(w[24], w[105], w[4], pars->GC_11, amp[353]); - FFV1_0(w[26], w[102], w[6], pars->GC_11, amp[354]); - FFV1_0(w[26], w[104], w[4], pars->GC_11, amp[355]); - FFV1_0(w[24], w[102], w[8], pars->GC_2, amp[356]); - FFV1_0(w[89], w[104], w[8], pars->GC_2, amp[357]); - FFV1_0(w[89], w[106], w[6], pars->GC_11, amp[358]); - FFV1_0(w[24], w[106], w[4], pars->GC_11, amp[359]); - FFV1_0(w[28], w[102], w[6], pars->GC_11, amp[360]); - FFV1_0(w[28], w[104], w[4], pars->GC_11, amp[361]); - FFV2_5_0(w[24], w[102], w[17], pars->GC_51, pars->GC_58, amp[362]); - FFV2_5_0(w[89], w[104], w[17], pars->GC_51, pars->GC_58, amp[363]); - FFV1_0(w[22], w[105], w[70], pars->GC_11, amp[364]); - FFV1_0(w[26], w[101], w[70], pars->GC_11, amp[365]); - FFV1_0(w[22], w[106], w[70], pars->GC_11, amp[366]); - FFV1_0(w[28], w[101], w[70], pars->GC_11, amp[367]); - FFV1_0(w[67], w[105], w[5], pars->GC_11, amp[368]); - FFV1_0(w[31], w[105], w[4], pars->GC_11, amp[369]); - FFV1_0(w[33], w[102], w[5], pars->GC_11, amp[370]); - FFV1_0(w[33], w[103], w[4], pars->GC_11, amp[371]); - FFV1_0(w[31], w[102], w[8], pars->GC_2, amp[372]); - FFV1_0(w[67], w[103], w[8], pars->GC_2, amp[373]); - FFV1_0(w[67], w[106], w[5], pars->GC_11, amp[374]); - FFV1_0(w[31], w[106], w[4], pars->GC_11, amp[375]); - FFV1_0(w[34], w[102], w[5], pars->GC_11, amp[376]); - FFV1_0(w[34], w[103], w[4], pars->GC_11, amp[377]); - FFV2_5_0(w[31], w[102], w[17], pars->GC_51, pars->GC_58, amp[378]); - FFV2_5_0(w[67], w[103], w[17], pars->GC_51, pars->GC_58, amp[379]); - FFV1_0(w[30], w[105], w[90], pars->GC_11, amp[380]); - FFV1_0(w[33], w[101], w[90], pars->GC_11, amp[381]); - FFV1_0(w[30], w[106], w[90], pars->GC_11, amp[382]); - FFV1_0(w[34], w[101], w[90], pars->GC_11, amp[383]); - FFV1_0(w[91], w[105], w[6], pars->GC_11, amp[384]); - FFV1_0(w[3], w[105], w[107], pars->GC_11, amp[385]); - FFV1_0(w[10], w[108], w[6], pars->GC_11, amp[386]); - FFV1_0(w[10], w[104], w[90], pars->GC_11, amp[387]); - FFV1_0(w[10], w[101], w[107], pars->GC_11, amp[388]); - FFV1_0(w[91], w[104], w[8], pars->GC_2, amp[389]); - FFV1_0(w[91], w[106], w[6], pars->GC_11, amp[390]); - FFV1_0(w[3], w[106], w[107], pars->GC_11, amp[391]); - FFV1_0(w[18], w[108], w[6], pars->GC_11, amp[392]); - FFV1_0(w[18], w[104], w[90], pars->GC_11, amp[393]); - FFV1_0(w[18], w[101], w[107], pars->GC_11, amp[394]); - FFV2_5_0(w[91], w[104], w[17], pars->GC_51, pars->GC_58, amp[395]); - FFV1_0(w[71], w[105], w[5], pars->GC_11, amp[396]); - FFV1_0(w[3], w[105], w[109], pars->GC_11, amp[397]); - FFV1_0(w[10], w[110], w[5], pars->GC_11, amp[398]); - FFV1_0(w[10], w[103], w[70], pars->GC_11, amp[399]); - FFV1_0(w[10], w[101], w[109], pars->GC_11, amp[400]); - FFV1_0(w[71], w[103], w[8], pars->GC_2, amp[401]); - FFV1_0(w[71], w[106], w[5], pars->GC_11, amp[402]); - FFV1_0(w[3], w[106], w[109], pars->GC_11, amp[403]); - FFV1_0(w[18], w[110], w[5], pars->GC_11, amp[404]); - FFV1_0(w[18], w[103], w[70], pars->GC_11, amp[405]); - FFV1_0(w[18], w[101], w[109], pars->GC_11, amp[406]); - FFV2_5_0(w[71], w[103], w[17], pars->GC_51, pars->GC_58, amp[407]); - FFV1_0(w[42], w[105], w[4], pars->GC_11, amp[408]); - FFV1_0(w[3], w[105], w[111], pars->GC_11, amp[409]); - FFV1_0(w[10], w[102], w[41], pars->GC_11, amp[410]); - FFV1_0(w[10], w[112], w[4], pars->GC_11, amp[411]); - FFV1_0(w[10], w[101], w[111], pars->GC_11, amp[412]); - FFV1_0(w[42], w[102], w[8], pars->GC_2, amp[413]); - FFV1_0(w[42], w[106], w[4], pars->GC_11, amp[414]); - FFV1_0(w[3], w[106], w[111], pars->GC_11, amp[415]); - FFV1_0(w[18], w[102], w[41], pars->GC_11, amp[416]); - FFV1_0(w[18], w[112], w[4], pars->GC_11, amp[417]); - FFV1_0(w[18], w[101], w[111], pars->GC_11, amp[418]); - FFV2_5_0(w[42], w[102], w[17], pars->GC_51, pars->GC_58, amp[419]); - FFV1_0(w[3], w[105], w[113], pars->GC_11, amp[420]); - FFV1_0(w[3], w[105], w[114], pars->GC_11, amp[421]); - FFV1_0(w[3], w[105], w[115], pars->GC_11, amp[422]); - FFV1_0(w[10], w[101], w[113], pars->GC_11, amp[423]); - FFV1_0(w[10], w[101], w[114], pars->GC_11, amp[424]); - FFV1_0(w[10], w[101], w[115], pars->GC_11, amp[425]); - FFV1_0(w[3], w[106], w[113], pars->GC_11, amp[426]); - FFV1_0(w[3], w[106], w[114], pars->GC_11, amp[427]); - FFV1_0(w[3], w[106], w[115], pars->GC_11, amp[428]); - FFV1_0(w[18], w[101], w[113], pars->GC_11, amp[429]); - FFV1_0(w[18], w[101], w[114], pars->GC_11, amp[430]); - FFV1_0(w[18], w[101], w[115], pars->GC_11, amp[431]); - FFV1_0(w[87], w[117], w[7], pars->GC_11, amp[432]); - FFV1_0(w[87], w[118], w[6], pars->GC_11, amp[433]); - FFV1_0(w[62], w[119], w[7], pars->GC_11, amp[434]); - FFV1_0(w[62], w[118], w[5], pars->GC_11, amp[435]); - FFV1_0(w[63], w[119], w[6], pars->GC_11, amp[436]); - FFV1_0(w[63], w[117], w[5], pars->GC_11, amp[437]); - FFV1_0(w[87], w[121], w[7], pars->GC_11, amp[438]); - FFV1_0(w[87], w[122], w[6], pars->GC_11, amp[439]); - FFV1_0(w[62], w[123], w[7], pars->GC_11, amp[440]); - FFV1_0(w[62], w[122], w[5], pars->GC_11, amp[441]); - FFV1_0(w[63], w[123], w[6], pars->GC_11, amp[442]); - FFV1_0(w[63], w[121], w[5], pars->GC_11, amp[443]); - FFV1_0(w[124], w[116], w[7], pars->GC_11, amp[444]); - FFV1_0(w[63], w[116], w[41], pars->GC_11, amp[445]); - FFV1_0(w[60], w[116], w[43], pars->GC_11, amp[446]); - FFV1_0(w[64], w[125], w[7], pars->GC_11, amp[447]); - FFV1_0(w[64], w[2], w[43], pars->GC_11, amp[448]); - FFV1_0(w[63], w[125], w[8], pars->GC_2, amp[449]); - FFV1_0(w[124], w[120], w[7], pars->GC_11, amp[450]); - FFV1_0(w[63], w[120], w[41], pars->GC_11, amp[451]); - FFV1_0(w[60], w[120], w[43], pars->GC_11, amp[452]); - FFV1_0(w[66], w[125], w[7], pars->GC_11, amp[453]); - FFV1_0(w[66], w[2], w[43], pars->GC_11, amp[454]); - FFV2_5_0(w[63], w[125], w[17], pars->GC_51, pars->GC_58, amp[455]); - FFV1_0(w[126], w[116], w[6], pars->GC_11, amp[456]); - FFV1_0(w[62], w[116], w[35], pars->GC_11, amp[457]); - FFV1_0(w[60], w[116], w[46], pars->GC_11, amp[458]); - FFV1_0(w[64], w[127], w[6], pars->GC_11, amp[459]); - FFV1_0(w[64], w[2], w[46], pars->GC_11, amp[460]); - FFV1_0(w[62], w[127], w[8], pars->GC_2, amp[461]); - FFV1_0(w[126], w[120], w[6], pars->GC_11, amp[462]); - FFV1_0(w[62], w[120], w[35], pars->GC_11, amp[463]); - FFV1_0(w[60], w[120], w[46], pars->GC_11, amp[464]); - FFV1_0(w[66], w[127], w[6], pars->GC_11, amp[465]); - FFV1_0(w[66], w[2], w[46], pars->GC_11, amp[466]); - FFV2_5_0(w[62], w[127], w[17], pars->GC_51, pars->GC_58, amp[467]); - FFV1_0(w[87], w[116], w[29], pars->GC_11, amp[468]); - FFV1_0(w[128], w[116], w[5], pars->GC_11, amp[469]); - FFV1_0(w[60], w[116], w[49], pars->GC_11, amp[470]); - FFV1_0(w[64], w[129], w[5], pars->GC_11, amp[471]); - FFV1_0(w[64], w[2], w[49], pars->GC_11, amp[472]); - FFV1_0(w[87], w[129], w[8], pars->GC_2, amp[473]); - FFV1_0(w[87], w[120], w[29], pars->GC_11, amp[474]); - FFV1_0(w[128], w[120], w[5], pars->GC_11, amp[475]); - FFV1_0(w[60], w[120], w[49], pars->GC_11, amp[476]); - FFV1_0(w[66], w[129], w[5], pars->GC_11, amp[477]); - FFV1_0(w[66], w[2], w[49], pars->GC_11, amp[478]); - FFV2_5_0(w[87], w[129], w[17], pars->GC_51, pars->GC_58, amp[479]); - FFV1_0(w[60], w[116], w[51], pars->GC_11, amp[480]); - FFV1_0(w[60], w[116], w[52], pars->GC_11, amp[481]); - FFV1_0(w[60], w[116], w[53], pars->GC_11, amp[482]); - FFV1_0(w[64], w[2], w[51], pars->GC_11, amp[483]); - FFV1_0(w[64], w[2], w[52], pars->GC_11, amp[484]); - FFV1_0(w[64], w[2], w[53], pars->GC_11, amp[485]); - FFV1_0(w[60], w[120], w[51], pars->GC_11, amp[486]); - FFV1_0(w[60], w[120], w[52], pars->GC_11, amp[487]); - FFV1_0(w[60], w[120], w[53], pars->GC_11, amp[488]); - FFV1_0(w[66], w[2], w[51], pars->GC_11, amp[489]); - FFV1_0(w[66], w[2], w[52], pars->GC_11, amp[490]); - FFV1_0(w[66], w[2], w[53], pars->GC_11, amp[491]); - FFV1_0(w[89], w[117], w[7], pars->GC_11, amp[492]); - FFV1_0(w[89], w[118], w[6], pars->GC_11, amp[493]); - FFV1_0(w[24], w[130], w[7], pars->GC_11, amp[494]); - FFV1_0(w[24], w[118], w[4], pars->GC_11, amp[495]); - FFV1_0(w[25], w[130], w[6], pars->GC_11, amp[496]); - FFV1_0(w[25], w[117], w[4], pars->GC_11, amp[497]); - FFV1_0(w[89], w[121], w[7], pars->GC_11, amp[498]); - FFV1_0(w[89], w[122], w[6], pars->GC_11, amp[499]); - FFV1_0(w[24], w[131], w[7], pars->GC_11, amp[500]); - FFV1_0(w[24], w[122], w[4], pars->GC_11, amp[501]); - FFV1_0(w[25], w[131], w[6], pars->GC_11, amp[502]); - FFV1_0(w[25], w[121], w[4], pars->GC_11, amp[503]); - FFV1_0(w[132], w[116], w[7], pars->GC_11, amp[504]); - FFV1_0(w[25], w[116], w[70], pars->GC_11, amp[505]); - FFV1_0(w[22], w[116], w[72], pars->GC_11, amp[506]); - FFV1_0(w[26], w[133], w[7], pars->GC_11, amp[507]); - FFV1_0(w[26], w[2], w[72], pars->GC_11, amp[508]); - FFV1_0(w[25], w[133], w[8], pars->GC_2, amp[509]); - FFV1_0(w[132], w[120], w[7], pars->GC_11, amp[510]); - FFV1_0(w[25], w[120], w[70], pars->GC_11, amp[511]); - FFV1_0(w[22], w[120], w[72], pars->GC_11, amp[512]); - FFV1_0(w[28], w[133], w[7], pars->GC_11, amp[513]); - FFV1_0(w[28], w[2], w[72], pars->GC_11, amp[514]); - FFV2_5_0(w[25], w[133], w[17], pars->GC_51, pars->GC_58, amp[515]); - FFV1_0(w[134], w[116], w[6], pars->GC_11, amp[516]); - FFV1_0(w[24], w[116], w[68], pars->GC_11, amp[517]); - FFV1_0(w[22], w[116], w[75], pars->GC_11, amp[518]); - FFV1_0(w[26], w[135], w[6], pars->GC_11, amp[519]); - FFV1_0(w[26], w[2], w[75], pars->GC_11, amp[520]); - FFV1_0(w[24], w[135], w[8], pars->GC_2, amp[521]); - FFV1_0(w[134], w[120], w[6], pars->GC_11, amp[522]); - FFV1_0(w[24], w[120], w[68], pars->GC_11, amp[523]); - FFV1_0(w[22], w[120], w[75], pars->GC_11, amp[524]); - FFV1_0(w[28], w[135], w[6], pars->GC_11, amp[525]); - FFV1_0(w[28], w[2], w[75], pars->GC_11, amp[526]); - FFV2_5_0(w[24], w[135], w[17], pars->GC_51, pars->GC_58, amp[527]); - FFV1_0(w[89], w[116], w[29], pars->GC_11, amp[528]); - FFV1_0(w[136], w[116], w[4], pars->GC_11, amp[529]); - FFV1_0(w[22], w[116], w[77], pars->GC_11, amp[530]); - FFV1_0(w[26], w[129], w[4], pars->GC_11, amp[531]); - FFV1_0(w[26], w[2], w[77], pars->GC_11, amp[532]); - FFV1_0(w[89], w[129], w[8], pars->GC_2, amp[533]); - FFV1_0(w[89], w[120], w[29], pars->GC_11, amp[534]); - FFV1_0(w[136], w[120], w[4], pars->GC_11, amp[535]); - FFV1_0(w[22], w[120], w[77], pars->GC_11, amp[536]); - FFV1_0(w[28], w[129], w[4], pars->GC_11, amp[537]); - FFV1_0(w[28], w[2], w[77], pars->GC_11, amp[538]); - FFV2_5_0(w[89], w[129], w[17], pars->GC_51, pars->GC_58, amp[539]); - FFV1_0(w[22], w[116], w[79], pars->GC_11, amp[540]); - FFV1_0(w[22], w[116], w[80], pars->GC_11, amp[541]); - FFV1_0(w[22], w[116], w[81], pars->GC_11, amp[542]); - FFV1_0(w[26], w[2], w[79], pars->GC_11, amp[543]); - FFV1_0(w[26], w[2], w[80], pars->GC_11, amp[544]); - FFV1_0(w[26], w[2], w[81], pars->GC_11, amp[545]); - FFV1_0(w[22], w[120], w[79], pars->GC_11, amp[546]); - FFV1_0(w[22], w[120], w[80], pars->GC_11, amp[547]); - FFV1_0(w[22], w[120], w[81], pars->GC_11, amp[548]); - FFV1_0(w[28], w[2], w[79], pars->GC_11, amp[549]); - FFV1_0(w[28], w[2], w[80], pars->GC_11, amp[550]); - FFV1_0(w[28], w[2], w[81], pars->GC_11, amp[551]); - FFV1_0(w[67], w[119], w[7], pars->GC_11, amp[552]); - FFV1_0(w[67], w[118], w[5], pars->GC_11, amp[553]); - FFV1_0(w[31], w[130], w[7], pars->GC_11, amp[554]); - FFV1_0(w[31], w[118], w[4], pars->GC_11, amp[555]); - FFV1_0(w[32], w[130], w[5], pars->GC_11, amp[556]); - FFV1_0(w[32], w[119], w[4], pars->GC_11, amp[557]); - FFV1_0(w[67], w[123], w[7], pars->GC_11, amp[558]); - FFV1_0(w[67], w[122], w[5], pars->GC_11, amp[559]); - FFV1_0(w[31], w[131], w[7], pars->GC_11, amp[560]); - FFV1_0(w[31], w[122], w[4], pars->GC_11, amp[561]); - FFV1_0(w[32], w[131], w[5], pars->GC_11, amp[562]); - FFV1_0(w[32], w[123], w[4], pars->GC_11, amp[563]); - FFV1_0(w[137], w[116], w[7], pars->GC_11, amp[564]); - FFV1_0(w[32], w[116], w[90], pars->GC_11, amp[565]); - FFV1_0(w[30], w[116], w[92], pars->GC_11, amp[566]); - FFV1_0(w[33], w[138], w[7], pars->GC_11, amp[567]); - FFV1_0(w[33], w[2], w[92], pars->GC_11, amp[568]); - FFV1_0(w[32], w[138], w[8], pars->GC_2, amp[569]); - FFV1_0(w[137], w[120], w[7], pars->GC_11, amp[570]); - FFV1_0(w[32], w[120], w[90], pars->GC_11, amp[571]); - FFV1_0(w[30], w[120], w[92], pars->GC_11, amp[572]); - FFV1_0(w[34], w[138], w[7], pars->GC_11, amp[573]); - FFV1_0(w[34], w[2], w[92], pars->GC_11, amp[574]); - FFV2_5_0(w[32], w[138], w[17], pars->GC_51, pars->GC_58, amp[575]); - FFV1_0(w[139], w[116], w[5], pars->GC_11, amp[576]); - FFV1_0(w[31], w[116], w[68], pars->GC_11, amp[577]); - FFV1_0(w[30], w[116], w[94], pars->GC_11, amp[578]); - FFV1_0(w[33], w[135], w[5], pars->GC_11, amp[579]); - FFV1_0(w[33], w[2], w[94], pars->GC_11, amp[580]); - FFV1_0(w[31], w[135], w[8], pars->GC_2, amp[581]); - FFV1_0(w[139], w[120], w[5], pars->GC_11, amp[582]); - FFV1_0(w[31], w[120], w[68], pars->GC_11, amp[583]); - FFV1_0(w[30], w[120], w[94], pars->GC_11, amp[584]); - FFV1_0(w[34], w[135], w[5], pars->GC_11, amp[585]); - FFV1_0(w[34], w[2], w[94], pars->GC_11, amp[586]); - FFV2_5_0(w[31], w[135], w[17], pars->GC_51, pars->GC_58, amp[587]); - FFV1_0(w[67], w[116], w[35], pars->GC_11, amp[588]); - FFV1_0(w[140], w[116], w[4], pars->GC_11, amp[589]); - FFV1_0(w[30], w[116], w[96], pars->GC_11, amp[590]); - FFV1_0(w[33], w[127], w[4], pars->GC_11, amp[591]); - FFV1_0(w[33], w[2], w[96], pars->GC_11, amp[592]); - FFV1_0(w[67], w[127], w[8], pars->GC_2, amp[593]); - FFV1_0(w[67], w[120], w[35], pars->GC_11, amp[594]); - FFV1_0(w[140], w[120], w[4], pars->GC_11, amp[595]); - FFV1_0(w[30], w[120], w[96], pars->GC_11, amp[596]); - FFV1_0(w[34], w[127], w[4], pars->GC_11, amp[597]); - FFV1_0(w[34], w[2], w[96], pars->GC_11, amp[598]); - FFV2_5_0(w[67], w[127], w[17], pars->GC_51, pars->GC_58, amp[599]); - FFV1_0(w[30], w[116], w[98], pars->GC_11, amp[600]); - FFV1_0(w[30], w[116], w[99], pars->GC_11, amp[601]); - FFV1_0(w[30], w[116], w[100], pars->GC_11, amp[602]); - FFV1_0(w[33], w[2], w[98], pars->GC_11, amp[603]); - FFV1_0(w[33], w[2], w[99], pars->GC_11, amp[604]); - FFV1_0(w[33], w[2], w[100], pars->GC_11, amp[605]); - FFV1_0(w[30], w[120], w[98], pars->GC_11, amp[606]); - FFV1_0(w[30], w[120], w[99], pars->GC_11, amp[607]); - FFV1_0(w[30], w[120], w[100], pars->GC_11, amp[608]); - FFV1_0(w[34], w[2], w[98], pars->GC_11, amp[609]); - FFV1_0(w[34], w[2], w[99], pars->GC_11, amp[610]); - FFV1_0(w[34], w[2], w[100], pars->GC_11, amp[611]); - FFV1_0(w[69], w[119], w[6], pars->GC_11, amp[612]); - FFV1_0(w[69], w[117], w[5], pars->GC_11, amp[613]); - FFV1_0(w[37], w[130], w[6], pars->GC_11, amp[614]); - FFV1_0(w[37], w[117], w[4], pars->GC_11, amp[615]); - FFV1_0(w[38], w[130], w[5], pars->GC_11, amp[616]); - FFV1_0(w[38], w[119], w[4], pars->GC_11, amp[617]); - FFV1_0(w[69], w[123], w[6], pars->GC_11, amp[618]); - FFV1_0(w[69], w[121], w[5], pars->GC_11, amp[619]); - FFV1_0(w[37], w[131], w[6], pars->GC_11, amp[620]); - FFV1_0(w[37], w[121], w[4], pars->GC_11, amp[621]); - FFV1_0(w[38], w[131], w[5], pars->GC_11, amp[622]); - FFV1_0(w[38], w[123], w[4], pars->GC_11, amp[623]); - FFV1_0(w[141], w[116], w[6], pars->GC_11, amp[624]); - FFV1_0(w[38], w[116], w[90], pars->GC_11, amp[625]); - FFV1_0(w[36], w[116], w[107], pars->GC_11, amp[626]); - FFV1_0(w[39], w[138], w[6], pars->GC_11, amp[627]); - FFV1_0(w[39], w[2], w[107], pars->GC_11, amp[628]); - FFV1_0(w[38], w[138], w[8], pars->GC_2, amp[629]); - FFV1_0(w[141], w[120], w[6], pars->GC_11, amp[630]); - FFV1_0(w[38], w[120], w[90], pars->GC_11, amp[631]); - FFV1_0(w[36], w[120], w[107], pars->GC_11, amp[632]); - FFV1_0(w[40], w[138], w[6], pars->GC_11, amp[633]); - FFV1_0(w[40], w[2], w[107], pars->GC_11, amp[634]); - FFV2_5_0(w[38], w[138], w[17], pars->GC_51, pars->GC_58, amp[635]); - FFV1_0(w[142], w[116], w[5], pars->GC_11, amp[636]); - FFV1_0(w[37], w[116], w[70], pars->GC_11, amp[637]); - FFV1_0(w[36], w[116], w[109], pars->GC_11, amp[638]); - FFV1_0(w[39], w[133], w[5], pars->GC_11, amp[639]); - FFV1_0(w[39], w[2], w[109], pars->GC_11, amp[640]); - FFV1_0(w[37], w[133], w[8], pars->GC_2, amp[641]); - FFV1_0(w[142], w[120], w[5], pars->GC_11, amp[642]); - FFV1_0(w[37], w[120], w[70], pars->GC_11, amp[643]); - FFV1_0(w[36], w[120], w[109], pars->GC_11, amp[644]); - FFV1_0(w[40], w[133], w[5], pars->GC_11, amp[645]); - FFV1_0(w[40], w[2], w[109], pars->GC_11, amp[646]); - FFV2_5_0(w[37], w[133], w[17], pars->GC_51, pars->GC_58, amp[647]); - FFV1_0(w[69], w[116], w[41], pars->GC_11, amp[648]); - FFV1_0(w[143], w[116], w[4], pars->GC_11, amp[649]); - FFV1_0(w[36], w[116], w[111], pars->GC_11, amp[650]); - FFV1_0(w[39], w[125], w[4], pars->GC_11, amp[651]); - FFV1_0(w[39], w[2], w[111], pars->GC_11, amp[652]); - FFV1_0(w[69], w[125], w[8], pars->GC_2, amp[653]); - FFV1_0(w[69], w[120], w[41], pars->GC_11, amp[654]); - FFV1_0(w[143], w[120], w[4], pars->GC_11, amp[655]); - FFV1_0(w[36], w[120], w[111], pars->GC_11, amp[656]); - FFV1_0(w[40], w[125], w[4], pars->GC_11, amp[657]); - FFV1_0(w[40], w[2], w[111], pars->GC_11, amp[658]); - FFV2_5_0(w[69], w[125], w[17], pars->GC_51, pars->GC_58, amp[659]); - FFV1_0(w[36], w[116], w[113], pars->GC_11, amp[660]); - FFV1_0(w[36], w[116], w[114], pars->GC_11, amp[661]); - FFV1_0(w[36], w[116], w[115], pars->GC_11, amp[662]); - FFV1_0(w[39], w[2], w[113], pars->GC_11, amp[663]); - FFV1_0(w[39], w[2], w[114], pars->GC_11, amp[664]); - FFV1_0(w[39], w[2], w[115], pars->GC_11, amp[665]); - FFV1_0(w[36], w[120], w[113], pars->GC_11, amp[666]); - FFV1_0(w[36], w[120], w[114], pars->GC_11, amp[667]); - FFV1_0(w[36], w[120], w[115], pars->GC_11, amp[668]); - FFV1_0(w[40], w[2], w[113], pars->GC_11, amp[669]); - FFV1_0(w[40], w[2], w[114], pars->GC_11, amp[670]); - FFV1_0(w[40], w[2], w[115], pars->GC_11, amp[671]); - FFV1_0(w[91], w[117], w[7], pars->GC_11, amp[672]); - FFV1_0(w[91], w[118], w[6], pars->GC_11, amp[673]); - VVV1_0(w[107], w[7], w[144], pars->GC_10, amp[674]); - FFV1_0(w[3], w[118], w[107], pars->GC_11, amp[675]); - VVV1_0(w[92], w[6], w[144], pars->GC_10, amp[676]); - FFV1_0(w[3], w[117], w[92], pars->GC_11, amp[677]); - FFV1_0(w[3], w[116], w[145], pars->GC_11, amp[678]); - FFV1_0(w[3], w[116], w[146], pars->GC_11, amp[679]); - FFV1_0(w[3], w[116], w[147], pars->GC_11, amp[680]); - FFV1_0(w[12], w[138], w[7], pars->GC_11, amp[681]); - FFV1_0(w[13], w[138], w[6], pars->GC_11, amp[682]); - VVV1_0(w[107], w[7], w[148], pars->GC_10, amp[683]); - FFV1_0(w[13], w[2], w[107], pars->GC_11, amp[684]); - VVV1_0(w[92], w[6], w[148], pars->GC_10, amp[685]); - FFV1_0(w[12], w[2], w[92], pars->GC_11, amp[686]); - FFV1_0(w[10], w[2], w[145], pars->GC_11, amp[687]); - FFV1_0(w[10], w[2], w[146], pars->GC_11, amp[688]); - FFV1_0(w[10], w[2], w[147], pars->GC_11, amp[689]); - FFV1_0(w[91], w[121], w[7], pars->GC_11, amp[690]); - FFV1_0(w[91], w[122], w[6], pars->GC_11, amp[691]); - VVV1_0(w[107], w[7], w[149], pars->GC_10, amp[692]); - FFV1_0(w[3], w[122], w[107], pars->GC_11, amp[693]); - VVV1_0(w[92], w[6], w[149], pars->GC_10, amp[694]); - FFV1_0(w[3], w[121], w[92], pars->GC_11, amp[695]); - FFV1_0(w[3], w[120], w[145], pars->GC_11, amp[696]); - FFV1_0(w[3], w[120], w[146], pars->GC_11, amp[697]); - FFV1_0(w[3], w[120], w[147], pars->GC_11, amp[698]); - FFV1_0(w[19], w[138], w[7], pars->GC_11, amp[699]); - FFV1_0(w[20], w[138], w[6], pars->GC_11, amp[700]); - VVV1_0(w[107], w[7], w[150], pars->GC_10, amp[701]); - FFV1_0(w[20], w[2], w[107], pars->GC_11, amp[702]); - VVV1_0(w[92], w[6], w[150], pars->GC_10, amp[703]); - FFV1_0(w[19], w[2], w[92], pars->GC_11, amp[704]); - FFV1_0(w[18], w[2], w[145], pars->GC_11, amp[705]); - FFV1_0(w[18], w[2], w[146], pars->GC_11, amp[706]); - FFV1_0(w[18], w[2], w[147], pars->GC_11, amp[707]); - FFV1_0(w[91], w[116], w[29], pars->GC_11, amp[708]); - FFV1_0(w[48], w[116], w[90], pars->GC_11, amp[709]); - FFV1_0(w[3], w[116], w[151], pars->GC_11, amp[710]); - FFV1_0(w[10], w[138], w[29], pars->GC_11, amp[711]); - FFV1_0(w[10], w[129], w[90], pars->GC_11, amp[712]); - FFV1_0(w[10], w[2], w[151], pars->GC_11, amp[713]); - FFV1_0(w[48], w[138], w[8], pars->GC_2, amp[714]); - FFV1_0(w[91], w[129], w[8], pars->GC_2, amp[715]); - FFV1_0(w[91], w[120], w[29], pars->GC_11, amp[716]); - FFV1_0(w[48], w[120], w[90], pars->GC_11, amp[717]); - FFV1_0(w[3], w[120], w[151], pars->GC_11, amp[718]); - FFV1_0(w[18], w[138], w[29], pars->GC_11, amp[719]); - FFV1_0(w[18], w[129], w[90], pars->GC_11, amp[720]); - FFV1_0(w[18], w[2], w[151], pars->GC_11, amp[721]); - FFV2_5_0(w[48], w[138], w[17], pars->GC_51, pars->GC_58, amp[722]); - FFV2_5_0(w[91], w[129], w[17], pars->GC_51, pars->GC_58, amp[723]); - FFV1_0(w[71], w[119], w[7], pars->GC_11, amp[724]); - FFV1_0(w[71], w[118], w[5], pars->GC_11, amp[725]); - VVV1_0(w[109], w[7], w[144], pars->GC_10, amp[726]); - FFV1_0(w[3], w[118], w[109], pars->GC_11, amp[727]); - VVV1_0(w[72], w[5], w[144], pars->GC_10, amp[728]); - FFV1_0(w[3], w[119], w[72], pars->GC_11, amp[729]); - FFV1_0(w[3], w[116], w[152], pars->GC_11, amp[730]); - FFV1_0(w[3], w[116], w[153], pars->GC_11, amp[731]); - FFV1_0(w[3], w[116], w[154], pars->GC_11, amp[732]); - FFV1_0(w[15], w[133], w[7], pars->GC_11, amp[733]); - FFV1_0(w[13], w[133], w[5], pars->GC_11, amp[734]); - VVV1_0(w[109], w[7], w[148], pars->GC_10, amp[735]); - FFV1_0(w[13], w[2], w[109], pars->GC_11, amp[736]); - VVV1_0(w[72], w[5], w[148], pars->GC_10, amp[737]); - FFV1_0(w[15], w[2], w[72], pars->GC_11, amp[738]); - FFV1_0(w[10], w[2], w[152], pars->GC_11, amp[739]); - FFV1_0(w[10], w[2], w[153], pars->GC_11, amp[740]); - FFV1_0(w[10], w[2], w[154], pars->GC_11, amp[741]); - FFV1_0(w[71], w[123], w[7], pars->GC_11, amp[742]); - FFV1_0(w[71], w[122], w[5], pars->GC_11, amp[743]); - VVV1_0(w[109], w[7], w[149], pars->GC_10, amp[744]); - FFV1_0(w[3], w[122], w[109], pars->GC_11, amp[745]); - VVV1_0(w[72], w[5], w[149], pars->GC_10, amp[746]); - FFV1_0(w[3], w[123], w[72], pars->GC_11, amp[747]); - FFV1_0(w[3], w[120], w[152], pars->GC_11, amp[748]); - FFV1_0(w[3], w[120], w[153], pars->GC_11, amp[749]); - FFV1_0(w[3], w[120], w[154], pars->GC_11, amp[750]); - FFV1_0(w[21], w[133], w[7], pars->GC_11, amp[751]); - FFV1_0(w[20], w[133], w[5], pars->GC_11, amp[752]); - VVV1_0(w[109], w[7], w[150], pars->GC_10, amp[753]); - FFV1_0(w[20], w[2], w[109], pars->GC_11, amp[754]); - VVV1_0(w[72], w[5], w[150], pars->GC_10, amp[755]); - FFV1_0(w[21], w[2], w[72], pars->GC_11, amp[756]); - FFV1_0(w[18], w[2], w[152], pars->GC_11, amp[757]); - FFV1_0(w[18], w[2], w[153], pars->GC_11, amp[758]); - FFV1_0(w[18], w[2], w[154], pars->GC_11, amp[759]); - FFV1_0(w[71], w[116], w[35], pars->GC_11, amp[760]); - FFV1_0(w[45], w[116], w[70], pars->GC_11, amp[761]); - FFV1_0(w[3], w[116], w[155], pars->GC_11, amp[762]); - FFV1_0(w[10], w[133], w[35], pars->GC_11, amp[763]); - FFV1_0(w[10], w[127], w[70], pars->GC_11, amp[764]); - FFV1_0(w[10], w[2], w[155], pars->GC_11, amp[765]); - FFV1_0(w[45], w[133], w[8], pars->GC_2, amp[766]); - FFV1_0(w[71], w[127], w[8], pars->GC_2, amp[767]); - FFV1_0(w[71], w[120], w[35], pars->GC_11, amp[768]); - FFV1_0(w[45], w[120], w[70], pars->GC_11, amp[769]); - FFV1_0(w[3], w[120], w[155], pars->GC_11, amp[770]); - FFV1_0(w[18], w[133], w[35], pars->GC_11, amp[771]); - FFV1_0(w[18], w[127], w[70], pars->GC_11, amp[772]); - FFV1_0(w[18], w[2], w[155], pars->GC_11, amp[773]); - FFV2_5_0(w[45], w[133], w[17], pars->GC_51, pars->GC_58, amp[774]); - FFV2_5_0(w[71], w[127], w[17], pars->GC_51, pars->GC_58, amp[775]); - FFV1_0(w[74], w[119], w[6], pars->GC_11, amp[776]); - FFV1_0(w[74], w[117], w[5], pars->GC_11, amp[777]); - VVV1_0(w[94], w[6], w[144], pars->GC_10, amp[778]); - FFV1_0(w[3], w[117], w[94], pars->GC_11, amp[779]); - VVV1_0(w[75], w[5], w[144], pars->GC_10, amp[780]); - FFV1_0(w[3], w[119], w[75], pars->GC_11, amp[781]); - FFV1_0(w[3], w[116], w[156], pars->GC_11, amp[782]); - FFV1_0(w[3], w[116], w[157], pars->GC_11, amp[783]); - FFV1_0(w[3], w[116], w[158], pars->GC_11, amp[784]); - FFV1_0(w[15], w[135], w[6], pars->GC_11, amp[785]); - FFV1_0(w[12], w[135], w[5], pars->GC_11, amp[786]); - VVV1_0(w[94], w[6], w[148], pars->GC_10, amp[787]); - FFV1_0(w[12], w[2], w[94], pars->GC_11, amp[788]); - VVV1_0(w[75], w[5], w[148], pars->GC_10, amp[789]); - FFV1_0(w[15], w[2], w[75], pars->GC_11, amp[790]); - FFV1_0(w[10], w[2], w[156], pars->GC_11, amp[791]); - FFV1_0(w[10], w[2], w[157], pars->GC_11, amp[792]); - FFV1_0(w[10], w[2], w[158], pars->GC_11, amp[793]); - FFV1_0(w[74], w[123], w[6], pars->GC_11, amp[794]); - FFV1_0(w[74], w[121], w[5], pars->GC_11, amp[795]); - VVV1_0(w[94], w[6], w[149], pars->GC_10, amp[796]); - FFV1_0(w[3], w[121], w[94], pars->GC_11, amp[797]); - VVV1_0(w[75], w[5], w[149], pars->GC_10, amp[798]); - FFV1_0(w[3], w[123], w[75], pars->GC_11, amp[799]); - FFV1_0(w[3], w[120], w[156], pars->GC_11, amp[800]); - FFV1_0(w[3], w[120], w[157], pars->GC_11, amp[801]); - FFV1_0(w[3], w[120], w[158], pars->GC_11, amp[802]); - FFV1_0(w[21], w[135], w[6], pars->GC_11, amp[803]); - FFV1_0(w[19], w[135], w[5], pars->GC_11, amp[804]); - VVV1_0(w[94], w[6], w[150], pars->GC_10, amp[805]); - FFV1_0(w[19], w[2], w[94], pars->GC_11, amp[806]); - VVV1_0(w[75], w[5], w[150], pars->GC_10, amp[807]); - FFV1_0(w[21], w[2], w[75], pars->GC_11, amp[808]); - FFV1_0(w[18], w[2], w[156], pars->GC_11, amp[809]); - FFV1_0(w[18], w[2], w[157], pars->GC_11, amp[810]); - FFV1_0(w[18], w[2], w[158], pars->GC_11, amp[811]); - FFV1_0(w[74], w[116], w[41], pars->GC_11, amp[812]); - FFV1_0(w[42], w[116], w[68], pars->GC_11, amp[813]); - FFV1_0(w[3], w[116], w[159], pars->GC_11, amp[814]); - FFV1_0(w[10], w[135], w[41], pars->GC_11, amp[815]); - FFV1_0(w[10], w[125], w[68], pars->GC_11, amp[816]); - FFV1_0(w[10], w[2], w[159], pars->GC_11, amp[817]); - FFV1_0(w[42], w[135], w[8], pars->GC_2, amp[818]); - FFV1_0(w[74], w[125], w[8], pars->GC_2, amp[819]); - FFV1_0(w[74], w[120], w[41], pars->GC_11, amp[820]); - FFV1_0(w[42], w[120], w[68], pars->GC_11, amp[821]); - FFV1_0(w[3], w[120], w[159], pars->GC_11, amp[822]); - FFV1_0(w[18], w[135], w[41], pars->GC_11, amp[823]); - FFV1_0(w[18], w[125], w[68], pars->GC_11, amp[824]); - FFV1_0(w[18], w[2], w[159], pars->GC_11, amp[825]); - FFV2_5_0(w[42], w[135], w[17], pars->GC_51, pars->GC_58, amp[826]); - FFV2_5_0(w[74], w[125], w[17], pars->GC_51, pars->GC_58, amp[827]); - FFV1_0(w[42], w[130], w[7], pars->GC_11, amp[828]); - FFV1_0(w[42], w[118], w[4], pars->GC_11, amp[829]); - VVV1_0(w[111], w[7], w[144], pars->GC_10, amp[830]); - FFV1_0(w[3], w[118], w[111], pars->GC_11, amp[831]); - VVV1_0(w[4], w[43], w[144], pars->GC_10, amp[832]); - FFV1_0(w[3], w[130], w[43], pars->GC_11, amp[833]); - FFV1_0(w[3], w[116], w[160], pars->GC_11, amp[834]); - FFV1_0(w[3], w[116], w[161], pars->GC_11, amp[835]); - FFV1_0(w[3], w[116], w[162], pars->GC_11, amp[836]); - FFV1_0(w[57], w[125], w[7], pars->GC_11, amp[837]); - FFV1_0(w[13], w[125], w[4], pars->GC_11, amp[838]); - VVV1_0(w[111], w[7], w[148], pars->GC_10, amp[839]); - FFV1_0(w[13], w[2], w[111], pars->GC_11, amp[840]); - VVV1_0(w[4], w[43], w[148], pars->GC_10, amp[841]); - FFV1_0(w[57], w[2], w[43], pars->GC_11, amp[842]); - FFV1_0(w[10], w[2], w[160], pars->GC_11, amp[843]); - FFV1_0(w[10], w[2], w[161], pars->GC_11, amp[844]); - FFV1_0(w[10], w[2], w[162], pars->GC_11, amp[845]); - FFV1_0(w[42], w[131], w[7], pars->GC_11, amp[846]); - FFV1_0(w[42], w[122], w[4], pars->GC_11, amp[847]); - VVV1_0(w[111], w[7], w[149], pars->GC_10, amp[848]); - FFV1_0(w[3], w[122], w[111], pars->GC_11, amp[849]); - VVV1_0(w[4], w[43], w[149], pars->GC_10, amp[850]); - FFV1_0(w[3], w[131], w[43], pars->GC_11, amp[851]); - FFV1_0(w[3], w[120], w[160], pars->GC_11, amp[852]); - FFV1_0(w[3], w[120], w[161], pars->GC_11, amp[853]); - FFV1_0(w[3], w[120], w[162], pars->GC_11, amp[854]); - FFV1_0(w[59], w[125], w[7], pars->GC_11, amp[855]); - FFV1_0(w[20], w[125], w[4], pars->GC_11, amp[856]); - VVV1_0(w[111], w[7], w[150], pars->GC_10, amp[857]); - FFV1_0(w[20], w[2], w[111], pars->GC_11, amp[858]); - VVV1_0(w[4], w[43], w[150], pars->GC_10, amp[859]); - FFV1_0(w[59], w[2], w[43], pars->GC_11, amp[860]); - FFV1_0(w[18], w[2], w[160], pars->GC_11, amp[861]); - FFV1_0(w[18], w[2], w[161], pars->GC_11, amp[862]); - FFV1_0(w[18], w[2], w[162], pars->GC_11, amp[863]); - FFV1_0(w[45], w[130], w[6], pars->GC_11, amp[864]); - FFV1_0(w[45], w[117], w[4], pars->GC_11, amp[865]); - VVV1_0(w[96], w[6], w[144], pars->GC_10, amp[866]); - FFV1_0(w[3], w[117], w[96], pars->GC_11, amp[867]); - VVV1_0(w[4], w[46], w[144], pars->GC_10, amp[868]); - FFV1_0(w[3], w[130], w[46], pars->GC_11, amp[869]); - FFV1_0(w[3], w[116], w[163], pars->GC_11, amp[870]); - FFV1_0(w[3], w[116], w[164], pars->GC_11, amp[871]); - FFV1_0(w[3], w[116], w[165], pars->GC_11, amp[872]); - FFV1_0(w[57], w[127], w[6], pars->GC_11, amp[873]); - FFV1_0(w[12], w[127], w[4], pars->GC_11, amp[874]); - VVV1_0(w[96], w[6], w[148], pars->GC_10, amp[875]); - FFV1_0(w[12], w[2], w[96], pars->GC_11, amp[876]); - VVV1_0(w[4], w[46], w[148], pars->GC_10, amp[877]); - FFV1_0(w[57], w[2], w[46], pars->GC_11, amp[878]); - FFV1_0(w[10], w[2], w[163], pars->GC_11, amp[879]); - FFV1_0(w[10], w[2], w[164], pars->GC_11, amp[880]); - FFV1_0(w[10], w[2], w[165], pars->GC_11, amp[881]); - FFV1_0(w[45], w[131], w[6], pars->GC_11, amp[882]); - FFV1_0(w[45], w[121], w[4], pars->GC_11, amp[883]); - VVV1_0(w[96], w[6], w[149], pars->GC_10, amp[884]); - FFV1_0(w[3], w[121], w[96], pars->GC_11, amp[885]); - VVV1_0(w[4], w[46], w[149], pars->GC_10, amp[886]); - FFV1_0(w[3], w[131], w[46], pars->GC_11, amp[887]); - FFV1_0(w[3], w[120], w[163], pars->GC_11, amp[888]); - FFV1_0(w[3], w[120], w[164], pars->GC_11, amp[889]); - FFV1_0(w[3], w[120], w[165], pars->GC_11, amp[890]); - FFV1_0(w[59], w[127], w[6], pars->GC_11, amp[891]); - FFV1_0(w[19], w[127], w[4], pars->GC_11, amp[892]); - VVV1_0(w[96], w[6], w[150], pars->GC_10, amp[893]); - FFV1_0(w[19], w[2], w[96], pars->GC_11, amp[894]); - VVV1_0(w[4], w[46], w[150], pars->GC_10, amp[895]); - FFV1_0(w[59], w[2], w[46], pars->GC_11, amp[896]); - FFV1_0(w[18], w[2], w[163], pars->GC_11, amp[897]); - FFV1_0(w[18], w[2], w[164], pars->GC_11, amp[898]); - FFV1_0(w[18], w[2], w[165], pars->GC_11, amp[899]); - FFV1_0(w[48], w[130], w[5], pars->GC_11, amp[900]); - FFV1_0(w[48], w[119], w[4], pars->GC_11, amp[901]); - VVV1_0(w[77], w[5], w[144], pars->GC_10, amp[902]); - FFV1_0(w[3], w[119], w[77], pars->GC_11, amp[903]); - VVV1_0(w[4], w[49], w[144], pars->GC_10, amp[904]); - FFV1_0(w[3], w[130], w[49], pars->GC_11, amp[905]); - FFV1_0(w[3], w[116], w[166], pars->GC_11, amp[906]); - FFV1_0(w[3], w[116], w[167], pars->GC_11, amp[907]); - FFV1_0(w[3], w[116], w[168], pars->GC_11, amp[908]); - FFV1_0(w[57], w[129], w[5], pars->GC_11, amp[909]); - FFV1_0(w[15], w[129], w[4], pars->GC_11, amp[910]); - VVV1_0(w[77], w[5], w[148], pars->GC_10, amp[911]); - FFV1_0(w[15], w[2], w[77], pars->GC_11, amp[912]); - VVV1_0(w[4], w[49], w[148], pars->GC_10, amp[913]); - FFV1_0(w[57], w[2], w[49], pars->GC_11, amp[914]); - FFV1_0(w[10], w[2], w[166], pars->GC_11, amp[915]); - FFV1_0(w[10], w[2], w[167], pars->GC_11, amp[916]); - FFV1_0(w[10], w[2], w[168], pars->GC_11, amp[917]); - FFV1_0(w[48], w[131], w[5], pars->GC_11, amp[918]); - FFV1_0(w[48], w[123], w[4], pars->GC_11, amp[919]); - VVV1_0(w[77], w[5], w[149], pars->GC_10, amp[920]); - FFV1_0(w[3], w[123], w[77], pars->GC_11, amp[921]); - VVV1_0(w[4], w[49], w[149], pars->GC_10, amp[922]); - FFV1_0(w[3], w[131], w[49], pars->GC_11, amp[923]); - FFV1_0(w[3], w[120], w[166], pars->GC_11, amp[924]); - FFV1_0(w[3], w[120], w[167], pars->GC_11, amp[925]); - FFV1_0(w[3], w[120], w[168], pars->GC_11, amp[926]); - FFV1_0(w[59], w[129], w[5], pars->GC_11, amp[927]); - FFV1_0(w[21], w[129], w[4], pars->GC_11, amp[928]); - VVV1_0(w[77], w[5], w[150], pars->GC_10, amp[929]); - FFV1_0(w[21], w[2], w[77], pars->GC_11, amp[930]); - VVV1_0(w[4], w[49], w[150], pars->GC_10, amp[931]); - FFV1_0(w[59], w[2], w[49], pars->GC_11, amp[932]); - FFV1_0(w[18], w[2], w[166], pars->GC_11, amp[933]); - FFV1_0(w[18], w[2], w[167], pars->GC_11, amp[934]); - FFV1_0(w[18], w[2], w[168], pars->GC_11, amp[935]); - FFV1_0(w[169], w[116], w[7], pars->GC_11, amp[936]); - FFV1_0(w[170], w[116], w[7], pars->GC_11, amp[937]); - FFV1_0(w[171], w[116], w[7], pars->GC_11, amp[938]); - FFV1_0(w[3], w[116], w[172], pars->GC_11, amp[939]); - FFV1_0(w[3], w[116], w[173], pars->GC_11, amp[940]); - FFV1_0(w[3], w[116], w[174], pars->GC_11, amp[941]); - FFV1_0(w[10], w[175], w[7], pars->GC_11, amp[942]); - FFV1_0(w[10], w[176], w[7], pars->GC_11, amp[943]); - FFV1_0(w[10], w[177], w[7], pars->GC_11, amp[944]); - FFV1_0(w[10], w[2], w[172], pars->GC_11, amp[945]); - FFV1_0(w[10], w[2], w[173], pars->GC_11, amp[946]); - FFV1_0(w[10], w[2], w[174], pars->GC_11, amp[947]); - FFV1_0(w[169], w[120], w[7], pars->GC_11, amp[948]); - FFV1_0(w[170], w[120], w[7], pars->GC_11, amp[949]); - FFV1_0(w[171], w[120], w[7], pars->GC_11, amp[950]); - FFV1_0(w[3], w[120], w[172], pars->GC_11, amp[951]); - FFV1_0(w[3], w[120], w[173], pars->GC_11, amp[952]); - FFV1_0(w[3], w[120], w[174], pars->GC_11, amp[953]); - FFV1_0(w[18], w[175], w[7], pars->GC_11, amp[954]); - FFV1_0(w[18], w[176], w[7], pars->GC_11, amp[955]); - FFV1_0(w[18], w[177], w[7], pars->GC_11, amp[956]); - FFV1_0(w[18], w[2], w[172], pars->GC_11, amp[957]); - FFV1_0(w[18], w[2], w[173], pars->GC_11, amp[958]); - FFV1_0(w[18], w[2], w[174], pars->GC_11, amp[959]); - FFV1_0(w[178], w[116], w[6], pars->GC_11, amp[960]); - FFV1_0(w[179], w[116], w[6], pars->GC_11, amp[961]); - FFV1_0(w[180], w[116], w[6], pars->GC_11, amp[962]); - FFV1_0(w[3], w[116], w[181], pars->GC_11, amp[963]); - FFV1_0(w[3], w[116], w[182], pars->GC_11, amp[964]); - FFV1_0(w[3], w[116], w[183], pars->GC_11, amp[965]); - FFV1_0(w[10], w[184], w[6], pars->GC_11, amp[966]); - FFV1_0(w[10], w[185], w[6], pars->GC_11, amp[967]); - FFV1_0(w[10], w[186], w[6], pars->GC_11, amp[968]); - FFV1_0(w[10], w[2], w[181], pars->GC_11, amp[969]); - FFV1_0(w[10], w[2], w[182], pars->GC_11, amp[970]); - FFV1_0(w[10], w[2], w[183], pars->GC_11, amp[971]); - FFV1_0(w[178], w[120], w[6], pars->GC_11, amp[972]); - FFV1_0(w[179], w[120], w[6], pars->GC_11, amp[973]); - FFV1_0(w[180], w[120], w[6], pars->GC_11, amp[974]); - FFV1_0(w[3], w[120], w[181], pars->GC_11, amp[975]); - FFV1_0(w[3], w[120], w[182], pars->GC_11, amp[976]); - FFV1_0(w[3], w[120], w[183], pars->GC_11, amp[977]); - FFV1_0(w[18], w[184], w[6], pars->GC_11, amp[978]); - FFV1_0(w[18], w[185], w[6], pars->GC_11, amp[979]); - FFV1_0(w[18], w[186], w[6], pars->GC_11, amp[980]); - FFV1_0(w[18], w[2], w[181], pars->GC_11, amp[981]); - FFV1_0(w[18], w[2], w[182], pars->GC_11, amp[982]); - FFV1_0(w[18], w[2], w[183], pars->GC_11, amp[983]); - FFV1_0(w[187], w[116], w[5], pars->GC_11, amp[984]); - FFV1_0(w[188], w[116], w[5], pars->GC_11, amp[985]); - FFV1_0(w[189], w[116], w[5], pars->GC_11, amp[986]); - FFV1_0(w[3], w[116], w[190], pars->GC_11, amp[987]); - FFV1_0(w[3], w[116], w[191], pars->GC_11, amp[988]); - FFV1_0(w[3], w[116], w[192], pars->GC_11, amp[989]); - FFV1_0(w[10], w[193], w[5], pars->GC_11, amp[990]); - FFV1_0(w[10], w[194], w[5], pars->GC_11, amp[991]); - FFV1_0(w[10], w[195], w[5], pars->GC_11, amp[992]); - FFV1_0(w[10], w[2], w[190], pars->GC_11, amp[993]); - FFV1_0(w[10], w[2], w[191], pars->GC_11, amp[994]); - FFV1_0(w[10], w[2], w[192], pars->GC_11, amp[995]); - FFV1_0(w[187], w[120], w[5], pars->GC_11, amp[996]); - FFV1_0(w[188], w[120], w[5], pars->GC_11, amp[997]); - FFV1_0(w[189], w[120], w[5], pars->GC_11, amp[998]); - FFV1_0(w[3], w[120], w[190], pars->GC_11, amp[999]); - FFV1_0(w[3], w[120], w[191], pars->GC_11, amp[1000]); - FFV1_0(w[3], w[120], w[192], pars->GC_11, amp[1001]); - FFV1_0(w[18], w[193], w[5], pars->GC_11, amp[1002]); - FFV1_0(w[18], w[194], w[5], pars->GC_11, amp[1003]); - FFV1_0(w[18], w[195], w[5], pars->GC_11, amp[1004]); - FFV1_0(w[18], w[2], w[190], pars->GC_11, amp[1005]); - FFV1_0(w[18], w[2], w[191], pars->GC_11, amp[1006]); - FFV1_0(w[18], w[2], w[192], pars->GC_11, amp[1007]); - FFV1_0(w[196], w[116], w[4], pars->GC_11, amp[1008]); - FFV1_0(w[197], w[116], w[4], pars->GC_11, amp[1009]); - FFV1_0(w[198], w[116], w[4], pars->GC_11, amp[1010]); - FFV1_0(w[3], w[116], w[199], pars->GC_11, amp[1011]); - FFV1_0(w[3], w[116], w[200], pars->GC_11, amp[1012]); - FFV1_0(w[3], w[116], w[201], pars->GC_11, amp[1013]); - FFV1_0(w[10], w[202], w[4], pars->GC_11, amp[1014]); - FFV1_0(w[10], w[203], w[4], pars->GC_11, amp[1015]); - FFV1_0(w[10], w[204], w[4], pars->GC_11, amp[1016]); - FFV1_0(w[10], w[2], w[199], pars->GC_11, amp[1017]); - FFV1_0(w[10], w[2], w[200], pars->GC_11, amp[1018]); - FFV1_0(w[10], w[2], w[201], pars->GC_11, amp[1019]); - FFV1_0(w[196], w[120], w[4], pars->GC_11, amp[1020]); - FFV1_0(w[197], w[120], w[4], pars->GC_11, amp[1021]); - FFV1_0(w[198], w[120], w[4], pars->GC_11, amp[1022]); - FFV1_0(w[3], w[120], w[199], pars->GC_11, amp[1023]); - FFV1_0(w[3], w[120], w[200], pars->GC_11, amp[1024]); - FFV1_0(w[3], w[120], w[201], pars->GC_11, amp[1025]); - FFV1_0(w[18], w[202], w[4], pars->GC_11, amp[1026]); - FFV1_0(w[18], w[203], w[4], pars->GC_11, amp[1027]); - FFV1_0(w[18], w[204], w[4], pars->GC_11, amp[1028]); - FFV1_0(w[18], w[2], w[199], pars->GC_11, amp[1029]); - FFV1_0(w[18], w[2], w[200], pars->GC_11, amp[1030]); - FFV1_0(w[18], w[2], w[201], pars->GC_11, amp[1031]); - -} -double eeuugggg::matrix_1_epem_uuxgggg() -{ -// int i, j; - // Local variables -// const int ngraphs = 1032; - const int ncolor = 24; - std::complex<double> jamp[ncolor]; - // The color matrix; - //static const double denom[ncolor] = {54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - // 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54}; - /*static const double cf[ncolor][ncolor] = {{512, -64, -64, 8, 8, 80, -64, 8, - 8, -1, -1, -10, 8, -1, 80, -10, 71, 62, -1, -10, -10, 62, 62, -28}, {-64, - 512, 8, 80, -64, 8, 8, -64, -1, -10, 8, -1, -1, -10, -10, 62, 62, -28, 8, - -1, 80, -10, 71, 62}, {-64, 8, 512, -64, 80, 8, 8, -1, 80, -10, 71, 62, - -64, 8, 8, -1, -1, -10, -10, -1, 62, -28, -10, 62}, {8, 80, -64, 512, 8, - -64, -1, -10, -10, 62, 62, -28, 8, -64, -1, -10, 8, -1, -1, 8, 71, 62, - 80, -10}, {8, -64, 80, 8, 512, -64, -1, 8, 71, 62, 80, -10, -10, -1, 62, - -28, -10, 62, -64, 8, 8, -1, -1, -10}, {80, 8, 8, -64, -64, 512, -10, -1, - 62, -28, -10, 62, -1, 8, 71, 62, 80, -10, 8, -64, -1, -10, 8, -1}, {-64, - 8, 8, -1, -1, -10, 512, -64, -64, 8, 8, 80, 80, -10, 8, -1, 62, 71, -10, - 62, -1, -10, -28, 62}, {8, -64, -1, -10, 8, -1, -64, 512, 8, 80, -64, 8, - -10, 62, -1, -10, -28, 62, 80, -10, 8, -1, 62, 71}, {8, -1, 80, -10, 71, - 62, -64, 8, 512, -64, 80, 8, 8, -1, -64, 8, -10, -1, 62, -28, -10, -1, - 62, -10}, {-1, -10, -10, 62, 62, -28, 8, 80, -64, 512, 8, -64, -1, -10, - 8, -64, -1, 8, 71, 62, -1, 8, -10, 80}, {-1, 8, 71, 62, 80, -10, 8, -64, - 80, 8, 512, -64, 62, -28, -10, -1, 62, -10, 8, -1, -64, 8, -10, -1}, - {-10, -1, 62, -28, -10, 62, 80, 8, 8, -64, -64, 512, 71, 62, -1, 8, -10, - 80, -1, -10, 8, -64, -1, 8}, {8, -1, -64, 8, -10, -1, 80, -10, 8, -1, 62, - 71, 512, -64, -64, 8, 8, 80, 62, -10, -28, 62, -1, -10}, {-1, -10, 8, - -64, -1, 8, -10, 62, -1, -10, -28, 62, -64, 512, 8, 80, -64, 8, -10, 80, - 62, 71, 8, -1}, {80, -10, 8, -1, 62, 71, 8, -1, -64, 8, -10, -1, -64, 8, - 512, -64, 80, 8, -28, 62, 62, -10, -10, -1}, {-10, 62, -1, -10, -28, 62, - -1, -10, 8, -64, -1, 8, 8, 80, -64, 512, 8, -64, 62, 71, -10, 80, -1, 8}, - {71, 62, -1, 8, -10, 80, 62, -28, -10, -1, 62, -10, 8, -64, 80, 8, 512, - -64, -1, 8, -10, -1, -64, 8}, {62, -28, -10, -1, 62, -10, 71, 62, -1, 8, - -10, 80, 80, 8, 8, -64, -64, 512, -10, -1, -1, 8, 8, -64}, {-1, 8, -10, - -1, -64, 8, -10, 80, 62, 71, 8, -1, 62, -10, -28, 62, -1, -10, 512, -64, - -64, 8, 8, 80}, {-10, -1, -1, 8, 8, -64, 62, -10, -28, 62, -1, -10, -10, - 80, 62, 71, 8, -1, -64, 512, 8, 80, -64, 8}, {-10, 80, 62, 71, 8, -1, -1, - 8, -10, -1, -64, 8, -28, 62, 62, -10, -10, -1, -64, 8, 512, -64, 80, 8}, - {62, -10, -28, 62, -1, -10, -10, -1, -1, 8, 8, -64, 62, 71, -10, 80, -1, - 8, 8, 80, -64, 512, 8, -64}, {62, 71, -10, 80, -1, 8, -28, 62, 62, -10, - -10, -1, -1, 8, -10, -1, -64, 8, 8, -64, 80, 8, 512, -64}, {-28, 62, 62, - -10, -10, -1, 62, 71, -10, 80, -1, 8, -10, -1, -1, 8, 8, -64, 80, 8, 8, - -64, -64, 512}}; - */ - - // Calculate color flows - jamp[0] = +amp[1] + amp[7] + amp[45] + amp[46] + amp[48] + amp[51] + amp[52] - + amp[54] - std::complex<double> (0, 1) * amp[56] - std::complex<double> - (0, 1) * amp[57] - std::complex<double> (0, 1) * amp[58] - - std::complex<double> (0, 1) * amp[59] - amp[61] - std::complex<double> - (0, 1) * amp[62] - amp[64] - amp[67] - std::complex<double> (0, 1) * - amp[68] - amp[70] - std::complex<double> (0, 1) * amp[84] - amp[85] - - std::complex<double> (0, 1) * amp[86] - amp[88] - std::complex<double> - (0, 1) * amp[89] - std::complex<double> (0, 1) * amp[90] - amp[91] - - std::complex<double> (0, 1) * amp[92] - amp[94] - std::complex<double> - (0, 1) * amp[95] + amp[98] - amp[96] + amp[101] - amp[99] + amp[104] - - amp[102] + amp[107] - amp[105] + amp[616] + amp[622] - - std::complex<double> (0, 1) * amp[625] - amp[626] - std::complex<double> - (0, 1) * amp[627] - amp[628] - std::complex<double> (0, 1) * amp[629] - - std::complex<double> (0, 1) * amp[631] - amp[632] - std::complex<double> - (0, 1) * amp[633] - amp[634] - std::complex<double> (0, 1) * amp[635] - - std::complex<double> (0, 1) * amp[649] - amp[650] - amp[652] - - std::complex<double> (0, 1) * amp[655] - amp[656] - amp[658] + amp[662] - - amp[660] + amp[665] - amp[663] + amp[668] - amp[666] + amp[671] - - amp[669] + std::complex<double> (0, 1) * amp[674] - std::complex<double> - (0, 1) * amp[680] + std::complex<double> (0, 1) * amp[678] - - std::complex<double> (0, 1) * amp[682] + std::complex<double> (0, 1) * - amp[683] - amp[684] - std::complex<double> (0, 1) * amp[689] + - std::complex<double> (0, 1) * amp[687] + std::complex<double> (0, 1) * - amp[692] - std::complex<double> (0, 1) * amp[698] + std::complex<double> - (0, 1) * amp[696] - std::complex<double> (0, 1) * amp[700] + - std::complex<double> (0, 1) * amp[701] - amp[702] - std::complex<double> - (0, 1) * amp[707] + std::complex<double> (0, 1) * amp[705] - amp[709] + - std::complex<double> (0, 1) * amp[710] - amp[711] + std::complex<double> - (0, 1) * amp[713] - amp[714] - amp[717] + std::complex<double> (0, 1) * - amp[718] - amp[719] + std::complex<double> (0, 1) * amp[721] - amp[722] + - std::complex<double> (0, 1) * amp[830] + std::complex<double> (0, 1) * - amp[832] - amp[833] - std::complex<double> (0, 1) * amp[836] + - std::complex<double> (0, 1) * amp[834] + std::complex<double> (0, 1) * - amp[839] - amp[840] + std::complex<double> (0, 1) * amp[841] - - std::complex<double> (0, 1) * amp[845] + std::complex<double> (0, 1) * - amp[843] + std::complex<double> (0, 1) * amp[848] + std::complex<double> - (0, 1) * amp[850] - amp[851] - std::complex<double> (0, 1) * amp[854] + - std::complex<double> (0, 1) * amp[852] + std::complex<double> (0, 1) * - amp[857] - amp[858] + std::complex<double> (0, 1) * amp[859] - - std::complex<double> (0, 1) * amp[863] + std::complex<double> (0, 1) * - amp[861] - std::complex<double> (0, 1) * amp[900] + std::complex<double> - (0, 1) * amp[904] - amp[905] - std::complex<double> (0, 1) * amp[908] + - std::complex<double> (0, 1) * amp[906] + std::complex<double> (0, 1) * - amp[913] - std::complex<double> (0, 1) * amp[917] + std::complex<double> - (0, 1) * amp[915] - std::complex<double> (0, 1) * amp[918] + - std::complex<double> (0, 1) * amp[922] - amp[923] - std::complex<double> - (0, 1) * amp[926] + std::complex<double> (0, 1) * amp[924] + - std::complex<double> (0, 1) * amp[931] - std::complex<double> (0, 1) * - amp[935] + std::complex<double> (0, 1) * amp[933] - std::complex<double> - (0, 1) * amp[941] + std::complex<double> (0, 1) * amp[939] + amp[944] - - amp[942] - std::complex<double> (0, 1) * amp[947] + std::complex<double> - (0, 1) * amp[945] - std::complex<double> (0, 1) * amp[953] + - std::complex<double> (0, 1) * amp[951] + amp[956] - amp[954] - - std::complex<double> (0, 1) * amp[959] + std::complex<double> (0, 1) * - amp[957] + amp[1010] - amp[1008] - std::complex<double> (0, 1) * - amp[1013] + std::complex<double> (0, 1) * amp[1011] - - std::complex<double> (0, 1) * amp[1019] + std::complex<double> (0, 1) * - amp[1017] + amp[1022] - amp[1020] - std::complex<double> (0, 1) * - amp[1025] + std::complex<double> (0, 1) * amp[1023] - - std::complex<double> (0, 1) * amp[1031] + std::complex<double> (0, 1) * - amp[1029]; - jamp[1] = +amp[0] + amp[6] + amp[29] + amp[30] + amp[32] + amp[35] + amp[36] - + amp[38] - std::complex<double> (0, 1) * amp[40] - std::complex<double> - (0, 1) * amp[41] - std::complex<double> (0, 1) * amp[42] - - std::complex<double> (0, 1) * amp[43] - amp[73] - std::complex<double> - (0, 1) * amp[74] - amp[76] - amp[79] - std::complex<double> (0, 1) * - amp[80] - amp[82] + std::complex<double> (0, 1) * amp[84] + amp[85] + - std::complex<double> (0, 1) * amp[86] + amp[88] + std::complex<double> - (0, 1) * amp[89] + std::complex<double> (0, 1) * amp[90] + amp[91] + - std::complex<double> (0, 1) * amp[92] + amp[94] + std::complex<double> - (0, 1) * amp[95] + amp[96] + amp[97] + amp[99] + amp[100] + amp[102] + - amp[103] + amp[105] + amp[106] + amp[556] + amp[562] - - std::complex<double> (0, 1) * amp[565] - amp[566] - std::complex<double> - (0, 1) * amp[567] - amp[568] - std::complex<double> (0, 1) * amp[569] - - std::complex<double> (0, 1) * amp[571] - amp[572] - std::complex<double> - (0, 1) * amp[573] - amp[574] - std::complex<double> (0, 1) * amp[575] - - std::complex<double> (0, 1) * amp[589] - amp[590] - amp[592] - - std::complex<double> (0, 1) * amp[595] - amp[596] - amp[598] + amp[602] - - amp[600] + amp[605] - amp[603] + amp[608] - amp[606] + amp[611] - - amp[609] + std::complex<double> (0, 1) * amp[676] - std::complex<double> - (0, 1) * amp[678] - std::complex<double> (0, 1) * amp[679] - - std::complex<double> (0, 1) * amp[681] + std::complex<double> (0, 1) * - amp[685] - amp[686] - std::complex<double> (0, 1) * amp[687] - - std::complex<double> (0, 1) * amp[688] + std::complex<double> (0, 1) * - amp[694] - std::complex<double> (0, 1) * amp[696] - std::complex<double> - (0, 1) * amp[697] - std::complex<double> (0, 1) * amp[699] + - std::complex<double> (0, 1) * amp[703] - amp[704] - std::complex<double> - (0, 1) * amp[705] - std::complex<double> (0, 1) * amp[706] + amp[709] - - std::complex<double> (0, 1) * amp[710] + amp[711] - std::complex<double> - (0, 1) * amp[713] + amp[714] + amp[717] - std::complex<double> (0, 1) * - amp[718] + amp[719] - std::complex<double> (0, 1) * amp[721] + amp[722] + - std::complex<double> (0, 1) * amp[866] + std::complex<double> (0, 1) * - amp[868] - amp[869] - std::complex<double> (0, 1) * amp[872] + - std::complex<double> (0, 1) * amp[870] + std::complex<double> (0, 1) * - amp[875] - amp[876] + std::complex<double> (0, 1) * amp[877] - - std::complex<double> (0, 1) * amp[881] + std::complex<double> (0, 1) * - amp[879] + std::complex<double> (0, 1) * amp[884] + std::complex<double> - (0, 1) * amp[886] - amp[887] - std::complex<double> (0, 1) * amp[890] + - std::complex<double> (0, 1) * amp[888] + std::complex<double> (0, 1) * - amp[893] - amp[894] + std::complex<double> (0, 1) * amp[895] - - std::complex<double> (0, 1) * amp[899] + std::complex<double> (0, 1) * - amp[897] + std::complex<double> (0, 1) * amp[900] - std::complex<double> - (0, 1) * amp[904] + amp[905] + std::complex<double> (0, 1) * amp[908] - - std::complex<double> (0, 1) * amp[906] - std::complex<double> (0, 1) * - amp[913] + std::complex<double> (0, 1) * amp[917] - std::complex<double> - (0, 1) * amp[915] + std::complex<double> (0, 1) * amp[918] - - std::complex<double> (0, 1) * amp[922] + amp[923] + std::complex<double> - (0, 1) * amp[926] - std::complex<double> (0, 1) * amp[924] - - std::complex<double> (0, 1) * amp[931] + std::complex<double> (0, 1) * - amp[935] - std::complex<double> (0, 1) * amp[933] - std::complex<double> - (0, 1) * amp[965] + std::complex<double> (0, 1) * amp[963] + amp[968] - - amp[966] - std::complex<double> (0, 1) * amp[971] + std::complex<double> - (0, 1) * amp[969] - std::complex<double> (0, 1) * amp[977] + - std::complex<double> (0, 1) * amp[975] + amp[980] - amp[978] - - std::complex<double> (0, 1) * amp[983] + std::complex<double> (0, 1) * - amp[981] + amp[1008] + amp[1009] - std::complex<double> (0, 1) * - amp[1011] - std::complex<double> (0, 1) * amp[1012] - - std::complex<double> (0, 1) * amp[1017] - std::complex<double> (0, 1) * - amp[1018] + amp[1020] + amp[1021] - std::complex<double> (0, 1) * - amp[1023] - std::complex<double> (0, 1) * amp[1024] - - std::complex<double> (0, 1) * amp[1029] - std::complex<double> (0, 1) * - amp[1030]; - jamp[2] = +amp[3] + amp[9] + amp[44] + amp[47] + amp[49] + amp[50] + amp[53] - + amp[55] + std::complex<double> (0, 1) * amp[56] + std::complex<double> - (0, 1) * amp[57] + std::complex<double> (0, 1) * amp[58] + - std::complex<double> (0, 1) * amp[59] + amp[61] + std::complex<double> - (0, 1) * amp[62] + amp[64] + amp[67] + std::complex<double> (0, 1) * - amp[68] + amp[70] - std::complex<double> (0, 1) * amp[72] + amp[73] - - std::complex<double> (0, 1) * amp[75] + amp[76] - std::complex<double> - (0, 1) * amp[77] - std::complex<double> (0, 1) * amp[78] + amp[79] - - std::complex<double> (0, 1) * amp[81] + amp[82] - std::complex<double> - (0, 1) * amp[83] - amp[98] - amp[97] - amp[101] - amp[100] - amp[104] - - amp[103] - amp[107] - amp[106] + amp[614] + amp[620] - - std::complex<double> (0, 1) * amp[637] - amp[638] - std::complex<double> - (0, 1) * amp[639] - amp[640] - std::complex<double> (0, 1) * amp[641] - - std::complex<double> (0, 1) * amp[643] - amp[644] - std::complex<double> - (0, 1) * amp[645] - amp[646] - std::complex<double> (0, 1) * amp[647] + - std::complex<double> (0, 1) * amp[649] + amp[650] + amp[652] + - std::complex<double> (0, 1) * amp[655] + amp[656] + amp[658] + amp[660] + - amp[661] + amp[663] + amp[664] + amp[666] + amp[667] + amp[669] + - amp[670] + std::complex<double> (0, 1) * amp[726] - std::complex<double> - (0, 1) * amp[732] + std::complex<double> (0, 1) * amp[730] - - std::complex<double> (0, 1) * amp[734] + std::complex<double> (0, 1) * - amp[735] - amp[736] - std::complex<double> (0, 1) * amp[741] + - std::complex<double> (0, 1) * amp[739] + std::complex<double> (0, 1) * - amp[744] - std::complex<double> (0, 1) * amp[750] + std::complex<double> - (0, 1) * amp[748] - std::complex<double> (0, 1) * amp[752] + - std::complex<double> (0, 1) * amp[753] - amp[754] - std::complex<double> - (0, 1) * amp[759] + std::complex<double> (0, 1) * amp[757] - amp[761] + - std::complex<double> (0, 1) * amp[762] - amp[763] + std::complex<double> - (0, 1) * amp[765] - amp[766] - amp[769] + std::complex<double> (0, 1) * - amp[770] - amp[771] + std::complex<double> (0, 1) * amp[773] - amp[774] - - std::complex<double> (0, 1) * amp[830] - std::complex<double> (0, 1) * - amp[832] + amp[833] + std::complex<double> (0, 1) * amp[836] - - std::complex<double> (0, 1) * amp[834] - std::complex<double> (0, 1) * - amp[839] + amp[840] - std::complex<double> (0, 1) * amp[841] + - std::complex<double> (0, 1) * amp[845] - std::complex<double> (0, 1) * - amp[843] - std::complex<double> (0, 1) * amp[848] - std::complex<double> - (0, 1) * amp[850] + amp[851] + std::complex<double> (0, 1) * amp[854] - - std::complex<double> (0, 1) * amp[852] - std::complex<double> (0, 1) * - amp[857] + amp[858] - std::complex<double> (0, 1) * amp[859] + - std::complex<double> (0, 1) * amp[863] - std::complex<double> (0, 1) * - amp[861] - std::complex<double> (0, 1) * amp[864] - std::complex<double> - (0, 1) * amp[868] + amp[869] - std::complex<double> (0, 1) * amp[870] - - std::complex<double> (0, 1) * amp[871] - std::complex<double> (0, 1) * - amp[877] - std::complex<double> (0, 1) * amp[879] - std::complex<double> - (0, 1) * amp[880] - std::complex<double> (0, 1) * amp[882] - - std::complex<double> (0, 1) * amp[886] + amp[887] - std::complex<double> - (0, 1) * amp[888] - std::complex<double> (0, 1) * amp[889] - - std::complex<double> (0, 1) * amp[895] - std::complex<double> (0, 1) * - amp[897] - std::complex<double> (0, 1) * amp[898] - std::complex<double> - (0, 1) * amp[939] - std::complex<double> (0, 1) * amp[940] + amp[942] + - amp[943] - std::complex<double> (0, 1) * amp[945] - std::complex<double> - (0, 1) * amp[946] - std::complex<double> (0, 1) * amp[951] - - std::complex<double> (0, 1) * amp[952] + amp[954] + amp[955] - - std::complex<double> (0, 1) * amp[957] - std::complex<double> (0, 1) * - amp[958] - amp[1010] - amp[1009] + std::complex<double> (0, 1) * - amp[1013] + std::complex<double> (0, 1) * amp[1012] + - std::complex<double> (0, 1) * amp[1019] + std::complex<double> (0, 1) * - amp[1018] - amp[1022] - amp[1021] + std::complex<double> (0, 1) * - amp[1025] + std::complex<double> (0, 1) * amp[1024] + - std::complex<double> (0, 1) * amp[1031] + std::complex<double> (0, 1) * - amp[1030]; - jamp[3] = +amp[2] + amp[8] + amp[13] + amp[14] + amp[16] + amp[19] + amp[20] - + amp[22] - std::complex<double> (0, 1) * amp[24] - std::complex<double> - (0, 1) * amp[25] - std::complex<double> (0, 1) * amp[26] - - std::complex<double> (0, 1) * amp[27] + std::complex<double> (0, 1) * - amp[72] - amp[73] + std::complex<double> (0, 1) * amp[75] - amp[76] + - std::complex<double> (0, 1) * amp[77] + std::complex<double> (0, 1) * - amp[78] - amp[79] + std::complex<double> (0, 1) * amp[81] - amp[82] + - std::complex<double> (0, 1) * amp[83] + amp[85] - std::complex<double> - (0, 1) * amp[87] + amp[88] + amp[91] - std::complex<double> (0, 1) * - amp[93] + amp[94] + amp[96] + amp[97] + amp[99] + amp[100] + amp[102] + - amp[103] + amp[105] + amp[106] + amp[496] + amp[502] - - std::complex<double> (0, 1) * amp[505] - amp[506] - std::complex<double> - (0, 1) * amp[507] - amp[508] - std::complex<double> (0, 1) * amp[509] - - std::complex<double> (0, 1) * amp[511] - amp[512] - std::complex<double> - (0, 1) * amp[513] - amp[514] - std::complex<double> (0, 1) * amp[515] - - std::complex<double> (0, 1) * amp[529] - amp[530] - amp[532] - - std::complex<double> (0, 1) * amp[535] - amp[536] - amp[538] + amp[542] - - amp[540] + amp[545] - amp[543] + amp[548] - amp[546] + amp[551] - - amp[549] + std::complex<double> (0, 1) * amp[728] - std::complex<double> - (0, 1) * amp[730] - std::complex<double> (0, 1) * amp[731] - - std::complex<double> (0, 1) * amp[733] + std::complex<double> (0, 1) * - amp[737] - amp[738] - std::complex<double> (0, 1) * amp[739] - - std::complex<double> (0, 1) * amp[740] + std::complex<double> (0, 1) * - amp[746] - std::complex<double> (0, 1) * amp[748] - std::complex<double> - (0, 1) * amp[749] - std::complex<double> (0, 1) * amp[751] + - std::complex<double> (0, 1) * amp[755] - amp[756] - std::complex<double> - (0, 1) * amp[757] - std::complex<double> (0, 1) * amp[758] + amp[761] - - std::complex<double> (0, 1) * amp[762] + amp[763] - std::complex<double> - (0, 1) * amp[765] + amp[766] + amp[769] - std::complex<double> (0, 1) * - amp[770] + amp[771] - std::complex<double> (0, 1) * amp[773] + amp[774] + - std::complex<double> (0, 1) * amp[864] + std::complex<double> (0, 1) * - amp[868] - amp[869] + std::complex<double> (0, 1) * amp[870] + - std::complex<double> (0, 1) * amp[871] + std::complex<double> (0, 1) * - amp[877] + std::complex<double> (0, 1) * amp[879] + std::complex<double> - (0, 1) * amp[880] + std::complex<double> (0, 1) * amp[882] + - std::complex<double> (0, 1) * amp[886] - amp[887] + std::complex<double> - (0, 1) * amp[888] + std::complex<double> (0, 1) * amp[889] + - std::complex<double> (0, 1) * amp[895] + std::complex<double> (0, 1) * - amp[897] + std::complex<double> (0, 1) * amp[898] + std::complex<double> - (0, 1) * amp[902] - std::complex<double> (0, 1) * amp[904] + amp[905] - - std::complex<double> (0, 1) * amp[906] - std::complex<double> (0, 1) * - amp[907] + std::complex<double> (0, 1) * amp[911] - amp[912] - - std::complex<double> (0, 1) * amp[913] - std::complex<double> (0, 1) * - amp[915] - std::complex<double> (0, 1) * amp[916] + std::complex<double> - (0, 1) * amp[920] - std::complex<double> (0, 1) * amp[922] + amp[923] - - std::complex<double> (0, 1) * amp[924] - std::complex<double> (0, 1) * - amp[925] + std::complex<double> (0, 1) * amp[929] - amp[930] - - std::complex<double> (0, 1) * amp[931] - std::complex<double> (0, 1) * - amp[933] - std::complex<double> (0, 1) * amp[934] - std::complex<double> - (0, 1) * amp[989] + std::complex<double> (0, 1) * amp[987] + amp[992] - - amp[990] - std::complex<double> (0, 1) * amp[995] + std::complex<double> - (0, 1) * amp[993] - std::complex<double> (0, 1) * amp[1001] + - std::complex<double> (0, 1) * amp[999] + amp[1004] - amp[1002] - - std::complex<double> (0, 1) * amp[1007] + std::complex<double> (0, 1) * - amp[1005] + amp[1008] + amp[1009] - std::complex<double> (0, 1) * - amp[1011] - std::complex<double> (0, 1) * amp[1012] - - std::complex<double> (0, 1) * amp[1017] - std::complex<double> (0, 1) * - amp[1018] + amp[1020] + amp[1021] - std::complex<double> (0, 1) * - amp[1023] - std::complex<double> (0, 1) * amp[1024] - - std::complex<double> (0, 1) * amp[1029] - std::complex<double> (0, 1) * - amp[1030]; - jamp[4] = +amp[5] + amp[11] + amp[28] + amp[31] + amp[33] + amp[34] + amp[37] - + amp[39] + std::complex<double> (0, 1) * amp[40] + std::complex<double> - (0, 1) * amp[41] + std::complex<double> (0, 1) * amp[42] + - std::complex<double> (0, 1) * amp[43] - std::complex<double> (0, 1) * - amp[60] + amp[61] - std::complex<double> (0, 1) * amp[63] + amp[64] - - std::complex<double> (0, 1) * amp[65] - std::complex<double> (0, 1) * - amp[66] + amp[67] - std::complex<double> (0, 1) * amp[69] + amp[70] - - std::complex<double> (0, 1) * amp[71] + amp[73] + std::complex<double> - (0, 1) * amp[74] + amp[76] + amp[79] + std::complex<double> (0, 1) * - amp[80] + amp[82] - amp[98] - amp[97] - amp[101] - amp[100] - amp[104] - - amp[103] - amp[107] - amp[106] + amp[554] + amp[560] - - std::complex<double> (0, 1) * amp[577] - amp[578] - std::complex<double> - (0, 1) * amp[579] - amp[580] - std::complex<double> (0, 1) * amp[581] - - std::complex<double> (0, 1) * amp[583] - amp[584] - std::complex<double> - (0, 1) * amp[585] - amp[586] - std::complex<double> (0, 1) * amp[587] + - std::complex<double> (0, 1) * amp[589] + amp[590] + amp[592] + - std::complex<double> (0, 1) * amp[595] + amp[596] + amp[598] + amp[600] + - amp[601] + amp[603] + amp[604] + amp[606] + amp[607] + amp[609] + - amp[610] + std::complex<double> (0, 1) * amp[778] - std::complex<double> - (0, 1) * amp[784] + std::complex<double> (0, 1) * amp[782] - - std::complex<double> (0, 1) * amp[786] + std::complex<double> (0, 1) * - amp[787] - amp[788] - std::complex<double> (0, 1) * amp[793] + - std::complex<double> (0, 1) * amp[791] + std::complex<double> (0, 1) * - amp[796] - std::complex<double> (0, 1) * amp[802] + std::complex<double> - (0, 1) * amp[800] - std::complex<double> (0, 1) * amp[804] + - std::complex<double> (0, 1) * amp[805] - amp[806] - std::complex<double> - (0, 1) * amp[811] + std::complex<double> (0, 1) * amp[809] - amp[813] + - std::complex<double> (0, 1) * amp[814] - amp[815] + std::complex<double> - (0, 1) * amp[817] - amp[818] - amp[821] + std::complex<double> (0, 1) * - amp[822] - amp[823] + std::complex<double> (0, 1) * amp[825] - amp[826] - - std::complex<double> (0, 1) * amp[828] - std::complex<double> (0, 1) * - amp[832] + amp[833] - std::complex<double> (0, 1) * amp[834] - - std::complex<double> (0, 1) * amp[835] - std::complex<double> (0, 1) * - amp[841] - std::complex<double> (0, 1) * amp[843] - std::complex<double> - (0, 1) * amp[844] - std::complex<double> (0, 1) * amp[846] - - std::complex<double> (0, 1) * amp[850] + amp[851] - std::complex<double> - (0, 1) * amp[852] - std::complex<double> (0, 1) * amp[853] - - std::complex<double> (0, 1) * amp[859] - std::complex<double> (0, 1) * - amp[861] - std::complex<double> (0, 1) * amp[862] - std::complex<double> - (0, 1) * amp[866] - std::complex<double> (0, 1) * amp[868] + amp[869] + - std::complex<double> (0, 1) * amp[872] - std::complex<double> (0, 1) * - amp[870] - std::complex<double> (0, 1) * amp[875] + amp[876] - - std::complex<double> (0, 1) * amp[877] + std::complex<double> (0, 1) * - amp[881] - std::complex<double> (0, 1) * amp[879] - std::complex<double> - (0, 1) * amp[884] - std::complex<double> (0, 1) * amp[886] + amp[887] + - std::complex<double> (0, 1) * amp[890] - std::complex<double> (0, 1) * - amp[888] - std::complex<double> (0, 1) * amp[893] + amp[894] - - std::complex<double> (0, 1) * amp[895] + std::complex<double> (0, 1) * - amp[899] - std::complex<double> (0, 1) * amp[897] - std::complex<double> - (0, 1) * amp[963] - std::complex<double> (0, 1) * amp[964] + amp[966] + - amp[967] - std::complex<double> (0, 1) * amp[969] - std::complex<double> - (0, 1) * amp[970] - std::complex<double> (0, 1) * amp[975] - - std::complex<double> (0, 1) * amp[976] + amp[978] + amp[979] - - std::complex<double> (0, 1) * amp[981] - std::complex<double> (0, 1) * - amp[982] - amp[1010] - amp[1009] + std::complex<double> (0, 1) * - amp[1013] + std::complex<double> (0, 1) * amp[1012] + - std::complex<double> (0, 1) * amp[1019] + std::complex<double> (0, 1) * - amp[1018] - amp[1022] - amp[1021] + std::complex<double> (0, 1) * - amp[1025] + std::complex<double> (0, 1) * amp[1024] + - std::complex<double> (0, 1) * amp[1031] + std::complex<double> (0, 1) * - amp[1030]; - jamp[5] = +amp[4] + amp[10] + amp[12] + amp[15] + amp[17] + amp[18] + amp[21] - + amp[23] + std::complex<double> (0, 1) * amp[24] + std::complex<double> - (0, 1) * amp[25] + std::complex<double> (0, 1) * amp[26] + - std::complex<double> (0, 1) * amp[27] + std::complex<double> (0, 1) * - amp[60] - amp[61] + std::complex<double> (0, 1) * amp[63] - amp[64] + - std::complex<double> (0, 1) * amp[65] + std::complex<double> (0, 1) * - amp[66] - amp[67] + std::complex<double> (0, 1) * amp[69] - amp[70] + - std::complex<double> (0, 1) * amp[71] - amp[85] + std::complex<double> - (0, 1) * amp[87] - amp[88] - amp[91] + std::complex<double> (0, 1) * - amp[93] - amp[94] + amp[98] - amp[96] + amp[101] - amp[99] + amp[104] - - amp[102] + amp[107] - amp[105] + amp[494] + amp[500] - - std::complex<double> (0, 1) * amp[517] - amp[518] - std::complex<double> - (0, 1) * amp[519] - amp[520] - std::complex<double> (0, 1) * amp[521] - - std::complex<double> (0, 1) * amp[523] - amp[524] - std::complex<double> - (0, 1) * amp[525] - amp[526] - std::complex<double> (0, 1) * amp[527] + - std::complex<double> (0, 1) * amp[529] + amp[530] + amp[532] + - std::complex<double> (0, 1) * amp[535] + amp[536] + amp[538] + amp[540] + - amp[541] + amp[543] + amp[544] + amp[546] + amp[547] + amp[549] + - amp[550] + std::complex<double> (0, 1) * amp[780] - std::complex<double> - (0, 1) * amp[782] - std::complex<double> (0, 1) * amp[783] - - std::complex<double> (0, 1) * amp[785] + std::complex<double> (0, 1) * - amp[789] - amp[790] - std::complex<double> (0, 1) * amp[791] - - std::complex<double> (0, 1) * amp[792] + std::complex<double> (0, 1) * - amp[798] - std::complex<double> (0, 1) * amp[800] - std::complex<double> - (0, 1) * amp[801] - std::complex<double> (0, 1) * amp[803] + - std::complex<double> (0, 1) * amp[807] - amp[808] - std::complex<double> - (0, 1) * amp[809] - std::complex<double> (0, 1) * amp[810] + amp[813] - - std::complex<double> (0, 1) * amp[814] + amp[815] - std::complex<double> - (0, 1) * amp[817] + amp[818] + amp[821] - std::complex<double> (0, 1) * - amp[822] + amp[823] - std::complex<double> (0, 1) * amp[825] + amp[826] + - std::complex<double> (0, 1) * amp[828] + std::complex<double> (0, 1) * - amp[832] - amp[833] + std::complex<double> (0, 1) * amp[834] + - std::complex<double> (0, 1) * amp[835] + std::complex<double> (0, 1) * - amp[841] + std::complex<double> (0, 1) * amp[843] + std::complex<double> - (0, 1) * amp[844] + std::complex<double> (0, 1) * amp[846] + - std::complex<double> (0, 1) * amp[850] - amp[851] + std::complex<double> - (0, 1) * amp[852] + std::complex<double> (0, 1) * amp[853] + - std::complex<double> (0, 1) * amp[859] + std::complex<double> (0, 1) * - amp[861] + std::complex<double> (0, 1) * amp[862] - std::complex<double> - (0, 1) * amp[902] + std::complex<double> (0, 1) * amp[904] - amp[905] + - std::complex<double> (0, 1) * amp[906] + std::complex<double> (0, 1) * - amp[907] - std::complex<double> (0, 1) * amp[911] + amp[912] + - std::complex<double> (0, 1) * amp[913] + std::complex<double> (0, 1) * - amp[915] + std::complex<double> (0, 1) * amp[916] - std::complex<double> - (0, 1) * amp[920] + std::complex<double> (0, 1) * amp[922] - amp[923] + - std::complex<double> (0, 1) * amp[924] + std::complex<double> (0, 1) * - amp[925] - std::complex<double> (0, 1) * amp[929] + amp[930] + - std::complex<double> (0, 1) * amp[931] + std::complex<double> (0, 1) * - amp[933] + std::complex<double> (0, 1) * amp[934] - std::complex<double> - (0, 1) * amp[987] - std::complex<double> (0, 1) * amp[988] + amp[990] + - amp[991] - std::complex<double> (0, 1) * amp[993] - std::complex<double> - (0, 1) * amp[994] - std::complex<double> (0, 1) * amp[999] - - std::complex<double> (0, 1) * amp[1000] + amp[1002] + amp[1003] - - std::complex<double> (0, 1) * amp[1005] - std::complex<double> (0, 1) * - amp[1006] + amp[1010] - amp[1008] - std::complex<double> (0, 1) * - amp[1013] + std::complex<double> (0, 1) * amp[1011] - - std::complex<double> (0, 1) * amp[1019] + std::complex<double> (0, 1) * - amp[1017] + amp[1022] - amp[1020] - std::complex<double> (0, 1) * - amp[1025] + std::complex<double> (0, 1) * amp[1023] - - std::complex<double> (0, 1) * amp[1031] + std::complex<double> (0, 1) * - amp[1029]; - jamp[6] = +amp[109] + amp[115] + amp[153] + amp[154] + amp[156] + amp[159] + - amp[160] + amp[162] - std::complex<double> (0, 1) * amp[164] - - std::complex<double> (0, 1) * amp[165] - std::complex<double> (0, 1) * - amp[166] - std::complex<double> (0, 1) * amp[167] - amp[169] - - std::complex<double> (0, 1) * amp[170] - amp[172] - amp[175] - - std::complex<double> (0, 1) * amp[176] - amp[178] - std::complex<double> - (0, 1) * amp[192] - amp[193] - std::complex<double> (0, 1) * amp[194] - - amp[196] - std::complex<double> (0, 1) * amp[197] - std::complex<double> - (0, 1) * amp[198] - amp[199] - std::complex<double> (0, 1) * amp[200] - - amp[202] - std::complex<double> (0, 1) * amp[203] + amp[206] - amp[204] + - amp[209] - amp[207] + amp[212] - amp[210] + amp[215] - amp[213] + - amp[617] + amp[623] + std::complex<double> (0, 1) * amp[625] + amp[626] + - std::complex<double> (0, 1) * amp[627] + amp[628] + std::complex<double> - (0, 1) * amp[629] + std::complex<double> (0, 1) * amp[631] + amp[632] + - std::complex<double> (0, 1) * amp[633] + amp[634] + std::complex<double> - (0, 1) * amp[635] - std::complex<double> (0, 1) * amp[636] + amp[638] + - amp[640] - std::complex<double> (0, 1) * amp[642] + amp[644] + amp[646] - - amp[662] - amp[661] - amp[665] - amp[664] - amp[668] - amp[667] - - amp[671] - amp[670] - std::complex<double> (0, 1) * amp[674] + - std::complex<double> (0, 1) * amp[680] - std::complex<double> (0, 1) * - amp[678] + std::complex<double> (0, 1) * amp[682] - std::complex<double> - (0, 1) * amp[683] + amp[684] + std::complex<double> (0, 1) * amp[689] - - std::complex<double> (0, 1) * amp[687] - std::complex<double> (0, 1) * - amp[692] + std::complex<double> (0, 1) * amp[698] - std::complex<double> - (0, 1) * amp[696] + std::complex<double> (0, 1) * amp[700] - - std::complex<double> (0, 1) * amp[701] + amp[702] + std::complex<double> - (0, 1) * amp[707] - std::complex<double> (0, 1) * amp[705] + amp[709] - - std::complex<double> (0, 1) * amp[710] + amp[711] - std::complex<double> - (0, 1) * amp[713] + amp[714] + amp[717] - std::complex<double> (0, 1) * - amp[718] + amp[719] - std::complex<double> (0, 1) * amp[721] + amp[722] - - std::complex<double> (0, 1) * amp[726] - std::complex<double> (0, 1) * - amp[728] - amp[729] + std::complex<double> (0, 1) * amp[732] + - std::complex<double> (0, 1) * amp[731] - std::complex<double> (0, 1) * - amp[735] + amp[736] - std::complex<double> (0, 1) * amp[737] + - std::complex<double> (0, 1) * amp[741] + std::complex<double> (0, 1) * - amp[740] - std::complex<double> (0, 1) * amp[744] - std::complex<double> - (0, 1) * amp[746] - amp[747] + std::complex<double> (0, 1) * amp[750] + - std::complex<double> (0, 1) * amp[749] - std::complex<double> (0, 1) * - amp[753] + amp[754] - std::complex<double> (0, 1) * amp[755] + - std::complex<double> (0, 1) * amp[759] + std::complex<double> (0, 1) * - amp[758] - std::complex<double> (0, 1) * amp[901] - std::complex<double> - (0, 1) * amp[902] - amp[903] + std::complex<double> (0, 1) * amp[908] + - std::complex<double> (0, 1) * amp[907] - std::complex<double> (0, 1) * - amp[911] + std::complex<double> (0, 1) * amp[917] + std::complex<double> - (0, 1) * amp[916] - std::complex<double> (0, 1) * amp[919] - - std::complex<double> (0, 1) * amp[920] - amp[921] + std::complex<double> - (0, 1) * amp[926] + std::complex<double> (0, 1) * amp[925] - - std::complex<double> (0, 1) * amp[929] + std::complex<double> (0, 1) * - amp[935] + std::complex<double> (0, 1) * amp[934] + std::complex<double> - (0, 1) * amp[941] + std::complex<double> (0, 1) * amp[940] - amp[944] - - amp[943] + std::complex<double> (0, 1) * amp[947] + std::complex<double> - (0, 1) * amp[946] + std::complex<double> (0, 1) * amp[953] + - std::complex<double> (0, 1) * amp[952] - amp[956] - amp[955] + - std::complex<double> (0, 1) * amp[959] + std::complex<double> (0, 1) * - amp[958] + amp[986] - amp[984] + std::complex<double> (0, 1) * amp[989] - - std::complex<double> (0, 1) * amp[987] + std::complex<double> (0, 1) * - amp[995] - std::complex<double> (0, 1) * amp[993] + amp[998] - amp[996] + - std::complex<double> (0, 1) * amp[1001] - std::complex<double> (0, 1) * - amp[999] + std::complex<double> (0, 1) * amp[1007] - std::complex<double> - (0, 1) * amp[1005]; - jamp[7] = +amp[108] + amp[114] + amp[137] + amp[138] + amp[140] + amp[143] + - amp[144] + amp[146] - std::complex<double> (0, 1) * amp[148] - - std::complex<double> (0, 1) * amp[149] - std::complex<double> (0, 1) * - amp[150] - std::complex<double> (0, 1) * amp[151] - amp[181] - - std::complex<double> (0, 1) * amp[182] - amp[184] - amp[187] - - std::complex<double> (0, 1) * amp[188] - amp[190] + std::complex<double> - (0, 1) * amp[192] + amp[193] + std::complex<double> (0, 1) * amp[194] + - amp[196] + std::complex<double> (0, 1) * amp[197] + std::complex<double> - (0, 1) * amp[198] + amp[199] + std::complex<double> (0, 1) * amp[200] + - amp[202] + std::complex<double> (0, 1) * amp[203] + amp[204] + amp[205] + - amp[207] + amp[208] + amp[210] + amp[211] + amp[213] + amp[214] + - amp[557] + amp[563] + std::complex<double> (0, 1) * amp[565] + amp[566] + - std::complex<double> (0, 1) * amp[567] + amp[568] + std::complex<double> - (0, 1) * amp[569] + std::complex<double> (0, 1) * amp[571] + amp[572] + - std::complex<double> (0, 1) * amp[573] + amp[574] + std::complex<double> - (0, 1) * amp[575] - std::complex<double> (0, 1) * amp[576] + amp[578] + - amp[580] - std::complex<double> (0, 1) * amp[582] + amp[584] + amp[586] - - amp[602] - amp[601] - amp[605] - amp[604] - amp[608] - amp[607] - - amp[611] - amp[610] - std::complex<double> (0, 1) * amp[676] + - std::complex<double> (0, 1) * amp[678] + std::complex<double> (0, 1) * - amp[679] + std::complex<double> (0, 1) * amp[681] - std::complex<double> - (0, 1) * amp[685] + amp[686] + std::complex<double> (0, 1) * amp[687] + - std::complex<double> (0, 1) * amp[688] - std::complex<double> (0, 1) * - amp[694] + std::complex<double> (0, 1) * amp[696] + std::complex<double> - (0, 1) * amp[697] + std::complex<double> (0, 1) * amp[699] - - std::complex<double> (0, 1) * amp[703] + amp[704] + std::complex<double> - (0, 1) * amp[705] + std::complex<double> (0, 1) * amp[706] - amp[709] + - std::complex<double> (0, 1) * amp[710] - amp[711] + std::complex<double> - (0, 1) * amp[713] - amp[714] - amp[717] + std::complex<double> (0, 1) * - amp[718] - amp[719] + std::complex<double> (0, 1) * amp[721] - amp[722] - - std::complex<double> (0, 1) * amp[778] - std::complex<double> (0, 1) * - amp[780] - amp[781] + std::complex<double> (0, 1) * amp[784] + - std::complex<double> (0, 1) * amp[783] - std::complex<double> (0, 1) * - amp[787] + amp[788] - std::complex<double> (0, 1) * amp[789] + - std::complex<double> (0, 1) * amp[793] + std::complex<double> (0, 1) * - amp[792] - std::complex<double> (0, 1) * amp[796] - std::complex<double> - (0, 1) * amp[798] - amp[799] + std::complex<double> (0, 1) * amp[802] + - std::complex<double> (0, 1) * amp[801] - std::complex<double> (0, 1) * - amp[805] + amp[806] - std::complex<double> (0, 1) * amp[807] + - std::complex<double> (0, 1) * amp[811] + std::complex<double> (0, 1) * - amp[810] + std::complex<double> (0, 1) * amp[901] + std::complex<double> - (0, 1) * amp[902] + amp[903] - std::complex<double> (0, 1) * amp[908] - - std::complex<double> (0, 1) * amp[907] + std::complex<double> (0, 1) * - amp[911] - std::complex<double> (0, 1) * amp[917] - std::complex<double> - (0, 1) * amp[916] + std::complex<double> (0, 1) * amp[919] + - std::complex<double> (0, 1) * amp[920] + amp[921] - std::complex<double> - (0, 1) * amp[926] - std::complex<double> (0, 1) * amp[925] + - std::complex<double> (0, 1) * amp[929] - std::complex<double> (0, 1) * - amp[935] - std::complex<double> (0, 1) * amp[934] + std::complex<double> - (0, 1) * amp[965] + std::complex<double> (0, 1) * amp[964] - amp[968] - - amp[967] + std::complex<double> (0, 1) * amp[971] + std::complex<double> - (0, 1) * amp[970] + std::complex<double> (0, 1) * amp[977] + - std::complex<double> (0, 1) * amp[976] - amp[980] - amp[979] + - std::complex<double> (0, 1) * amp[983] + std::complex<double> (0, 1) * - amp[982] + amp[984] + amp[985] + std::complex<double> (0, 1) * amp[987] + - std::complex<double> (0, 1) * amp[988] + std::complex<double> (0, 1) * - amp[993] + std::complex<double> (0, 1) * amp[994] + amp[996] + amp[997] + - std::complex<double> (0, 1) * amp[999] + std::complex<double> (0, 1) * - amp[1000] + std::complex<double> (0, 1) * amp[1005] + - std::complex<double> (0, 1) * amp[1006]; - jamp[8] = +amp[111] + amp[117] + amp[152] + amp[155] + amp[157] + amp[158] + - amp[161] + amp[163] + std::complex<double> (0, 1) * amp[164] + - std::complex<double> (0, 1) * amp[165] + std::complex<double> (0, 1) * - amp[166] + std::complex<double> (0, 1) * amp[167] + amp[169] + - std::complex<double> (0, 1) * amp[170] + amp[172] + amp[175] + - std::complex<double> (0, 1) * amp[176] + amp[178] - std::complex<double> - (0, 1) * amp[180] + amp[181] - std::complex<double> (0, 1) * amp[183] + - amp[184] - std::complex<double> (0, 1) * amp[185] - std::complex<double> - (0, 1) * amp[186] + amp[187] - std::complex<double> (0, 1) * amp[189] + - amp[190] - std::complex<double> (0, 1) * amp[191] - amp[206] - amp[205] - - amp[209] - amp[208] - amp[212] - amp[211] - amp[215] - amp[214] + - amp[612] + amp[618] + std::complex<double> (0, 1) * amp[636] - amp[638] - - amp[640] + std::complex<double> (0, 1) * amp[642] - amp[644] - amp[646] - - std::complex<double> (0, 1) * amp[648] + amp[650] - std::complex<double> - (0, 1) * amp[651] + amp[652] - std::complex<double> (0, 1) * amp[653] - - std::complex<double> (0, 1) * amp[654] + amp[656] - std::complex<double> - (0, 1) * amp[657] + amp[658] - std::complex<double> (0, 1) * amp[659] + - amp[660] + amp[661] + amp[663] + amp[664] + amp[666] + amp[667] + - amp[669] + amp[670] + std::complex<double> (0, 1) * amp[726] + - std::complex<double> (0, 1) * amp[728] + amp[729] - std::complex<double> - (0, 1) * amp[732] - std::complex<double> (0, 1) * amp[731] + - std::complex<double> (0, 1) * amp[735] - amp[736] + std::complex<double> - (0, 1) * amp[737] - std::complex<double> (0, 1) * amp[741] - - std::complex<double> (0, 1) * amp[740] + std::complex<double> (0, 1) * - amp[744] + std::complex<double> (0, 1) * amp[746] + amp[747] - - std::complex<double> (0, 1) * amp[750] - std::complex<double> (0, 1) * - amp[749] + std::complex<double> (0, 1) * amp[753] - amp[754] + - std::complex<double> (0, 1) * amp[755] - std::complex<double> (0, 1) * - amp[759] - std::complex<double> (0, 1) * amp[758] - std::complex<double> - (0, 1) * amp[776] + std::complex<double> (0, 1) * amp[780] + amp[781] - - std::complex<double> (0, 1) * amp[782] - std::complex<double> (0, 1) * - amp[783] + std::complex<double> (0, 1) * amp[789] - std::complex<double> - (0, 1) * amp[791] - std::complex<double> (0, 1) * amp[792] - - std::complex<double> (0, 1) * amp[794] + std::complex<double> (0, 1) * - amp[798] + amp[799] - std::complex<double> (0, 1) * amp[800] - - std::complex<double> (0, 1) * amp[801] + std::complex<double> (0, 1) * - amp[807] - std::complex<double> (0, 1) * amp[809] - std::complex<double> - (0, 1) * amp[810] - amp[812] - std::complex<double> (0, 1) * amp[814] - - amp[816] - std::complex<double> (0, 1) * amp[817] - amp[819] - amp[820] - - std::complex<double> (0, 1) * amp[822] - amp[824] - std::complex<double> - (0, 1) * amp[825] - amp[827] - std::complex<double> (0, 1) * amp[830] + - std::complex<double> (0, 1) * amp[836] + std::complex<double> (0, 1) * - amp[835] - std::complex<double> (0, 1) * amp[838] - std::complex<double> - (0, 1) * amp[839] + amp[840] + std::complex<double> (0, 1) * amp[845] + - std::complex<double> (0, 1) * amp[844] - std::complex<double> (0, 1) * - amp[848] + std::complex<double> (0, 1) * amp[854] + std::complex<double> - (0, 1) * amp[853] - std::complex<double> (0, 1) * amp[856] - - std::complex<double> (0, 1) * amp[857] + amp[858] + std::complex<double> - (0, 1) * amp[863] + std::complex<double> (0, 1) * amp[862] - - std::complex<double> (0, 1) * amp[939] - std::complex<double> (0, 1) * - amp[940] + amp[942] + amp[943] - std::complex<double> (0, 1) * amp[945] - - std::complex<double> (0, 1) * amp[946] - std::complex<double> (0, 1) * - amp[951] - std::complex<double> (0, 1) * amp[952] + amp[954] + amp[955] - - std::complex<double> (0, 1) * amp[957] - std::complex<double> (0, 1) * - amp[958] - amp[986] - amp[985] - std::complex<double> (0, 1) * amp[989] - - std::complex<double> (0, 1) * amp[988] - std::complex<double> (0, 1) * - amp[995] - std::complex<double> (0, 1) * amp[994] - amp[998] - amp[997] - - std::complex<double> (0, 1) * amp[1001] - std::complex<double> (0, 1) * - amp[1000] - std::complex<double> (0, 1) * amp[1007] - - std::complex<double> (0, 1) * amp[1006]; - jamp[9] = +amp[110] + amp[116] + amp[121] + amp[122] + amp[124] + amp[127] + - amp[128] + amp[130] - std::complex<double> (0, 1) * amp[132] - - std::complex<double> (0, 1) * amp[133] - std::complex<double> (0, 1) * - amp[134] - std::complex<double> (0, 1) * amp[135] + std::complex<double> - (0, 1) * amp[180] - amp[181] + std::complex<double> (0, 1) * amp[183] - - amp[184] + std::complex<double> (0, 1) * amp[185] + std::complex<double> - (0, 1) * amp[186] - amp[187] + std::complex<double> (0, 1) * amp[189] - - amp[190] + std::complex<double> (0, 1) * amp[191] + amp[193] - - std::complex<double> (0, 1) * amp[195] + amp[196] + amp[199] - - std::complex<double> (0, 1) * amp[201] + amp[202] + amp[204] + amp[205] + - amp[207] + amp[208] + amp[210] + amp[211] + amp[213] + amp[214] + - amp[436] + amp[442] - std::complex<double> (0, 1) * amp[445] - amp[446] - - std::complex<double> (0, 1) * amp[447] - amp[448] - std::complex<double> - (0, 1) * amp[449] - std::complex<double> (0, 1) * amp[451] - amp[452] - - std::complex<double> (0, 1) * amp[453] - amp[454] - std::complex<double> - (0, 1) * amp[455] - std::complex<double> (0, 1) * amp[469] - amp[470] - - amp[472] - std::complex<double> (0, 1) * amp[475] - amp[476] - amp[478] + - amp[482] - amp[480] + amp[485] - amp[483] + amp[488] - amp[486] + - amp[491] - amp[489] + std::complex<double> (0, 1) * amp[776] - - std::complex<double> (0, 1) * amp[780] - amp[781] + std::complex<double> - (0, 1) * amp[782] + std::complex<double> (0, 1) * amp[783] - - std::complex<double> (0, 1) * amp[789] + std::complex<double> (0, 1) * - amp[791] + std::complex<double> (0, 1) * amp[792] + std::complex<double> - (0, 1) * amp[794] - std::complex<double> (0, 1) * amp[798] - amp[799] + - std::complex<double> (0, 1) * amp[800] + std::complex<double> (0, 1) * - amp[801] - std::complex<double> (0, 1) * amp[807] + std::complex<double> - (0, 1) * amp[809] + std::complex<double> (0, 1) * amp[810] + amp[812] + - std::complex<double> (0, 1) * amp[814] + amp[816] + std::complex<double> - (0, 1) * amp[817] + amp[819] + amp[820] + std::complex<double> (0, 1) * - amp[822] + amp[824] + std::complex<double> (0, 1) * amp[825] + amp[827] - - std::complex<double> (0, 1) * amp[832] - std::complex<double> (0, 1) * - amp[834] - std::complex<double> (0, 1) * amp[835] - std::complex<double> - (0, 1) * amp[837] - std::complex<double> (0, 1) * amp[841] - amp[842] - - std::complex<double> (0, 1) * amp[843] - std::complex<double> (0, 1) * - amp[844] - std::complex<double> (0, 1) * amp[850] - std::complex<double> - (0, 1) * amp[852] - std::complex<double> (0, 1) * amp[853] - - std::complex<double> (0, 1) * amp[855] - std::complex<double> (0, 1) * - amp[859] - amp[860] - std::complex<double> (0, 1) * amp[861] - - std::complex<double> (0, 1) * amp[862] + std::complex<double> (0, 1) * - amp[902] + amp[903] - std::complex<double> (0, 1) * amp[904] - - std::complex<double> (0, 1) * amp[906] - std::complex<double> (0, 1) * - amp[907] + std::complex<double> (0, 1) * amp[911] - std::complex<double> - (0, 1) * amp[913] - amp[914] - std::complex<double> (0, 1) * amp[915] - - std::complex<double> (0, 1) * amp[916] + std::complex<double> (0, 1) * - amp[920] + amp[921] - std::complex<double> (0, 1) * amp[922] - - std::complex<double> (0, 1) * amp[924] - std::complex<double> (0, 1) * - amp[925] + std::complex<double> (0, 1) * amp[929] - std::complex<double> - (0, 1) * amp[931] - amp[932] - std::complex<double> (0, 1) * amp[933] - - std::complex<double> (0, 1) * amp[934] + amp[984] + amp[985] + - std::complex<double> (0, 1) * amp[987] + std::complex<double> (0, 1) * - amp[988] + std::complex<double> (0, 1) * amp[993] + std::complex<double> - (0, 1) * amp[994] + amp[996] + amp[997] + std::complex<double> (0, 1) * - amp[999] + std::complex<double> (0, 1) * amp[1000] + std::complex<double> - (0, 1) * amp[1005] + std::complex<double> (0, 1) * amp[1006] + - std::complex<double> (0, 1) * amp[1013] - std::complex<double> (0, 1) * - amp[1011] + amp[1016] - amp[1014] + std::complex<double> (0, 1) * - amp[1019] - std::complex<double> (0, 1) * amp[1017] + - std::complex<double> (0, 1) * amp[1025] - std::complex<double> (0, 1) * - amp[1023] + amp[1028] - amp[1026] + std::complex<double> (0, 1) * - amp[1031] - std::complex<double> (0, 1) * amp[1029]; - jamp[10] = +amp[113] + amp[119] + amp[136] + amp[139] + amp[141] + amp[142] + - amp[145] + amp[147] + std::complex<double> (0, 1) * amp[148] + - std::complex<double> (0, 1) * amp[149] + std::complex<double> (0, 1) * - amp[150] + std::complex<double> (0, 1) * amp[151] - std::complex<double> - (0, 1) * amp[168] + amp[169] - std::complex<double> (0, 1) * amp[171] + - amp[172] - std::complex<double> (0, 1) * amp[173] - std::complex<double> - (0, 1) * amp[174] + amp[175] - std::complex<double> (0, 1) * amp[177] + - amp[178] - std::complex<double> (0, 1) * amp[179] + amp[181] + - std::complex<double> (0, 1) * amp[182] + amp[184] + amp[187] + - std::complex<double> (0, 1) * amp[188] + amp[190] - amp[206] - amp[205] - - amp[209] - amp[208] - amp[212] - amp[211] - amp[215] - amp[214] + - amp[552] + amp[558] + std::complex<double> (0, 1) * amp[576] - amp[578] - - amp[580] + std::complex<double> (0, 1) * amp[582] - amp[584] - amp[586] - - std::complex<double> (0, 1) * amp[588] + amp[590] - std::complex<double> - (0, 1) * amp[591] + amp[592] - std::complex<double> (0, 1) * amp[593] - - std::complex<double> (0, 1) * amp[594] + amp[596] - std::complex<double> - (0, 1) * amp[597] + amp[598] - std::complex<double> (0, 1) * amp[599] + - amp[600] + amp[601] + amp[603] + amp[604] + amp[606] + amp[607] + - amp[609] + amp[610] - std::complex<double> (0, 1) * amp[724] + - std::complex<double> (0, 1) * amp[728] + amp[729] - std::complex<double> - (0, 1) * amp[730] - std::complex<double> (0, 1) * amp[731] + - std::complex<double> (0, 1) * amp[737] - std::complex<double> (0, 1) * - amp[739] - std::complex<double> (0, 1) * amp[740] - std::complex<double> - (0, 1) * amp[742] + std::complex<double> (0, 1) * amp[746] + amp[747] - - std::complex<double> (0, 1) * amp[748] - std::complex<double> (0, 1) * - amp[749] + std::complex<double> (0, 1) * amp[755] - std::complex<double> - (0, 1) * amp[757] - std::complex<double> (0, 1) * amp[758] - amp[760] - - std::complex<double> (0, 1) * amp[762] - amp[764] - std::complex<double> - (0, 1) * amp[765] - amp[767] - amp[768] - std::complex<double> (0, 1) * - amp[770] - amp[772] - std::complex<double> (0, 1) * amp[773] - amp[775] + - std::complex<double> (0, 1) * amp[778] + std::complex<double> (0, 1) * - amp[780] + amp[781] - std::complex<double> (0, 1) * amp[784] - - std::complex<double> (0, 1) * amp[783] + std::complex<double> (0, 1) * - amp[787] - amp[788] + std::complex<double> (0, 1) * amp[789] - - std::complex<double> (0, 1) * amp[793] - std::complex<double> (0, 1) * - amp[792] + std::complex<double> (0, 1) * amp[796] + std::complex<double> - (0, 1) * amp[798] + amp[799] - std::complex<double> (0, 1) * amp[802] - - std::complex<double> (0, 1) * amp[801] + std::complex<double> (0, 1) * - amp[805] - amp[806] + std::complex<double> (0, 1) * amp[807] - - std::complex<double> (0, 1) * amp[811] - std::complex<double> (0, 1) * - amp[810] - std::complex<double> (0, 1) * amp[866] + std::complex<double> - (0, 1) * amp[872] + std::complex<double> (0, 1) * amp[871] - - std::complex<double> (0, 1) * amp[874] - std::complex<double> (0, 1) * - amp[875] + amp[876] + std::complex<double> (0, 1) * amp[881] + - std::complex<double> (0, 1) * amp[880] - std::complex<double> (0, 1) * - amp[884] + std::complex<double> (0, 1) * amp[890] + std::complex<double> - (0, 1) * amp[889] - std::complex<double> (0, 1) * amp[892] - - std::complex<double> (0, 1) * amp[893] + amp[894] + std::complex<double> - (0, 1) * amp[899] + std::complex<double> (0, 1) * amp[898] - - std::complex<double> (0, 1) * amp[963] - std::complex<double> (0, 1) * - amp[964] + amp[966] + amp[967] - std::complex<double> (0, 1) * amp[969] - - std::complex<double> (0, 1) * amp[970] - std::complex<double> (0, 1) * - amp[975] - std::complex<double> (0, 1) * amp[976] + amp[978] + amp[979] - - std::complex<double> (0, 1) * amp[981] - std::complex<double> (0, 1) * - amp[982] - amp[986] - amp[985] - std::complex<double> (0, 1) * amp[989] - - std::complex<double> (0, 1) * amp[988] - std::complex<double> (0, 1) * - amp[995] - std::complex<double> (0, 1) * amp[994] - amp[998] - amp[997] - - std::complex<double> (0, 1) * amp[1001] - std::complex<double> (0, 1) * - amp[1000] - std::complex<double> (0, 1) * amp[1007] - - std::complex<double> (0, 1) * amp[1006]; - jamp[11] = +amp[112] + amp[118] + amp[120] + amp[123] + amp[125] + amp[126] + - amp[129] + amp[131] + std::complex<double> (0, 1) * amp[132] + - std::complex<double> (0, 1) * amp[133] + std::complex<double> (0, 1) * - amp[134] + std::complex<double> (0, 1) * amp[135] + std::complex<double> - (0, 1) * amp[168] - amp[169] + std::complex<double> (0, 1) * amp[171] - - amp[172] + std::complex<double> (0, 1) * amp[173] + std::complex<double> - (0, 1) * amp[174] - amp[175] + std::complex<double> (0, 1) * amp[177] - - amp[178] + std::complex<double> (0, 1) * amp[179] - amp[193] + - std::complex<double> (0, 1) * amp[195] - amp[196] - amp[199] + - std::complex<double> (0, 1) * amp[201] - amp[202] + amp[206] - amp[204] + - amp[209] - amp[207] + amp[212] - amp[210] + amp[215] - amp[213] + - amp[434] + amp[440] - std::complex<double> (0, 1) * amp[457] - amp[458] - - std::complex<double> (0, 1) * amp[459] - amp[460] - std::complex<double> - (0, 1) * amp[461] - std::complex<double> (0, 1) * amp[463] - amp[464] - - std::complex<double> (0, 1) * amp[465] - amp[466] - std::complex<double> - (0, 1) * amp[467] + std::complex<double> (0, 1) * amp[469] + amp[470] + - amp[472] + std::complex<double> (0, 1) * amp[475] + amp[476] + amp[478] + - amp[480] + amp[481] + amp[483] + amp[484] + amp[486] + amp[487] + - amp[489] + amp[490] + std::complex<double> (0, 1) * amp[724] - - std::complex<double> (0, 1) * amp[728] - amp[729] + std::complex<double> - (0, 1) * amp[730] + std::complex<double> (0, 1) * amp[731] - - std::complex<double> (0, 1) * amp[737] + std::complex<double> (0, 1) * - amp[739] + std::complex<double> (0, 1) * amp[740] + std::complex<double> - (0, 1) * amp[742] - std::complex<double> (0, 1) * amp[746] - amp[747] + - std::complex<double> (0, 1) * amp[748] + std::complex<double> (0, 1) * - amp[749] - std::complex<double> (0, 1) * amp[755] + std::complex<double> - (0, 1) * amp[757] + std::complex<double> (0, 1) * amp[758] + amp[760] + - std::complex<double> (0, 1) * amp[762] + amp[764] + std::complex<double> - (0, 1) * amp[765] + amp[767] + amp[768] + std::complex<double> (0, 1) * - amp[770] + amp[772] + std::complex<double> (0, 1) * amp[773] + amp[775] - - std::complex<double> (0, 1) * amp[868] - std::complex<double> (0, 1) * - amp[870] - std::complex<double> (0, 1) * amp[871] - std::complex<double> - (0, 1) * amp[873] - std::complex<double> (0, 1) * amp[877] - amp[878] - - std::complex<double> (0, 1) * amp[879] - std::complex<double> (0, 1) * - amp[880] - std::complex<double> (0, 1) * amp[886] - std::complex<double> - (0, 1) * amp[888] - std::complex<double> (0, 1) * amp[889] - - std::complex<double> (0, 1) * amp[891] - std::complex<double> (0, 1) * - amp[895] - amp[896] - std::complex<double> (0, 1) * amp[897] - - std::complex<double> (0, 1) * amp[898] - std::complex<double> (0, 1) * - amp[902] - amp[903] + std::complex<double> (0, 1) * amp[904] + - std::complex<double> (0, 1) * amp[906] + std::complex<double> (0, 1) * - amp[907] - std::complex<double> (0, 1) * amp[911] + std::complex<double> - (0, 1) * amp[913] + amp[914] + std::complex<double> (0, 1) * amp[915] + - std::complex<double> (0, 1) * amp[916] - std::complex<double> (0, 1) * - amp[920] - amp[921] + std::complex<double> (0, 1) * amp[922] + - std::complex<double> (0, 1) * amp[924] + std::complex<double> (0, 1) * - amp[925] - std::complex<double> (0, 1) * amp[929] + std::complex<double> - (0, 1) * amp[931] + amp[932] + std::complex<double> (0, 1) * amp[933] + - std::complex<double> (0, 1) * amp[934] + amp[986] - amp[984] + - std::complex<double> (0, 1) * amp[989] - std::complex<double> (0, 1) * - amp[987] + std::complex<double> (0, 1) * amp[995] - std::complex<double> - (0, 1) * amp[993] + amp[998] - amp[996] + std::complex<double> (0, 1) * - amp[1001] - std::complex<double> (0, 1) * amp[999] + std::complex<double> - (0, 1) * amp[1007] - std::complex<double> (0, 1) * amp[1005] + - std::complex<double> (0, 1) * amp[1011] + std::complex<double> (0, 1) * - amp[1012] + amp[1014] + amp[1015] + std::complex<double> (0, 1) * - amp[1017] + std::complex<double> (0, 1) * amp[1018] + - std::complex<double> (0, 1) * amp[1023] + std::complex<double> (0, 1) * - amp[1024] + amp[1026] + amp[1027] + std::complex<double> (0, 1) * - amp[1029] + std::complex<double> (0, 1) * amp[1030]; - jamp[12] = +amp[217] + amp[223] + amp[261] + amp[262] + amp[264] + amp[267] + - amp[268] + amp[270] - std::complex<double> (0, 1) * amp[272] - - std::complex<double> (0, 1) * amp[273] - std::complex<double> (0, 1) * - amp[274] - std::complex<double> (0, 1) * amp[275] - amp[277] - - std::complex<double> (0, 1) * amp[278] - amp[280] - amp[283] - - std::complex<double> (0, 1) * amp[284] - amp[286] - std::complex<double> - (0, 1) * amp[300] - amp[301] - std::complex<double> (0, 1) * amp[302] - - amp[304] - std::complex<double> (0, 1) * amp[305] - std::complex<double> - (0, 1) * amp[306] - amp[307] - std::complex<double> (0, 1) * amp[308] - - amp[310] - std::complex<double> (0, 1) * amp[311] + amp[314] - amp[312] + - amp[317] - amp[315] + amp[320] - amp[318] + amp[323] - amp[321] + - amp[615] + amp[621] - std::complex<double> (0, 1) * amp[624] + amp[626] + - amp[628] - std::complex<double> (0, 1) * amp[630] + amp[632] + amp[634] + - std::complex<double> (0, 1) * amp[637] + amp[638] + std::complex<double> - (0, 1) * amp[639] + amp[640] + std::complex<double> (0, 1) * amp[641] + - std::complex<double> (0, 1) * amp[643] + amp[644] + std::complex<double> - (0, 1) * amp[645] + amp[646] + std::complex<double> (0, 1) * amp[647] - - amp[662] - amp[661] - amp[665] - amp[664] - amp[668] - amp[667] - - amp[671] - amp[670] - std::complex<double> (0, 1) * amp[674] - - std::complex<double> (0, 1) * amp[676] - amp[677] + std::complex<double> - (0, 1) * amp[680] + std::complex<double> (0, 1) * amp[679] - - std::complex<double> (0, 1) * amp[683] + amp[684] - std::complex<double> - (0, 1) * amp[685] + std::complex<double> (0, 1) * amp[689] + - std::complex<double> (0, 1) * amp[688] - std::complex<double> (0, 1) * - amp[692] - std::complex<double> (0, 1) * amp[694] - amp[695] + - std::complex<double> (0, 1) * amp[698] + std::complex<double> (0, 1) * - amp[697] - std::complex<double> (0, 1) * amp[701] + amp[702] - - std::complex<double> (0, 1) * amp[703] + std::complex<double> (0, 1) * - amp[707] + std::complex<double> (0, 1) * amp[706] - std::complex<double> - (0, 1) * amp[726] + std::complex<double> (0, 1) * amp[732] - - std::complex<double> (0, 1) * amp[730] + std::complex<double> (0, 1) * - amp[734] - std::complex<double> (0, 1) * amp[735] + amp[736] + - std::complex<double> (0, 1) * amp[741] - std::complex<double> (0, 1) * - amp[739] - std::complex<double> (0, 1) * amp[744] + std::complex<double> - (0, 1) * amp[750] - std::complex<double> (0, 1) * amp[748] + - std::complex<double> (0, 1) * amp[752] - std::complex<double> (0, 1) * - amp[753] + amp[754] + std::complex<double> (0, 1) * amp[759] - - std::complex<double> (0, 1) * amp[757] + amp[761] - std::complex<double> - (0, 1) * amp[762] + amp[763] - std::complex<double> (0, 1) * amp[765] + - amp[766] + amp[769] - std::complex<double> (0, 1) * amp[770] + amp[771] - - std::complex<double> (0, 1) * amp[773] + amp[774] - std::complex<double> - (0, 1) * amp[865] - std::complex<double> (0, 1) * amp[866] - amp[867] + - std::complex<double> (0, 1) * amp[872] + std::complex<double> (0, 1) * - amp[871] - std::complex<double> (0, 1) * amp[875] + std::complex<double> - (0, 1) * amp[881] + std::complex<double> (0, 1) * amp[880] - - std::complex<double> (0, 1) * amp[883] - std::complex<double> (0, 1) * - amp[884] - amp[885] + std::complex<double> (0, 1) * amp[890] + - std::complex<double> (0, 1) * amp[889] - std::complex<double> (0, 1) * - amp[893] + std::complex<double> (0, 1) * amp[899] + std::complex<double> - (0, 1) * amp[898] + std::complex<double> (0, 1) * amp[941] + - std::complex<double> (0, 1) * amp[940] - amp[944] - amp[943] + - std::complex<double> (0, 1) * amp[947] + std::complex<double> (0, 1) * - amp[946] + std::complex<double> (0, 1) * amp[953] + std::complex<double> - (0, 1) * amp[952] - amp[956] - amp[955] + std::complex<double> (0, 1) * - amp[959] + std::complex<double> (0, 1) * amp[958] + amp[962] - amp[960] + - std::complex<double> (0, 1) * amp[965] - std::complex<double> (0, 1) * - amp[963] + std::complex<double> (0, 1) * amp[971] - std::complex<double> - (0, 1) * amp[969] + amp[974] - amp[972] + std::complex<double> (0, 1) * - amp[977] - std::complex<double> (0, 1) * amp[975] + std::complex<double> - (0, 1) * amp[983] - std::complex<double> (0, 1) * amp[981]; - jamp[13] = +amp[216] + amp[222] + amp[245] + amp[246] + amp[248] + amp[251] + - amp[252] + amp[254] - std::complex<double> (0, 1) * amp[256] - - std::complex<double> (0, 1) * amp[257] - std::complex<double> (0, 1) * - amp[258] - std::complex<double> (0, 1) * amp[259] - amp[289] - - std::complex<double> (0, 1) * amp[290] - amp[292] - amp[295] - - std::complex<double> (0, 1) * amp[296] - amp[298] + std::complex<double> - (0, 1) * amp[300] + amp[301] + std::complex<double> (0, 1) * amp[302] + - amp[304] + std::complex<double> (0, 1) * amp[305] + std::complex<double> - (0, 1) * amp[306] + amp[307] + std::complex<double> (0, 1) * amp[308] + - amp[310] + std::complex<double> (0, 1) * amp[311] + amp[312] + amp[313] + - amp[315] + amp[316] + amp[318] + amp[319] + amp[321] + amp[322] + - amp[497] + amp[503] + std::complex<double> (0, 1) * amp[505] + amp[506] + - std::complex<double> (0, 1) * amp[507] + amp[508] + std::complex<double> - (0, 1) * amp[509] + std::complex<double> (0, 1) * amp[511] + amp[512] + - std::complex<double> (0, 1) * amp[513] + amp[514] + std::complex<double> - (0, 1) * amp[515] - std::complex<double> (0, 1) * amp[516] + amp[518] + - amp[520] - std::complex<double> (0, 1) * amp[522] + amp[524] + amp[526] - - amp[542] - amp[541] - amp[545] - amp[544] - amp[548] - amp[547] - - amp[551] - amp[550] - std::complex<double> (0, 1) * amp[728] + - std::complex<double> (0, 1) * amp[730] + std::complex<double> (0, 1) * - amp[731] + std::complex<double> (0, 1) * amp[733] - std::complex<double> - (0, 1) * amp[737] + amp[738] + std::complex<double> (0, 1) * amp[739] + - std::complex<double> (0, 1) * amp[740] - std::complex<double> (0, 1) * - amp[746] + std::complex<double> (0, 1) * amp[748] + std::complex<double> - (0, 1) * amp[749] + std::complex<double> (0, 1) * amp[751] - - std::complex<double> (0, 1) * amp[755] + amp[756] + std::complex<double> - (0, 1) * amp[757] + std::complex<double> (0, 1) * amp[758] - amp[761] + - std::complex<double> (0, 1) * amp[762] - amp[763] + std::complex<double> - (0, 1) * amp[765] - amp[766] - amp[769] + std::complex<double> (0, 1) * - amp[770] - amp[771] + std::complex<double> (0, 1) * amp[773] - amp[774] - - std::complex<double> (0, 1) * amp[778] - amp[779] - std::complex<double> - (0, 1) * amp[780] + std::complex<double> (0, 1) * amp[784] + - std::complex<double> (0, 1) * amp[783] - std::complex<double> (0, 1) * - amp[787] - std::complex<double> (0, 1) * amp[789] + amp[790] + - std::complex<double> (0, 1) * amp[793] + std::complex<double> (0, 1) * - amp[792] - std::complex<double> (0, 1) * amp[796] - amp[797] - - std::complex<double> (0, 1) * amp[798] + std::complex<double> (0, 1) * - amp[802] + std::complex<double> (0, 1) * amp[801] - std::complex<double> - (0, 1) * amp[805] - std::complex<double> (0, 1) * amp[807] + amp[808] + - std::complex<double> (0, 1) * amp[811] + std::complex<double> (0, 1) * - amp[810] + std::complex<double> (0, 1) * amp[865] + std::complex<double> - (0, 1) * amp[866] + amp[867] - std::complex<double> (0, 1) * amp[872] - - std::complex<double> (0, 1) * amp[871] + std::complex<double> (0, 1) * - amp[875] - std::complex<double> (0, 1) * amp[881] - std::complex<double> - (0, 1) * amp[880] + std::complex<double> (0, 1) * amp[883] + - std::complex<double> (0, 1) * amp[884] + amp[885] - std::complex<double> - (0, 1) * amp[890] - std::complex<double> (0, 1) * amp[889] + - std::complex<double> (0, 1) * amp[893] - std::complex<double> (0, 1) * - amp[899] - std::complex<double> (0, 1) * amp[898] + amp[960] + amp[961] + - std::complex<double> (0, 1) * amp[963] + std::complex<double> (0, 1) * - amp[964] + std::complex<double> (0, 1) * amp[969] + std::complex<double> - (0, 1) * amp[970] + amp[972] + amp[973] + std::complex<double> (0, 1) * - amp[975] + std::complex<double> (0, 1) * amp[976] + std::complex<double> - (0, 1) * amp[981] + std::complex<double> (0, 1) * amp[982] + - std::complex<double> (0, 1) * amp[989] + std::complex<double> (0, 1) * - amp[988] - amp[992] - amp[991] + std::complex<double> (0, 1) * amp[995] + - std::complex<double> (0, 1) * amp[994] + std::complex<double> (0, 1) * - amp[1001] + std::complex<double> (0, 1) * amp[1000] - amp[1004] - - amp[1003] + std::complex<double> (0, 1) * amp[1007] + - std::complex<double> (0, 1) * amp[1006]; - jamp[14] = +amp[219] + amp[225] + amp[260] + amp[263] + amp[265] + amp[266] + - amp[269] + amp[271] + std::complex<double> (0, 1) * amp[272] + - std::complex<double> (0, 1) * amp[273] + std::complex<double> (0, 1) * - amp[274] + std::complex<double> (0, 1) * amp[275] + amp[277] + - std::complex<double> (0, 1) * amp[278] + amp[280] + amp[283] + - std::complex<double> (0, 1) * amp[284] + amp[286] - std::complex<double> - (0, 1) * amp[288] + amp[289] - std::complex<double> (0, 1) * amp[291] + - amp[292] - std::complex<double> (0, 1) * amp[293] - std::complex<double> - (0, 1) * amp[294] + amp[295] - std::complex<double> (0, 1) * amp[297] + - amp[298] - std::complex<double> (0, 1) * amp[299] - amp[314] - amp[313] - - amp[317] - amp[316] - amp[320] - amp[319] - amp[323] - amp[322] + - amp[613] + amp[619] + std::complex<double> (0, 1) * amp[624] - amp[626] - - amp[628] + std::complex<double> (0, 1) * amp[630] - amp[632] - amp[634] + - std::complex<double> (0, 1) * amp[648] - amp[650] + std::complex<double> - (0, 1) * amp[651] - amp[652] + std::complex<double> (0, 1) * amp[653] + - std::complex<double> (0, 1) * amp[654] - amp[656] + std::complex<double> - (0, 1) * amp[657] - amp[658] + std::complex<double> (0, 1) * amp[659] + - amp[662] - amp[660] + amp[665] - amp[663] + amp[668] - amp[666] + - amp[671] - amp[669] + std::complex<double> (0, 1) * amp[674] + - std::complex<double> (0, 1) * amp[676] + amp[677] - std::complex<double> - (0, 1) * amp[680] - std::complex<double> (0, 1) * amp[679] + - std::complex<double> (0, 1) * amp[683] - amp[684] + std::complex<double> - (0, 1) * amp[685] - std::complex<double> (0, 1) * amp[689] - - std::complex<double> (0, 1) * amp[688] + std::complex<double> (0, 1) * - amp[692] + std::complex<double> (0, 1) * amp[694] + amp[695] - - std::complex<double> (0, 1) * amp[698] - std::complex<double> (0, 1) * - amp[697] + std::complex<double> (0, 1) * amp[701] - amp[702] + - std::complex<double> (0, 1) * amp[703] - std::complex<double> (0, 1) * - amp[707] - std::complex<double> (0, 1) * amp[706] - std::complex<double> - (0, 1) * amp[777] + std::complex<double> (0, 1) * amp[778] + amp[779] - - std::complex<double> (0, 1) * amp[784] + std::complex<double> (0, 1) * - amp[782] + std::complex<double> (0, 1) * amp[787] - std::complex<double> - (0, 1) * amp[793] + std::complex<double> (0, 1) * amp[791] - - std::complex<double> (0, 1) * amp[795] + std::complex<double> (0, 1) * - amp[796] + amp[797] - std::complex<double> (0, 1) * amp[802] + - std::complex<double> (0, 1) * amp[800] + std::complex<double> (0, 1) * - amp[805] - std::complex<double> (0, 1) * amp[811] + std::complex<double> - (0, 1) * amp[809] + amp[812] + std::complex<double> (0, 1) * amp[814] + - amp[816] + std::complex<double> (0, 1) * amp[817] + amp[819] + amp[820] + - std::complex<double> (0, 1) * amp[822] + amp[824] + std::complex<double> - (0, 1) * amp[825] + amp[827] + std::complex<double> (0, 1) * amp[830] - - std::complex<double> (0, 1) * amp[836] - std::complex<double> (0, 1) * - amp[835] + std::complex<double> (0, 1) * amp[838] + std::complex<double> - (0, 1) * amp[839] - amp[840] - std::complex<double> (0, 1) * amp[845] - - std::complex<double> (0, 1) * amp[844] + std::complex<double> (0, 1) * - amp[848] - std::complex<double> (0, 1) * amp[854] - std::complex<double> - (0, 1) * amp[853] + std::complex<double> (0, 1) * amp[856] + - std::complex<double> (0, 1) * amp[857] - amp[858] - std::complex<double> - (0, 1) * amp[863] - std::complex<double> (0, 1) * amp[862] - - std::complex<double> (0, 1) * amp[941] + std::complex<double> (0, 1) * - amp[939] + amp[944] - amp[942] - std::complex<double> (0, 1) * amp[947] + - std::complex<double> (0, 1) * amp[945] - std::complex<double> (0, 1) * - amp[953] + std::complex<double> (0, 1) * amp[951] + amp[956] - amp[954] - - std::complex<double> (0, 1) * amp[959] + std::complex<double> (0, 1) * - amp[957] - amp[962] - amp[961] - std::complex<double> (0, 1) * amp[965] - - std::complex<double> (0, 1) * amp[964] - std::complex<double> (0, 1) * - amp[971] - std::complex<double> (0, 1) * amp[970] - amp[974] - amp[973] - - std::complex<double> (0, 1) * amp[977] - std::complex<double> (0, 1) * - amp[976] - std::complex<double> (0, 1) * amp[983] - std::complex<double> - (0, 1) * amp[982]; - jamp[15] = +amp[218] + amp[224] + amp[229] + amp[230] + amp[232] + amp[235] + - amp[236] + amp[238] - std::complex<double> (0, 1) * amp[240] - - std::complex<double> (0, 1) * amp[241] - std::complex<double> (0, 1) * - amp[242] - std::complex<double> (0, 1) * amp[243] + std::complex<double> - (0, 1) * amp[288] - amp[289] + std::complex<double> (0, 1) * amp[291] - - amp[292] + std::complex<double> (0, 1) * amp[293] + std::complex<double> - (0, 1) * amp[294] - amp[295] + std::complex<double> (0, 1) * amp[297] - - amp[298] + std::complex<double> (0, 1) * amp[299] + amp[301] - - std::complex<double> (0, 1) * amp[303] + amp[304] + amp[307] - - std::complex<double> (0, 1) * amp[309] + amp[310] + amp[312] + amp[313] + - amp[315] + amp[316] + amp[318] + amp[319] + amp[321] + amp[322] + - amp[437] + amp[443] + std::complex<double> (0, 1) * amp[445] + amp[446] + - std::complex<double> (0, 1) * amp[447] + amp[448] + std::complex<double> - (0, 1) * amp[449] + std::complex<double> (0, 1) * amp[451] + amp[452] + - std::complex<double> (0, 1) * amp[453] + amp[454] + std::complex<double> - (0, 1) * amp[455] - std::complex<double> (0, 1) * amp[456] + amp[458] + - amp[460] - std::complex<double> (0, 1) * amp[462] + amp[464] + amp[466] - - amp[482] - amp[481] - amp[485] - amp[484] - amp[488] - amp[487] - - amp[491] - amp[490] + std::complex<double> (0, 1) * amp[777] - - std::complex<double> (0, 1) * amp[778] - amp[779] + std::complex<double> - (0, 1) * amp[784] - std::complex<double> (0, 1) * amp[782] - - std::complex<double> (0, 1) * amp[787] + std::complex<double> (0, 1) * - amp[793] - std::complex<double> (0, 1) * amp[791] + std::complex<double> - (0, 1) * amp[795] - std::complex<double> (0, 1) * amp[796] - amp[797] + - std::complex<double> (0, 1) * amp[802] - std::complex<double> (0, 1) * - amp[800] - std::complex<double> (0, 1) * amp[805] + std::complex<double> - (0, 1) * amp[811] - std::complex<double> (0, 1) * amp[809] - amp[812] - - std::complex<double> (0, 1) * amp[814] - amp[816] - std::complex<double> - (0, 1) * amp[817] - amp[819] - amp[820] - std::complex<double> (0, 1) * - amp[822] - amp[824] - std::complex<double> (0, 1) * amp[825] - amp[827] + - std::complex<double> (0, 1) * amp[832] + std::complex<double> (0, 1) * - amp[834] + std::complex<double> (0, 1) * amp[835] + std::complex<double> - (0, 1) * amp[837] + std::complex<double> (0, 1) * amp[841] + amp[842] + - std::complex<double> (0, 1) * amp[843] + std::complex<double> (0, 1) * - amp[844] + std::complex<double> (0, 1) * amp[850] + std::complex<double> - (0, 1) * amp[852] + std::complex<double> (0, 1) * amp[853] + - std::complex<double> (0, 1) * amp[855] + std::complex<double> (0, 1) * - amp[859] + amp[860] + std::complex<double> (0, 1) * amp[861] + - std::complex<double> (0, 1) * amp[862] + std::complex<double> (0, 1) * - amp[866] + amp[867] + std::complex<double> (0, 1) * amp[868] - - std::complex<double> (0, 1) * amp[872] + std::complex<double> (0, 1) * - amp[870] + std::complex<double> (0, 1) * amp[875] + std::complex<double> - (0, 1) * amp[877] + amp[878] - std::complex<double> (0, 1) * amp[881] + - std::complex<double> (0, 1) * amp[879] + std::complex<double> (0, 1) * - amp[884] + amp[885] + std::complex<double> (0, 1) * amp[886] - - std::complex<double> (0, 1) * amp[890] + std::complex<double> (0, 1) * - amp[888] + std::complex<double> (0, 1) * amp[893] + std::complex<double> - (0, 1) * amp[895] + amp[896] - std::complex<double> (0, 1) * amp[899] + - std::complex<double> (0, 1) * amp[897] + amp[960] + amp[961] + - std::complex<double> (0, 1) * amp[963] + std::complex<double> (0, 1) * - amp[964] + std::complex<double> (0, 1) * amp[969] + std::complex<double> - (0, 1) * amp[970] + amp[972] + amp[973] + std::complex<double> (0, 1) * - amp[975] + std::complex<double> (0, 1) * amp[976] + std::complex<double> - (0, 1) * amp[981] + std::complex<double> (0, 1) * amp[982] - - std::complex<double> (0, 1) * amp[1013] - std::complex<double> (0, 1) * - amp[1012] - amp[1016] - amp[1015] - std::complex<double> (0, 1) * - amp[1019] - std::complex<double> (0, 1) * amp[1018] - - std::complex<double> (0, 1) * amp[1025] - std::complex<double> (0, 1) * - amp[1024] - amp[1028] - amp[1027] - std::complex<double> (0, 1) * - amp[1031] - std::complex<double> (0, 1) * amp[1030]; - jamp[16] = +amp[221] + amp[227] + amp[244] + amp[247] + amp[249] + amp[250] + - amp[253] + amp[255] + std::complex<double> (0, 1) * amp[256] + - std::complex<double> (0, 1) * amp[257] + std::complex<double> (0, 1) * - amp[258] + std::complex<double> (0, 1) * amp[259] - std::complex<double> - (0, 1) * amp[276] + amp[277] - std::complex<double> (0, 1) * amp[279] + - amp[280] - std::complex<double> (0, 1) * amp[281] - std::complex<double> - (0, 1) * amp[282] + amp[283] - std::complex<double> (0, 1) * amp[285] + - amp[286] - std::complex<double> (0, 1) * amp[287] + amp[289] + - std::complex<double> (0, 1) * amp[290] + amp[292] + amp[295] + - std::complex<double> (0, 1) * amp[296] + amp[298] - amp[314] - amp[313] - - amp[317] - amp[316] - amp[320] - amp[319] - amp[323] - amp[322] + - amp[492] + amp[498] + std::complex<double> (0, 1) * amp[516] - amp[518] - - amp[520] + std::complex<double> (0, 1) * amp[522] - amp[524] - amp[526] - - std::complex<double> (0, 1) * amp[528] + amp[530] - std::complex<double> - (0, 1) * amp[531] + amp[532] - std::complex<double> (0, 1) * amp[533] - - std::complex<double> (0, 1) * amp[534] + amp[536] - std::complex<double> - (0, 1) * amp[537] + amp[538] - std::complex<double> (0, 1) * amp[539] + - amp[540] + amp[541] + amp[543] + amp[544] + amp[546] + amp[547] + - amp[549] + amp[550] - std::complex<double> (0, 1) * amp[672] + - std::complex<double> (0, 1) * amp[676] + amp[677] - std::complex<double> - (0, 1) * amp[678] - std::complex<double> (0, 1) * amp[679] + - std::complex<double> (0, 1) * amp[685] - std::complex<double> (0, 1) * - amp[687] - std::complex<double> (0, 1) * amp[688] - std::complex<double> - (0, 1) * amp[690] + std::complex<double> (0, 1) * amp[694] + amp[695] - - std::complex<double> (0, 1) * amp[696] - std::complex<double> (0, 1) * - amp[697] + std::complex<double> (0, 1) * amp[703] - std::complex<double> - (0, 1) * amp[705] - std::complex<double> (0, 1) * amp[706] - amp[708] - - std::complex<double> (0, 1) * amp[710] - amp[712] - std::complex<double> - (0, 1) * amp[713] - amp[715] - amp[716] - std::complex<double> (0, 1) * - amp[718] - amp[720] - std::complex<double> (0, 1) * amp[721] - amp[723] + - std::complex<double> (0, 1) * amp[778] + amp[779] + std::complex<double> - (0, 1) * amp[780] - std::complex<double> (0, 1) * amp[784] - - std::complex<double> (0, 1) * amp[783] + std::complex<double> (0, 1) * - amp[787] + std::complex<double> (0, 1) * amp[789] - amp[790] - - std::complex<double> (0, 1) * amp[793] - std::complex<double> (0, 1) * - amp[792] + std::complex<double> (0, 1) * amp[796] + amp[797] + - std::complex<double> (0, 1) * amp[798] - std::complex<double> (0, 1) * - amp[802] - std::complex<double> (0, 1) * amp[801] + std::complex<double> - (0, 1) * amp[805] + std::complex<double> (0, 1) * amp[807] - amp[808] - - std::complex<double> (0, 1) * amp[811] - std::complex<double> (0, 1) * - amp[810] - std::complex<double> (0, 1) * amp[902] + std::complex<double> - (0, 1) * amp[908] + std::complex<double> (0, 1) * amp[907] - - std::complex<double> (0, 1) * amp[910] - std::complex<double> (0, 1) * - amp[911] + amp[912] + std::complex<double> (0, 1) * amp[917] + - std::complex<double> (0, 1) * amp[916] - std::complex<double> (0, 1) * - amp[920] + std::complex<double> (0, 1) * amp[926] + std::complex<double> - (0, 1) * amp[925] - std::complex<double> (0, 1) * amp[928] - - std::complex<double> (0, 1) * amp[929] + amp[930] + std::complex<double> - (0, 1) * amp[935] + std::complex<double> (0, 1) * amp[934] - amp[962] - - amp[961] - std::complex<double> (0, 1) * amp[965] - std::complex<double> - (0, 1) * amp[964] - std::complex<double> (0, 1) * amp[971] - - std::complex<double> (0, 1) * amp[970] - amp[974] - amp[973] - - std::complex<double> (0, 1) * amp[977] - std::complex<double> (0, 1) * - amp[976] - std::complex<double> (0, 1) * amp[983] - std::complex<double> - (0, 1) * amp[982] - std::complex<double> (0, 1) * amp[987] - - std::complex<double> (0, 1) * amp[988] + amp[990] + amp[991] - - std::complex<double> (0, 1) * amp[993] - std::complex<double> (0, 1) * - amp[994] - std::complex<double> (0, 1) * amp[999] - std::complex<double> - (0, 1) * amp[1000] + amp[1002] + amp[1003] - std::complex<double> (0, 1) - * amp[1005] - std::complex<double> (0, 1) * amp[1006]; - jamp[17] = +amp[220] + amp[226] + amp[228] + amp[231] + amp[233] + amp[234] + - amp[237] + amp[239] + std::complex<double> (0, 1) * amp[240] + - std::complex<double> (0, 1) * amp[241] + std::complex<double> (0, 1) * - amp[242] + std::complex<double> (0, 1) * amp[243] + std::complex<double> - (0, 1) * amp[276] - amp[277] + std::complex<double> (0, 1) * amp[279] - - amp[280] + std::complex<double> (0, 1) * amp[281] + std::complex<double> - (0, 1) * amp[282] - amp[283] + std::complex<double> (0, 1) * amp[285] - - amp[286] + std::complex<double> (0, 1) * amp[287] - amp[301] + - std::complex<double> (0, 1) * amp[303] - amp[304] - amp[307] + - std::complex<double> (0, 1) * amp[309] - amp[310] + amp[314] - amp[312] + - amp[317] - amp[315] + amp[320] - amp[318] + amp[323] - amp[321] + - amp[432] + amp[438] + std::complex<double> (0, 1) * amp[456] - amp[458] - - amp[460] + std::complex<double> (0, 1) * amp[462] - amp[464] - amp[466] - - std::complex<double> (0, 1) * amp[468] + amp[470] - std::complex<double> - (0, 1) * amp[471] + amp[472] - std::complex<double> (0, 1) * amp[473] - - std::complex<double> (0, 1) * amp[474] + amp[476] - std::complex<double> - (0, 1) * amp[477] + amp[478] - std::complex<double> (0, 1) * amp[479] + - amp[480] + amp[481] + amp[483] + amp[484] + amp[486] + amp[487] + - amp[489] + amp[490] + std::complex<double> (0, 1) * amp[672] - - std::complex<double> (0, 1) * amp[676] - amp[677] + std::complex<double> - (0, 1) * amp[678] + std::complex<double> (0, 1) * amp[679] - - std::complex<double> (0, 1) * amp[685] + std::complex<double> (0, 1) * - amp[687] + std::complex<double> (0, 1) * amp[688] + std::complex<double> - (0, 1) * amp[690] - std::complex<double> (0, 1) * amp[694] - amp[695] + - std::complex<double> (0, 1) * amp[696] + std::complex<double> (0, 1) * - amp[697] - std::complex<double> (0, 1) * amp[703] + std::complex<double> - (0, 1) * amp[705] + std::complex<double> (0, 1) * amp[706] + amp[708] + - std::complex<double> (0, 1) * amp[710] + amp[712] + std::complex<double> - (0, 1) * amp[713] + amp[715] + amp[716] + std::complex<double> (0, 1) * - amp[718] + amp[720] + std::complex<double> (0, 1) * amp[721] + amp[723] - - std::complex<double> (0, 1) * amp[866] - amp[867] - std::complex<double> - (0, 1) * amp[868] + std::complex<double> (0, 1) * amp[872] - - std::complex<double> (0, 1) * amp[870] - std::complex<double> (0, 1) * - amp[875] - std::complex<double> (0, 1) * amp[877] - amp[878] + - std::complex<double> (0, 1) * amp[881] - std::complex<double> (0, 1) * - amp[879] - std::complex<double> (0, 1) * amp[884] - amp[885] - - std::complex<double> (0, 1) * amp[886] + std::complex<double> (0, 1) * - amp[890] - std::complex<double> (0, 1) * amp[888] - std::complex<double> - (0, 1) * amp[893] - std::complex<double> (0, 1) * amp[895] - amp[896] + - std::complex<double> (0, 1) * amp[899] - std::complex<double> (0, 1) * - amp[897] + std::complex<double> (0, 1) * amp[904] - std::complex<double> - (0, 1) * amp[908] + std::complex<double> (0, 1) * amp[906] - - std::complex<double> (0, 1) * amp[909] + std::complex<double> (0, 1) * - amp[913] + amp[914] - std::complex<double> (0, 1) * amp[917] + - std::complex<double> (0, 1) * amp[915] + std::complex<double> (0, 1) * - amp[922] - std::complex<double> (0, 1) * amp[926] + std::complex<double> - (0, 1) * amp[924] - std::complex<double> (0, 1) * amp[927] + - std::complex<double> (0, 1) * amp[931] + amp[932] - std::complex<double> - (0, 1) * amp[935] + std::complex<double> (0, 1) * amp[933] + amp[962] - - amp[960] + std::complex<double> (0, 1) * amp[965] - std::complex<double> - (0, 1) * amp[963] + std::complex<double> (0, 1) * amp[971] - - std::complex<double> (0, 1) * amp[969] + amp[974] - amp[972] + - std::complex<double> (0, 1) * amp[977] - std::complex<double> (0, 1) * - amp[975] + std::complex<double> (0, 1) * amp[983] - std::complex<double> - (0, 1) * amp[981] + std::complex<double> (0, 1) * amp[1011] + - std::complex<double> (0, 1) * amp[1012] + amp[1014] + amp[1015] + - std::complex<double> (0, 1) * amp[1017] + std::complex<double> (0, 1) * - amp[1018] + std::complex<double> (0, 1) * amp[1023] + - std::complex<double> (0, 1) * amp[1024] + amp[1026] + amp[1027] + - std::complex<double> (0, 1) * amp[1029] + std::complex<double> (0, 1) * - amp[1030]; - jamp[18] = +amp[325] + amp[331] + amp[369] + amp[370] + amp[372] + amp[375] + - amp[376] + amp[378] - std::complex<double> (0, 1) * amp[380] - - std::complex<double> (0, 1) * amp[381] - std::complex<double> (0, 1) * - amp[382] - std::complex<double> (0, 1) * amp[383] - amp[385] - - std::complex<double> (0, 1) * amp[386] - amp[388] - amp[391] - - std::complex<double> (0, 1) * amp[392] - amp[394] - std::complex<double> - (0, 1) * amp[408] - amp[409] - std::complex<double> (0, 1) * amp[410] - - amp[412] - std::complex<double> (0, 1) * amp[413] - std::complex<double> - (0, 1) * amp[414] - amp[415] - std::complex<double> (0, 1) * amp[416] - - amp[418] - std::complex<double> (0, 1) * amp[419] + amp[422] - amp[420] + - amp[425] - amp[423] + amp[428] - amp[426] + amp[431] - amp[429] + - amp[555] + amp[561] - std::complex<double> (0, 1) * amp[564] + amp[566] + - amp[568] - std::complex<double> (0, 1) * amp[570] + amp[572] + amp[574] + - std::complex<double> (0, 1) * amp[577] + amp[578] + std::complex<double> - (0, 1) * amp[579] + amp[580] + std::complex<double> (0, 1) * amp[581] + - std::complex<double> (0, 1) * amp[583] + amp[584] + std::complex<double> - (0, 1) * amp[585] + amp[586] + std::complex<double> (0, 1) * amp[587] - - amp[602] - amp[601] - amp[605] - amp[604] - amp[608] - amp[607] - - amp[611] - amp[610] - std::complex<double> (0, 1) * amp[674] - amp[675] - - std::complex<double> (0, 1) * amp[676] + std::complex<double> (0, 1) * - amp[680] + std::complex<double> (0, 1) * amp[679] - std::complex<double> - (0, 1) * amp[683] - std::complex<double> (0, 1) * amp[685] + amp[686] + - std::complex<double> (0, 1) * amp[689] + std::complex<double> (0, 1) * - amp[688] - std::complex<double> (0, 1) * amp[692] - amp[693] - - std::complex<double> (0, 1) * amp[694] + std::complex<double> (0, 1) * - amp[698] + std::complex<double> (0, 1) * amp[697] - std::complex<double> - (0, 1) * amp[701] - std::complex<double> (0, 1) * amp[703] + amp[704] + - std::complex<double> (0, 1) * amp[707] + std::complex<double> (0, 1) * - amp[706] - std::complex<double> (0, 1) * amp[778] + std::complex<double> - (0, 1) * amp[784] - std::complex<double> (0, 1) * amp[782] + - std::complex<double> (0, 1) * amp[786] - std::complex<double> (0, 1) * - amp[787] + amp[788] + std::complex<double> (0, 1) * amp[793] - - std::complex<double> (0, 1) * amp[791] - std::complex<double> (0, 1) * - amp[796] + std::complex<double> (0, 1) * amp[802] - std::complex<double> - (0, 1) * amp[800] + std::complex<double> (0, 1) * amp[804] - - std::complex<double> (0, 1) * amp[805] + amp[806] + std::complex<double> - (0, 1) * amp[811] - std::complex<double> (0, 1) * amp[809] + amp[813] - - std::complex<double> (0, 1) * amp[814] + amp[815] - std::complex<double> - (0, 1) * amp[817] + amp[818] + amp[821] - std::complex<double> (0, 1) * - amp[822] + amp[823] - std::complex<double> (0, 1) * amp[825] + amp[826] - - std::complex<double> (0, 1) * amp[829] - std::complex<double> (0, 1) * - amp[830] - amp[831] + std::complex<double> (0, 1) * amp[836] + - std::complex<double> (0, 1) * amp[835] - std::complex<double> (0, 1) * - amp[839] + std::complex<double> (0, 1) * amp[845] + std::complex<double> - (0, 1) * amp[844] - std::complex<double> (0, 1) * amp[847] - - std::complex<double> (0, 1) * amp[848] - amp[849] + std::complex<double> - (0, 1) * amp[854] + std::complex<double> (0, 1) * amp[853] - - std::complex<double> (0, 1) * amp[857] + std::complex<double> (0, 1) * - amp[863] + std::complex<double> (0, 1) * amp[862] + amp[938] - amp[936] + - std::complex<double> (0, 1) * amp[941] - std::complex<double> (0, 1) * - amp[939] + std::complex<double> (0, 1) * amp[947] - std::complex<double> - (0, 1) * amp[945] + amp[950] - amp[948] + std::complex<double> (0, 1) * - amp[953] - std::complex<double> (0, 1) * amp[951] + std::complex<double> - (0, 1) * amp[959] - std::complex<double> (0, 1) * amp[957] + - std::complex<double> (0, 1) * amp[965] + std::complex<double> (0, 1) * - amp[964] - amp[968] - amp[967] + std::complex<double> (0, 1) * amp[971] + - std::complex<double> (0, 1) * amp[970] + std::complex<double> (0, 1) * - amp[977] + std::complex<double> (0, 1) * amp[976] - amp[980] - amp[979] + - std::complex<double> (0, 1) * amp[983] + std::complex<double> (0, 1) * - amp[982]; - jamp[19] = +amp[324] + amp[330] + amp[353] + amp[354] + amp[356] + amp[359] + - amp[360] + amp[362] - std::complex<double> (0, 1) * amp[364] - - std::complex<double> (0, 1) * amp[365] - std::complex<double> (0, 1) * - amp[366] - std::complex<double> (0, 1) * amp[367] - amp[397] - - std::complex<double> (0, 1) * amp[398] - amp[400] - amp[403] - - std::complex<double> (0, 1) * amp[404] - amp[406] + std::complex<double> - (0, 1) * amp[408] + amp[409] + std::complex<double> (0, 1) * amp[410] + - amp[412] + std::complex<double> (0, 1) * amp[413] + std::complex<double> - (0, 1) * amp[414] + amp[415] + std::complex<double> (0, 1) * amp[416] + - amp[418] + std::complex<double> (0, 1) * amp[419] + amp[420] + amp[421] + - amp[423] + amp[424] + amp[426] + amp[427] + amp[429] + amp[430] + - amp[495] + amp[501] - std::complex<double> (0, 1) * amp[504] + amp[506] + - amp[508] - std::complex<double> (0, 1) * amp[510] + amp[512] + amp[514] + - std::complex<double> (0, 1) * amp[517] + amp[518] + std::complex<double> - (0, 1) * amp[519] + amp[520] + std::complex<double> (0, 1) * amp[521] + - std::complex<double> (0, 1) * amp[523] + amp[524] + std::complex<double> - (0, 1) * amp[525] + amp[526] + std::complex<double> (0, 1) * amp[527] - - amp[542] - amp[541] - amp[545] - amp[544] - amp[548] - amp[547] - - amp[551] - amp[550] - std::complex<double> (0, 1) * amp[726] - amp[727] - - std::complex<double> (0, 1) * amp[728] + std::complex<double> (0, 1) * - amp[732] + std::complex<double> (0, 1) * amp[731] - std::complex<double> - (0, 1) * amp[735] - std::complex<double> (0, 1) * amp[737] + amp[738] + - std::complex<double> (0, 1) * amp[741] + std::complex<double> (0, 1) * - amp[740] - std::complex<double> (0, 1) * amp[744] - amp[745] - - std::complex<double> (0, 1) * amp[746] + std::complex<double> (0, 1) * - amp[750] + std::complex<double> (0, 1) * amp[749] - std::complex<double> - (0, 1) * amp[753] - std::complex<double> (0, 1) * amp[755] + amp[756] + - std::complex<double> (0, 1) * amp[759] + std::complex<double> (0, 1) * - amp[758] - std::complex<double> (0, 1) * amp[780] + std::complex<double> - (0, 1) * amp[782] + std::complex<double> (0, 1) * amp[783] + - std::complex<double> (0, 1) * amp[785] - std::complex<double> (0, 1) * - amp[789] + amp[790] + std::complex<double> (0, 1) * amp[791] + - std::complex<double> (0, 1) * amp[792] - std::complex<double> (0, 1) * - amp[798] + std::complex<double> (0, 1) * amp[800] + std::complex<double> - (0, 1) * amp[801] + std::complex<double> (0, 1) * amp[803] - - std::complex<double> (0, 1) * amp[807] + amp[808] + std::complex<double> - (0, 1) * amp[809] + std::complex<double> (0, 1) * amp[810] - amp[813] + - std::complex<double> (0, 1) * amp[814] - amp[815] + std::complex<double> - (0, 1) * amp[817] - amp[818] - amp[821] + std::complex<double> (0, 1) * - amp[822] - amp[823] + std::complex<double> (0, 1) * amp[825] - amp[826] + - std::complex<double> (0, 1) * amp[829] + std::complex<double> (0, 1) * - amp[830] + amp[831] - std::complex<double> (0, 1) * amp[836] - - std::complex<double> (0, 1) * amp[835] + std::complex<double> (0, 1) * - amp[839] - std::complex<double> (0, 1) * amp[845] - std::complex<double> - (0, 1) * amp[844] + std::complex<double> (0, 1) * amp[847] + - std::complex<double> (0, 1) * amp[848] + amp[849] - std::complex<double> - (0, 1) * amp[854] - std::complex<double> (0, 1) * amp[853] + - std::complex<double> (0, 1) * amp[857] - std::complex<double> (0, 1) * - amp[863] - std::complex<double> (0, 1) * amp[862] + amp[936] + amp[937] + - std::complex<double> (0, 1) * amp[939] + std::complex<double> (0, 1) * - amp[940] + std::complex<double> (0, 1) * amp[945] + std::complex<double> - (0, 1) * amp[946] + amp[948] + amp[949] + std::complex<double> (0, 1) * - amp[951] + std::complex<double> (0, 1) * amp[952] + std::complex<double> - (0, 1) * amp[957] + std::complex<double> (0, 1) * amp[958] + - std::complex<double> (0, 1) * amp[989] + std::complex<double> (0, 1) * - amp[988] - amp[992] - amp[991] + std::complex<double> (0, 1) * amp[995] + - std::complex<double> (0, 1) * amp[994] + std::complex<double> (0, 1) * - amp[1001] + std::complex<double> (0, 1) * amp[1000] - amp[1004] - - amp[1003] + std::complex<double> (0, 1) * amp[1007] + - std::complex<double> (0, 1) * amp[1006]; - jamp[20] = +amp[327] + amp[333] + amp[368] + amp[371] + amp[373] + amp[374] + - amp[377] + amp[379] + std::complex<double> (0, 1) * amp[380] + - std::complex<double> (0, 1) * amp[381] + std::complex<double> (0, 1) * - amp[382] + std::complex<double> (0, 1) * amp[383] + amp[385] + - std::complex<double> (0, 1) * amp[386] + amp[388] + amp[391] + - std::complex<double> (0, 1) * amp[392] + amp[394] - std::complex<double> - (0, 1) * amp[396] + amp[397] - std::complex<double> (0, 1) * amp[399] + - amp[400] - std::complex<double> (0, 1) * amp[401] - std::complex<double> - (0, 1) * amp[402] + amp[403] - std::complex<double> (0, 1) * amp[405] + - amp[406] - std::complex<double> (0, 1) * amp[407] - amp[422] - amp[421] - - amp[425] - amp[424] - amp[428] - amp[427] - amp[431] - amp[430] + - amp[553] + amp[559] + std::complex<double> (0, 1) * amp[564] - amp[566] - - amp[568] + std::complex<double> (0, 1) * amp[570] - amp[572] - amp[574] + - std::complex<double> (0, 1) * amp[588] - amp[590] + std::complex<double> - (0, 1) * amp[591] - amp[592] + std::complex<double> (0, 1) * amp[593] + - std::complex<double> (0, 1) * amp[594] - amp[596] + std::complex<double> - (0, 1) * amp[597] - amp[598] + std::complex<double> (0, 1) * amp[599] + - amp[602] - amp[600] + amp[605] - amp[603] + amp[608] - amp[606] + - amp[611] - amp[609] + std::complex<double> (0, 1) * amp[674] + amp[675] + - std::complex<double> (0, 1) * amp[676] - std::complex<double> (0, 1) * - amp[680] - std::complex<double> (0, 1) * amp[679] + std::complex<double> - (0, 1) * amp[683] + std::complex<double> (0, 1) * amp[685] - amp[686] - - std::complex<double> (0, 1) * amp[689] - std::complex<double> (0, 1) * - amp[688] + std::complex<double> (0, 1) * amp[692] + amp[693] + - std::complex<double> (0, 1) * amp[694] - std::complex<double> (0, 1) * - amp[698] - std::complex<double> (0, 1) * amp[697] + std::complex<double> - (0, 1) * amp[701] + std::complex<double> (0, 1) * amp[703] - amp[704] - - std::complex<double> (0, 1) * amp[707] - std::complex<double> (0, 1) * - amp[706] - std::complex<double> (0, 1) * amp[725] + std::complex<double> - (0, 1) * amp[726] + amp[727] - std::complex<double> (0, 1) * amp[732] + - std::complex<double> (0, 1) * amp[730] + std::complex<double> (0, 1) * - amp[735] - std::complex<double> (0, 1) * amp[741] + std::complex<double> - (0, 1) * amp[739] - std::complex<double> (0, 1) * amp[743] + - std::complex<double> (0, 1) * amp[744] + amp[745] - std::complex<double> - (0, 1) * amp[750] + std::complex<double> (0, 1) * amp[748] + - std::complex<double> (0, 1) * amp[753] - std::complex<double> (0, 1) * - amp[759] + std::complex<double> (0, 1) * amp[757] + amp[760] + - std::complex<double> (0, 1) * amp[762] + amp[764] + std::complex<double> - (0, 1) * amp[765] + amp[767] + amp[768] + std::complex<double> (0, 1) * - amp[770] + amp[772] + std::complex<double> (0, 1) * amp[773] + amp[775] + - std::complex<double> (0, 1) * amp[866] - std::complex<double> (0, 1) * - amp[872] - std::complex<double> (0, 1) * amp[871] + std::complex<double> - (0, 1) * amp[874] + std::complex<double> (0, 1) * amp[875] - amp[876] - - std::complex<double> (0, 1) * amp[881] - std::complex<double> (0, 1) * - amp[880] + std::complex<double> (0, 1) * amp[884] - std::complex<double> - (0, 1) * amp[890] - std::complex<double> (0, 1) * amp[889] + - std::complex<double> (0, 1) * amp[892] + std::complex<double> (0, 1) * - amp[893] - amp[894] - std::complex<double> (0, 1) * amp[899] - - std::complex<double> (0, 1) * amp[898] - amp[938] - amp[937] - - std::complex<double> (0, 1) * amp[941] - std::complex<double> (0, 1) * - amp[940] - std::complex<double> (0, 1) * amp[947] - std::complex<double> - (0, 1) * amp[946] - amp[950] - amp[949] - std::complex<double> (0, 1) * - amp[953] - std::complex<double> (0, 1) * amp[952] - std::complex<double> - (0, 1) * amp[959] - std::complex<double> (0, 1) * amp[958] - - std::complex<double> (0, 1) * amp[965] + std::complex<double> (0, 1) * - amp[963] + amp[968] - amp[966] - std::complex<double> (0, 1) * amp[971] + - std::complex<double> (0, 1) * amp[969] - std::complex<double> (0, 1) * - amp[977] + std::complex<double> (0, 1) * amp[975] + amp[980] - amp[978] - - std::complex<double> (0, 1) * amp[983] + std::complex<double> (0, 1) * - amp[981]; - jamp[21] = +amp[326] + amp[332] + amp[337] + amp[338] + amp[340] + amp[343] + - amp[344] + amp[346] - std::complex<double> (0, 1) * amp[348] - - std::complex<double> (0, 1) * amp[349] - std::complex<double> (0, 1) * - amp[350] - std::complex<double> (0, 1) * amp[351] + std::complex<double> - (0, 1) * amp[396] - amp[397] + std::complex<double> (0, 1) * amp[399] - - amp[400] + std::complex<double> (0, 1) * amp[401] + std::complex<double> - (0, 1) * amp[402] - amp[403] + std::complex<double> (0, 1) * amp[405] - - amp[406] + std::complex<double> (0, 1) * amp[407] + amp[409] - - std::complex<double> (0, 1) * amp[411] + amp[412] + amp[415] - - std::complex<double> (0, 1) * amp[417] + amp[418] + amp[420] + amp[421] + - amp[423] + amp[424] + amp[426] + amp[427] + amp[429] + amp[430] + - amp[435] + amp[441] - std::complex<double> (0, 1) * amp[444] + amp[446] + - amp[448] - std::complex<double> (0, 1) * amp[450] + amp[452] + amp[454] + - std::complex<double> (0, 1) * amp[457] + amp[458] + std::complex<double> - (0, 1) * amp[459] + amp[460] + std::complex<double> (0, 1) * amp[461] + - std::complex<double> (0, 1) * amp[463] + amp[464] + std::complex<double> - (0, 1) * amp[465] + amp[466] + std::complex<double> (0, 1) * amp[467] - - amp[482] - amp[481] - amp[485] - amp[484] - amp[488] - amp[487] - - amp[491] - amp[490] + std::complex<double> (0, 1) * amp[725] - - std::complex<double> (0, 1) * amp[726] - amp[727] + std::complex<double> - (0, 1) * amp[732] - std::complex<double> (0, 1) * amp[730] - - std::complex<double> (0, 1) * amp[735] + std::complex<double> (0, 1) * - amp[741] - std::complex<double> (0, 1) * amp[739] + std::complex<double> - (0, 1) * amp[743] - std::complex<double> (0, 1) * amp[744] - amp[745] + - std::complex<double> (0, 1) * amp[750] - std::complex<double> (0, 1) * - amp[748] - std::complex<double> (0, 1) * amp[753] + std::complex<double> - (0, 1) * amp[759] - std::complex<double> (0, 1) * amp[757] - amp[760] - - std::complex<double> (0, 1) * amp[762] - amp[764] - std::complex<double> - (0, 1) * amp[765] - amp[767] - amp[768] - std::complex<double> (0, 1) * - amp[770] - amp[772] - std::complex<double> (0, 1) * amp[773] - amp[775] + - std::complex<double> (0, 1) * amp[830] + amp[831] + std::complex<double> - (0, 1) * amp[832] - std::complex<double> (0, 1) * amp[836] + - std::complex<double> (0, 1) * amp[834] + std::complex<double> (0, 1) * - amp[839] + std::complex<double> (0, 1) * amp[841] + amp[842] - - std::complex<double> (0, 1) * amp[845] + std::complex<double> (0, 1) * - amp[843] + std::complex<double> (0, 1) * amp[848] + amp[849] + - std::complex<double> (0, 1) * amp[850] - std::complex<double> (0, 1) * - amp[854] + std::complex<double> (0, 1) * amp[852] + std::complex<double> - (0, 1) * amp[857] + std::complex<double> (0, 1) * amp[859] + amp[860] - - std::complex<double> (0, 1) * amp[863] + std::complex<double> (0, 1) * - amp[861] + std::complex<double> (0, 1) * amp[868] + std::complex<double> - (0, 1) * amp[870] + std::complex<double> (0, 1) * amp[871] + - std::complex<double> (0, 1) * amp[873] + std::complex<double> (0, 1) * - amp[877] + amp[878] + std::complex<double> (0, 1) * amp[879] + - std::complex<double> (0, 1) * amp[880] + std::complex<double> (0, 1) * - amp[886] + std::complex<double> (0, 1) * amp[888] + std::complex<double> - (0, 1) * amp[889] + std::complex<double> (0, 1) * amp[891] + - std::complex<double> (0, 1) * amp[895] + amp[896] + std::complex<double> - (0, 1) * amp[897] + std::complex<double> (0, 1) * amp[898] + amp[936] + - amp[937] + std::complex<double> (0, 1) * amp[939] + std::complex<double> - (0, 1) * amp[940] + std::complex<double> (0, 1) * amp[945] + - std::complex<double> (0, 1) * amp[946] + amp[948] + amp[949] + - std::complex<double> (0, 1) * amp[951] + std::complex<double> (0, 1) * - amp[952] + std::complex<double> (0, 1) * amp[957] + std::complex<double> - (0, 1) * amp[958] - std::complex<double> (0, 1) * amp[1013] - - std::complex<double> (0, 1) * amp[1012] - amp[1016] - amp[1015] - - std::complex<double> (0, 1) * amp[1019] - std::complex<double> (0, 1) * - amp[1018] - std::complex<double> (0, 1) * amp[1025] - - std::complex<double> (0, 1) * amp[1024] - amp[1028] - amp[1027] - - std::complex<double> (0, 1) * amp[1031] - std::complex<double> (0, 1) * - amp[1030]; - jamp[22] = +amp[329] + amp[335] + amp[352] + amp[355] + amp[357] + amp[358] + - amp[361] + amp[363] + std::complex<double> (0, 1) * amp[364] + - std::complex<double> (0, 1) * amp[365] + std::complex<double> (0, 1) * - amp[366] + std::complex<double> (0, 1) * amp[367] - std::complex<double> - (0, 1) * amp[384] + amp[385] - std::complex<double> (0, 1) * amp[387] + - amp[388] - std::complex<double> (0, 1) * amp[389] - std::complex<double> - (0, 1) * amp[390] + amp[391] - std::complex<double> (0, 1) * amp[393] + - amp[394] - std::complex<double> (0, 1) * amp[395] + amp[397] + - std::complex<double> (0, 1) * amp[398] + amp[400] + amp[403] + - std::complex<double> (0, 1) * amp[404] + amp[406] - amp[422] - amp[421] - - amp[425] - amp[424] - amp[428] - amp[427] - amp[431] - amp[430] + - amp[493] + amp[499] + std::complex<double> (0, 1) * amp[504] - amp[506] - - amp[508] + std::complex<double> (0, 1) * amp[510] - amp[512] - amp[514] + - std::complex<double> (0, 1) * amp[528] - amp[530] + std::complex<double> - (0, 1) * amp[531] - amp[532] + std::complex<double> (0, 1) * amp[533] + - std::complex<double> (0, 1) * amp[534] - amp[536] + std::complex<double> - (0, 1) * amp[537] - amp[538] + std::complex<double> (0, 1) * amp[539] + - amp[542] - amp[540] + amp[545] - amp[543] + amp[548] - amp[546] + - amp[551] - amp[549] - std::complex<double> (0, 1) * amp[673] + - std::complex<double> (0, 1) * amp[674] + amp[675] - std::complex<double> - (0, 1) * amp[680] + std::complex<double> (0, 1) * amp[678] + - std::complex<double> (0, 1) * amp[683] - std::complex<double> (0, 1) * - amp[689] + std::complex<double> (0, 1) * amp[687] - std::complex<double> - (0, 1) * amp[691] + std::complex<double> (0, 1) * amp[692] + amp[693] - - std::complex<double> (0, 1) * amp[698] + std::complex<double> (0, 1) * - amp[696] + std::complex<double> (0, 1) * amp[701] - std::complex<double> - (0, 1) * amp[707] + std::complex<double> (0, 1) * amp[705] + amp[708] + - std::complex<double> (0, 1) * amp[710] + amp[712] + std::complex<double> - (0, 1) * amp[713] + amp[715] + amp[716] + std::complex<double> (0, 1) * - amp[718] + amp[720] + std::complex<double> (0, 1) * amp[721] + amp[723] + - std::complex<double> (0, 1) * amp[726] + amp[727] + std::complex<double> - (0, 1) * amp[728] - std::complex<double> (0, 1) * amp[732] - - std::complex<double> (0, 1) * amp[731] + std::complex<double> (0, 1) * - amp[735] + std::complex<double> (0, 1) * amp[737] - amp[738] - - std::complex<double> (0, 1) * amp[741] - std::complex<double> (0, 1) * - amp[740] + std::complex<double> (0, 1) * amp[744] + amp[745] + - std::complex<double> (0, 1) * amp[746] - std::complex<double> (0, 1) * - amp[750] - std::complex<double> (0, 1) * amp[749] + std::complex<double> - (0, 1) * amp[753] + std::complex<double> (0, 1) * amp[755] - amp[756] - - std::complex<double> (0, 1) * amp[759] - std::complex<double> (0, 1) * - amp[758] + std::complex<double> (0, 1) * amp[902] - std::complex<double> - (0, 1) * amp[908] - std::complex<double> (0, 1) * amp[907] + - std::complex<double> (0, 1) * amp[910] + std::complex<double> (0, 1) * - amp[911] - amp[912] - std::complex<double> (0, 1) * amp[917] - - std::complex<double> (0, 1) * amp[916] + std::complex<double> (0, 1) * - amp[920] - std::complex<double> (0, 1) * amp[926] - std::complex<double> - (0, 1) * amp[925] + std::complex<double> (0, 1) * amp[928] + - std::complex<double> (0, 1) * amp[929] - amp[930] - std::complex<double> - (0, 1) * amp[935] - std::complex<double> (0, 1) * amp[934] - amp[938] - - amp[937] - std::complex<double> (0, 1) * amp[941] - std::complex<double> - (0, 1) * amp[940] - std::complex<double> (0, 1) * amp[947] - - std::complex<double> (0, 1) * amp[946] - amp[950] - amp[949] - - std::complex<double> (0, 1) * amp[953] - std::complex<double> (0, 1) * - amp[952] - std::complex<double> (0, 1) * amp[959] - std::complex<double> - (0, 1) * amp[958] - std::complex<double> (0, 1) * amp[989] + - std::complex<double> (0, 1) * amp[987] + amp[992] - amp[990] - - std::complex<double> (0, 1) * amp[995] + std::complex<double> (0, 1) * - amp[993] - std::complex<double> (0, 1) * amp[1001] + std::complex<double> - (0, 1) * amp[999] + amp[1004] - amp[1002] - std::complex<double> (0, 1) * - amp[1007] + std::complex<double> (0, 1) * amp[1005]; - jamp[23] = +amp[328] + amp[334] + amp[336] + amp[339] + amp[341] + amp[342] + - amp[345] + amp[347] + std::complex<double> (0, 1) * amp[348] + - std::complex<double> (0, 1) * amp[349] + std::complex<double> (0, 1) * - amp[350] + std::complex<double> (0, 1) * amp[351] + std::complex<double> - (0, 1) * amp[384] - amp[385] + std::complex<double> (0, 1) * amp[387] - - amp[388] + std::complex<double> (0, 1) * amp[389] + std::complex<double> - (0, 1) * amp[390] - amp[391] + std::complex<double> (0, 1) * amp[393] - - amp[394] + std::complex<double> (0, 1) * amp[395] - amp[409] + - std::complex<double> (0, 1) * amp[411] - amp[412] - amp[415] + - std::complex<double> (0, 1) * amp[417] - amp[418] + amp[422] - amp[420] + - amp[425] - amp[423] + amp[428] - amp[426] + amp[431] - amp[429] + - amp[433] + amp[439] + std::complex<double> (0, 1) * amp[444] - amp[446] - - amp[448] + std::complex<double> (0, 1) * amp[450] - amp[452] - amp[454] + - std::complex<double> (0, 1) * amp[468] - amp[470] + std::complex<double> - (0, 1) * amp[471] - amp[472] + std::complex<double> (0, 1) * amp[473] + - std::complex<double> (0, 1) * amp[474] - amp[476] + std::complex<double> - (0, 1) * amp[477] - amp[478] + std::complex<double> (0, 1) * amp[479] + - amp[482] - amp[480] + amp[485] - amp[483] + amp[488] - amp[486] + - amp[491] - amp[489] + std::complex<double> (0, 1) * amp[673] - - std::complex<double> (0, 1) * amp[674] - amp[675] + std::complex<double> - (0, 1) * amp[680] - std::complex<double> (0, 1) * amp[678] - - std::complex<double> (0, 1) * amp[683] + std::complex<double> (0, 1) * - amp[689] - std::complex<double> (0, 1) * amp[687] + std::complex<double> - (0, 1) * amp[691] - std::complex<double> (0, 1) * amp[692] - amp[693] + - std::complex<double> (0, 1) * amp[698] - std::complex<double> (0, 1) * - amp[696] - std::complex<double> (0, 1) * amp[701] + std::complex<double> - (0, 1) * amp[707] - std::complex<double> (0, 1) * amp[705] - amp[708] - - std::complex<double> (0, 1) * amp[710] - amp[712] - std::complex<double> - (0, 1) * amp[713] - amp[715] - amp[716] - std::complex<double> (0, 1) * - amp[718] - amp[720] - std::complex<double> (0, 1) * amp[721] - amp[723] - - std::complex<double> (0, 1) * amp[830] - amp[831] - std::complex<double> - (0, 1) * amp[832] + std::complex<double> (0, 1) * amp[836] - - std::complex<double> (0, 1) * amp[834] - std::complex<double> (0, 1) * - amp[839] - std::complex<double> (0, 1) * amp[841] - amp[842] + - std::complex<double> (0, 1) * amp[845] - std::complex<double> (0, 1) * - amp[843] - std::complex<double> (0, 1) * amp[848] - amp[849] - - std::complex<double> (0, 1) * amp[850] + std::complex<double> (0, 1) * - amp[854] - std::complex<double> (0, 1) * amp[852] - std::complex<double> - (0, 1) * amp[857] - std::complex<double> (0, 1) * amp[859] - amp[860] + - std::complex<double> (0, 1) * amp[863] - std::complex<double> (0, 1) * - amp[861] - std::complex<double> (0, 1) * amp[904] + std::complex<double> - (0, 1) * amp[908] - std::complex<double> (0, 1) * amp[906] + - std::complex<double> (0, 1) * amp[909] - std::complex<double> (0, 1) * - amp[913] - amp[914] + std::complex<double> (0, 1) * amp[917] - - std::complex<double> (0, 1) * amp[915] - std::complex<double> (0, 1) * - amp[922] + std::complex<double> (0, 1) * amp[926] - std::complex<double> - (0, 1) * amp[924] + std::complex<double> (0, 1) * amp[927] - - std::complex<double> (0, 1) * amp[931] - amp[932] + std::complex<double> - (0, 1) * amp[935] - std::complex<double> (0, 1) * amp[933] + amp[938] - - amp[936] + std::complex<double> (0, 1) * amp[941] - std::complex<double> - (0, 1) * amp[939] + std::complex<double> (0, 1) * amp[947] - - std::complex<double> (0, 1) * amp[945] + amp[950] - amp[948] + - std::complex<double> (0, 1) * amp[953] - std::complex<double> (0, 1) * - amp[951] + std::complex<double> (0, 1) * amp[959] - std::complex<double> - (0, 1) * amp[957] + std::complex<double> (0, 1) * amp[1013] - - std::complex<double> (0, 1) * amp[1011] + amp[1016] - amp[1014] + - std::complex<double> (0, 1) * amp[1019] - std::complex<double> (0, 1) * - amp[1017] + std::complex<double> (0, 1) * amp[1025] - - std::complex<double> (0, 1) * amp[1023] + amp[1028] - amp[1026] + - std::complex<double> (0, 1) * amp[1031] - std::complex<double> (0, 1) * - amp[1029]; - - // Store the leading color flows for choice of color - for(int i = 0; i < ncolor; i++ ) - jamp2[0][i] += real(jamp[i] * conj(jamp[i])); - - return -1.; -} - - -double eeuugggg::get_jamp2(int i) -{ - return jamp2[0][i]; -} - -int eeuugggg::colorstring(int i, int j) -{ - static const int res[24][8] = { - {5, 6, 7, 8, 3, 4, 0, 0}, - {5, 6, 8, 7, 3, 4, 0, 0}, - {5, 7, 6, 8, 3, 4, 0, 0}, - {5, 7, 8, 6, 3, 4, 0, 0}, - {5, 8, 6, 7, 3, 4, 0, 0}, - {5, 8, 7, 6, 3, 4, 0, 0}, - {6, 5, 7, 8, 3, 4, 0, 0}, - {6, 5, 8, 7, 3, 4, 0, 0}, - {6, 7, 5, 8, 3, 4, 0, 0}, - {6, 7, 8, 5, 3, 4, 0, 0}, - {6, 8, 5, 7, 3, 4, 0, 0}, - {6, 8, 7, 5, 3, 4, 0, 0}, - {7, 5, 6, 8, 3, 4, 0, 0}, - {7, 5, 8, 6, 3, 4, 0, 0}, - {7, 6, 5, 8, 3, 4, 0, 0}, - {7, 6, 8, 5, 3, 4, 0, 0}, - {7, 8, 5, 6, 3, 4, 0, 0}, - {7, 8, 6, 5, 3, 4, 0, 0}, - {8, 5, 6, 7, 3, 4, 0, 0}, - {8, 5, 7, 6, 3, 4, 0, 0}, - {8, 6, 5, 7, 3, 4, 0, 0}, - {8, 6, 7, 5, 3, 4, 0, 0}, - {8, 7, 5, 6, 3, 4, 0, 0}, - {8, 7, 6, 5, 3, 4, 0, 0}}; - return res[i][j]; -} - - -int eeuugggg::NCol() -{ - static const int ncolor = 24; - return ncolor; -} - - - - - - - - - - - - diff --git a/Shower/Dipole/Colorea/eeuugggg.h b/Shower/Dipole/Colorea/eeuugggg.h deleted file mode 100644 --- a/Shower/Dipole/Colorea/eeuugggg.h +++ /dev/null @@ -1,52 +0,0 @@ - //========================================================================== - // This file has been automatically generated for C++ Standalone by - // MadGraph5_aMC@NLO v. 2.5.4, 2017-03-28 - // By the MadGraph5_aMC@NLO Development Team - // Visit launchpad.net/madgraph5 and amcatnlo.web.cern.ch - //========================================================================== - // and was then modified by J. Bellm. -#ifndef MG5_Sigma_sm_epem_uuxgggg_H -#define MG5_Sigma_sm_epem_uuxgggg_H -#include <complex> -#include <vector> -#include "Parameters_sm.h" -using namespace std; -class eeuugggg -{ - public: - eeuugggg(){ - initProc("param_card.dat"); - } - // Retrun the prefered gluon order - vector<int> producePermutation(double r,vector < double * > & momenta); - void setMass(int i,double M){mME[i]=M;} - private: - ///////// Process Dependent - static const int ninitial = 2; - static const int nexternal = 8; - static const int nprocesses = 1; - static const int nwavefuncs = 205; - static const int namplitudes = 1032; - std::complex<double> w[nwavefuncs][18]; - double matrix_1_epem_uuxgggg(); - ///////// Generic - double matrix_element[nprocesses]; - std::complex<double> amp[namplitudes]; - double * jamp2[nprocesses]; - Parameters_sm * pars; - vector<double> mME; - vector < double * > p; - int id1, id2; - void initProc(string param_card_name); - void sigmaKin(); - const vector<double> & getMasses() const {return mME;} - vector < double * > getMomenta(){return p;} - void setMomenta(vector < double * > & momenta){p = momenta;} - void setInitial(int inid1, int inid2){id1 = inid1; id2 = inid2;} - void calculate_wavefunctions(const int perm[], const int hel[]); - // New function - double get_jamp2(int i); - int colorstring(int i, int j); - int NCol(); -}; -#endif // MG5_Sigma_sm_epem_uuxgggg_H diff --git a/Shower/Dipole/Colorea/read_slha_COLOREA.cc b/Shower/Dipole/Colorea/read_slha_COLOREA.cc deleted file mode 100644 --- a/Shower/Dipole/Colorea/read_slha_COLOREA.cc +++ /dev/null @@ -1,144 +0,0 @@ -#include <algorithm> -#include <iostream> -#include <fstream> -#include "read_slha_COLOREA.h" - -void SLHABlock_COLOREA::set_entry(std::vector<int> indices, double value) -{ - if (_entries.size() == 0) - _indices = indices.size(); - else if(indices.size() != _indices) - throw "Wrong number of indices in set_entry"; - - _entries[indices] = value; -} - -double SLHABlock_COLOREA::get_entry(std::vector<int> indices, double def_val) -{ - if (_entries.find(indices) == _entries.end()){ - std::cout << "Warning: No such entry in " << _name << ", using default value " - << def_val << std::endl; - return def_val; - } - return _entries[indices]; -} - -void SLHAReader_COLOREA::read_slha_file(std::string file_name) -{ - std::ifstream param_card; - param_card.open(file_name.c_str(), std::ifstream::in); - if(!param_card.good()) - throw "Error while opening param card"; - std::cout << "\nColorea: Opened slha file " << file_name << " for reading" << std::endl; - char buf[200]; - std::string line; - std::string block(""); - - while(param_card.good()){ - param_card.getline(buf, 200); - line = buf; - // Change to lowercase - transform(line.begin(), line.end(), line.begin(), (int(*)(int)) tolower); - if(line != "" && line[0] != '#'){ - if(block != ""){ - // Look for double index blocks - double dindex1, dindex2; - double value; - std::stringstream linestr2(line); - if (linestr2 >> dindex1 >> dindex2 >> value && - dindex1 == int(dindex1) and dindex2 == int(dindex2)) - { - std::vector<int> indices; - indices.push_back(int(dindex1)); - indices.push_back(int(dindex2)); - set_block_entry(block, indices, value); - // Done with this line, read next - continue; - } - std::stringstream linestr1(line); - // Look for single index blocks - if(linestr1 >> dindex1 >> value && dindex1 == int(dindex1)) - { - std::vector<int> indices; - indices.push_back(int(dindex1)); - set_block_entry(block, indices, value); - // Done with this line, read next - continue; - } - } - // Look for block - if(line.find("block ") != line.npos){ - line = line.substr(6); - // Get rid of spaces between block and block name - while (line[0] == ' ') - line = line.substr(1); - // Now find end of block name - std::string::size_type space_pos = line.find(' '); - if(space_pos != line.npos) - line = line.substr(0, space_pos); - block = line; - continue; - } - // Look for decay - if(line.find("decay ") == 0){ - line = line.substr(6); - block = ""; - std::stringstream linestr(line); - int pdg_code; - double value; - if(linestr >> pdg_code >> value) - set_block_entry("decay", pdg_code, value); - else - std::cout << "Warning: Wrong format for decay block " << line << std::endl; - continue; - } - } - } - - if (_blocks.size() == 0) - throw "No information read from SLHA card"; - - param_card.close(); -} - -double SLHAReader_COLOREA::get_block_entry(std::string block_name, std::vector<int> indices, - double def_val) -{ - if (_blocks.find(block_name) == _blocks.end()){ - std::cout << "No such block " << block_name << ", using default value " - << def_val << std::endl; - return def_val; - } - return _blocks[block_name].get_entry(indices); -} - -double SLHAReader_COLOREA::get_block_entry(std::string block_name, int index, - double def_val) -{ - std::vector<int> indices; - indices.push_back(index); - return get_block_entry(block_name, indices, def_val); -} - - -void SLHAReader_COLOREA::set_block_entry(std::string block_name, std::vector<int> indices, - double value) -{ - if (_blocks.find(block_name) == _blocks.end()){ - SLHABlock_COLOREA block(block_name); - _blocks[block_name] = block; - } - _blocks[block_name].set_entry(indices, value); - /* cout << "Set block " << block_name << " entry "; - for (int i=0;i < indices.size();i++) - cout << indices[i] << " "; - cout << "to " << _blocks[block_name].get_entry(indices) << endl;*/ -} - -void SLHAReader_COLOREA::set_block_entry(std::string block_name, int index, - double value) -{ - std::vector<int> indices; - indices.push_back(index); - set_block_entry(block_name, indices, value); -} diff --git a/Shower/Dipole/Colorea/read_slha_COLOREA.h b/Shower/Dipole/Colorea/read_slha_COLOREA.h deleted file mode 100644 --- a/Shower/Dipole/Colorea/read_slha_COLOREA.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef READ_SLHA_H -#define READ_SLHA_H - -#include <map> -#include <string> -#include <sstream> -#include <vector> - -class SLHABlock_COLOREA -{ - public: - SLHABlock_COLOREA(std::string name = ""){_name = name;} - ~SLHABlock_COLOREA(){} - - void set_entry(std::vector<int> indices, double value); - double get_entry(std::vector<int> indices, double def_val = 0); - void set_name(std::string name) {_name = name;} - std::string get_name(){return _name;} - int get_indices() { return _indices;} - - private: - std::string _name; - std::map<std::vector<int>, double> _entries; - unsigned int _indices; -}; - -class SLHAReader_COLOREA -{ - public: - SLHAReader_COLOREA(std::string file_name = "") - {if(file_name != "") read_slha_file(file_name);} - - void read_slha_file(std::string file_name); - double get_block_entry(std::string block_name, std::vector<int> indices, - double def_val = 0); - double get_block_entry(std::string block_name, int index, - double def_val = 0); - void set_block_entry(std::string block_name, std::vector<int> indices, - double value); - void set_block_entry(std::string block_name, int index, - double value); - private: - std::map<std::string, SLHABlock_COLOREA> _blocks; -}; - -#endif diff --git a/Shower/Dipole/DipoleShowerHandler.cc b/Shower/Dipole/DipoleShowerHandler.cc --- a/Shower/Dipole/DipoleShowerHandler.cc +++ b/Shower/Dipole/DipoleShowerHandler.cc @@ -1,1924 +1,1888 @@ // -*- C++ -*- // // DipoleShowerHandler.cc is a part of Herwig - A multi-purpose Monte Carlo event generator // Copyright (C) 2002-2017 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 DipoleShowerHandler class. // #include <config.h> #include "DipoleShowerHandler.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Reference.h" #include "ThePEG/Interface/RefVector.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/ParVector.h" #include "ThePEG/Interface/Switch.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" // include theses to have complete types #include "Herwig/PDF/MPIPDF.h" #include "Herwig/PDF/MinBiasPDF.h" #include "Herwig/PDF/HwRemDecayer.h" #include "Herwig/Shower/Dipole/Utility/DipolePartonSplitter.h" #include "Herwig/MatrixElement/Matchbox/Base/MergerBase.h" #include "Herwig/MatrixElement/Matchbox/Base/SubtractedME.h" #include "Herwig/MatrixElement/Matchbox/MatchboxFactory.h" #include <queue> using namespace Herwig; bool DipoleShowerHandler::firstWarn = true; DipoleShowerHandler::DipoleShowerHandler() : ShowerHandler(), chainOrderVetoScales(true), nEmissions(0), discardNoEmissions(false), firstMCatNLOEmission(false), thePowhegDecayEmission(true), //theAnalyseSpinCorrelations(false), realignmentScheme(0), doSubleadingNc(false),subleadingNcEmissionsLimit(0), densityOperatorEvolution(0),densityOperatorCutoff(1.0*GeV2), doPartialUnweightingAtEmission(false), doPartialUnweighting(false),referenceWeight(0.1), cmecReweightFactor(1.0),negCMECScaling(1.0), verbosity(0), printEvent(0), nTries(0), didRadiate(false), didRealign(false), theRenormalizationScaleFreeze(1.*GeV), theFactorizationScaleFreeze(2.*GeV), theDoCompensate(false), theFreezeGrid(500000), theDetuning(1.0), maxPt(ZERO), muPt(ZERO), theInputColouredOffShellInShower(), theZBoundaries(1) {} DipoleShowerHandler::~DipoleShowerHandler() {} IBPtr DipoleShowerHandler::clone() const { return new_ptr(*this); } IBPtr DipoleShowerHandler::fullclone() const { return new_ptr(*this); } void DipoleShowerHandler::cascade(tPVector ) { throw Exception() << "DipoleShowerHandler: Dipoleshower not implemented as second shower." << "Check your setup or contact Herwig authors." << Exception::runerror; } tPPair DipoleShowerHandler::cascade(tSubProPtr sub, XCombPtr, Energy optHardPt, Energy optCutoff) { useMe(); prepareCascade(sub); resetWeights(); if ( !doFSR() && ! doISR() ) return sub->incoming(); eventRecord().setSubleadingNc(doSubleadingNc, subleadingNcEmissionsLimit); eventRecord().clear(); eventRecord().prepare(sub,dynamic_ptr_cast<tStdXCombPtr>(lastXCombPtr()),newStep(),pdfs(), ShowerHandler::currentHandler()->generator()->currentEvent()->incoming(), firstInteraction(), offShellPartons(), !doSubleadingNc); if ( doSubleadingNc ) { if ( !theSplittingReweight ) { throw Exception() << "No splitting reweight was found. " << "A ColourMatrixElementCorrection " << "splitting reweight is required " << "for the subleading colour shower." << Exception::runerror; } //Set the evolution scheme for the density operator eventRecord().setDensityOperatorEvolution( densityOperatorEvolution, densityOperatorCutoff ); //Set the CMEC reweight factor theSplittingReweight->reweightFactor(cmecReweightFactor); theSplittingReweight->negativeScaling(negCMECScaling); theSplittingReweight->updateCurrentHandler(); } // SW: Removed simple test on doFSR and doISR and moved // here to account for the case of a hard event involving // no coloured particles but with unstable outgoing particles if ( !doFSR() && ! doISR() && eventRecord().decays().empty() ) return sub->incoming(); if ( !doISR() && eventRecord().outgoing().empty() && eventRecord().decays().empty() ) return sub->incoming(); if ( !doFSR() && !eventRecord().incoming().first->coloured() && !eventRecord().incoming().second->coloured() && eventRecord().decays().empty() ) return sub->incoming(); nTries = 0; // Clear the vertex record for spin correlations if ( spinCorrelations() ) //|| theAnalyseSpinCorrelations ) vertexRecord().clear(); while ( true ) { try { didRadiate = false; didRealign = false; if ( eventRecord().truncatedShower() ) { throw Exception() << "Inconsistent hard emission set-up in DipoleShowerHandler::cascade. " << "No truncated shower needed with DipoleShowerHandler. Add " << "'set MEMatching:TruncatedShower No' to input file." << Exception::runerror; } hardScales(lastXCombPtr()->lastShowerScale()); if ( verbosity > 1 ) { generator()->log() << "DipoleShowerHandler starting off:\n"; eventRecord().debugLastEvent(generator()->log()); generator()->log() << flush; } unsigned int nEmitted = 0; if ( firstMCatNLOEmission ) { if ( !eventRecord().isMCatNLOHEvent() ) nEmissions = 1; else nEmissions = 0; } if ( !firstMCatNLOEmission ) { doCascade(nEmitted,optHardPt,optCutoff); if ( discardNoEmissions ) { if ( !didRadiate ) throw Veto(); if ( nEmissions ) if ( nEmissions < nEmitted ) throw Veto(); } } else { if ( nEmissions == 1 ) doCascade(nEmitted,optHardPt,optCutoff); } if ( intrinsicPtGenerator ) { if ( eventRecord().incoming().first->coloured() && eventRecord().incoming().second->coloured() ) { LorentzRotation rot = intrinsicPtGenerator->kick(eventRecord().incoming(), eventRecord().intermediates()); eventRecord().transform(rot); } } didRealign = realign(); constituentReshuffle(); // backup subleading switch if decays fail bool doneSubleadingNc = doSubleadingNc; // subleading N can't handle decays doSubleadingNc = false; try { // Decay and shower any particles that require decaying while ( !eventRecord().decays().empty() ) { map<PPtr,PerturbativeProcessPtr>::const_iterator decayIt = eventRecord().decays().begin(); if ( eventRecord().nextDecay() ) { decayIt = eventRecord().decays().find(eventRecord().nextDecay() ); } else { // find the decay to do, one with greatest width and parent showered while(find(eventRecord().outgoing().begin(),eventRecord().outgoing().end(),decayIt->first)== eventRecord().outgoing().end() && find(eventRecord().hard().begin(),eventRecord().hard().end(),decayIt->first)== eventRecord().hard().end()) ++decayIt; } assert(decayIt!=eventRecord().decays().end()); PPtr incoming = decayIt->first; eventRecord().currentDecay(decayIt->second); // Use this to record if an emission actually happens bool powhegEmission = !( nEmissions && nEmitted==nEmissions) ? thePowhegDecayEmission : false; // Decay the particle / sort out its pert proc Energy showerScale = eventRecord().decay(incoming, powhegEmission); // Following the decay, the bool powheg emission is updated // to indicate whether or not an emission occurred if ( powhegEmission ) nEmitted += 1; // Check that there is only one particle incoming to the decay assert(eventRecord().currentDecay()->incoming().size()==1); // Prepare the event record for the showering of the decay bool needToShower = eventRecord().prepareDecay(eventRecord().currentDecay(), offShellPartons()); // Only need to shower if we have coloured outgoing particles if ( needToShower ) { // The decays currently considered produce a maximum of 2 chains (with powheg emission) // so all dipole should have the same scale as returned by the decay function. assert( eventRecord().chains().size() <= 2 ); for ( auto & ch : eventRecord().chains()) { for ( auto & dip : ch.dipoles()) { assert ( showerScale > ZERO ); dip.leftScale( showerScale ); dip.rightScale( showerScale ); } } // Prepare vertex record for spin correlations in decay shower if ( spinCorrelations() ) vertexRecord().prepareParticleDecay(incoming); // Perform the cascade doCascade(nEmitted,optHardPt,optCutoff,true); if ( spinCorrelations() ) vertexRecord().updateParticleDecay(); // Do the constituent mass shell reshuffling decayConstituentReshuffle(eventRecord().currentDecay()); } // Update the decays, adding any decays and updating momenta eventRecord().updateDecays(eventRecord().currentDecay()); eventRecord().decays().erase(decayIt); } } catch(...) { // reset flag doSubleadingNc = doneSubleadingNc; throw; } doSubleadingNc = doneSubleadingNc; break; } catch (RedoShower&) { resetWeights(); if ( ++nTries > maxtry() ) throw ShowerTriesVeto(maxtry()); eventRecord().clear(); eventRecord().prepare(sub, dynamic_ptr_cast<tStdXCombPtr>(lastXCombPtr()), newStep(), pdfs(), ShowerHandler::currentHandler()->generator()->currentEvent()->incoming(), firstInteraction(), offShellPartons(), !doSubleadingNc); if ( doSubleadingNc ) { theSplittingReweight->updateCurrentHandler(); } continue; } catch (...) { throw; } } tPPair incoming=eventRecord().fillEventRecord(newStep(),firstInteraction(),didRealign); setDidRunCascade(true); return incoming; } // Reshuffle the outgoing partons from the hard process onto their constituent mass shells void DipoleShowerHandler::constituentReshuffle() { if ( constituentReshuffler && ShowerHandler::currentHandler()->retConstituentMasses() ) { if ( eventRecord().decays().empty() ) { constituentReshuffler->reshuffle(eventRecord().outgoing(), eventRecord().incoming(), eventRecord().intermediates()); return; } else { PList decaying; for(auto const & dec : eventRecord().decays()) decaying.push_back(dec.first); constituentReshuffler->hardProcDecayReshuffle( decaying, eventRecord().outgoing(), eventRecord().hard(), eventRecord().incoming(), eventRecord().intermediates()); } } // After reshuffling the hard process, the decays need to be updated // as this is not done in reshuffle vector<pair<PPtr,PerturbativeProcessPtr> > decays; for(auto const & dec : eventRecord().decays() ) decays.push_back({dec.first,dec.second}); for(auto const & dec : decays) { PPtr unstable = dec.first; PList::iterator pos = find(eventRecord().intermediates().begin(), eventRecord().intermediates().end(), dec.first); // Update the PPtr in theDecays if(pos!=eventRecord().intermediates().end()) { unstable = *pos; while(!unstable->children().empty()) { unstable = unstable->children()[0]; } eventRecord().decays().erase(dec.first); eventRecord().decays()[unstable] = dec.second; // Update the momenta of any other particles in the decay chain // (for externally provided events) if ( !(eventRecord().decays()[unstable]->outgoing().empty()) ) eventRecord().updateDecayChainMom( unstable , eventRecord().decays()[unstable]); } else { if ( !(eventRecord().decays()[unstable]->outgoing().empty()) ) { // Update the momenta of any other particles in the decay chain // (for externally provided events) // Note this needs to be done for all decaying particles in the // outgoing/hard regardless of whether that particle radiated // or was involved in the reshuffling, this is due to the // transformation performed for IILightKinematics. if ( (find(eventRecord().outgoing().begin(), eventRecord().outgoing().end(), unstable) != eventRecord().outgoing().end()) || (find(eventRecord().hard().begin(), eventRecord().hard().end(), unstable) != eventRecord().hard().end()) ) eventRecord().updateDecayChainMom( unstable , eventRecord().decays()[unstable]); } } } eventRecord().currentDecay(PerturbativeProcessPtr()); } // Reshuffle outgoing partons from a decay process onto their constituent mass shells void DipoleShowerHandler::decayConstituentReshuffle(PerturbativeProcessPtr decayProc) { if ( Debug::level > 2 ){ // Test this function by comparing the // invariant mass of the outgoing decay // systems before and after reshuffling Lorentz5Momentum testOutMomBefore (ZERO,ZERO,ZERO,ZERO); Energy testInvMassBefore = ZERO; for ( auto const & testDecayOutItBefore : decayProc->outgoing() ) { testOutMomBefore += testDecayOutItBefore.first->momentum(); } testInvMassBefore = testOutMomBefore.m(); // decayReshuffle updates both the event record and the decay perturbative process if ( constituentReshuffler && ShowerHandler::currentHandler()->retConstituentMasses()) { constituentReshuffler->decayReshuffle(decayProc, eventRecord().outgoing(), eventRecord().hard(), eventRecord().intermediates()); } Lorentz5Momentum testOutMomAfter (ZERO,ZERO,ZERO,ZERO); Energy testInvMassAfter = ZERO; for ( auto const & testDecayOutItAfter : decayProc->outgoing() ) { testOutMomAfter += testDecayOutItAfter.first->momentum(); } testInvMassAfter = testOutMomAfter.m(); #ifndef NDEBUG Energy incomingMass = decayProc->incoming()[0].first->momentum().m(); #endif assert( abs(testInvMassBefore-incomingMass)/GeV < 1e-5 ); assert( abs(testInvMassBefore-testInvMassAfter)/GeV < 1e-5); }else{ // decayReshuffle updates both the event record and the decay perturbative process if ( constituentReshuffler && ShowerHandler::currentHandler()->retConstituentMasses() ) { constituentReshuffler->decayReshuffle(decayProc, eventRecord().outgoing(), eventRecord().hard(), eventRecord().intermediates()); } return; } } // Sets the scale of each particle in the dipole chains by finding the smallest //of several upper bound energy scales: the CMEnergy of the event, //the transverse mass of outgoing particles, the hardScale (maxPT or maxQ) //calculated for each dipole (in both configurations) and the veto scale for each particle void DipoleShowerHandler::hardScales(Energy2 muf) { // Initalise maximum pt as max CMEnergy of the event maxPt = generator()->maximumCMEnergy(); if ( restrictPhasespace() ) { // First interaction == hard collision (i.e. not a MPI collision) if ( !hardScaleIsMuF() || !firstInteraction() ) { if ( !eventRecord().outgoing().empty() ) { for ( auto const & p : eventRecord().outgoing() ) maxPt = min(maxPt,p->momentum().mt()); } //Look at any non-coloured outgoing particles in the current subprocess else { assert(!eventRecord().hard().empty()); Lorentz5Momentum phard(ZERO,ZERO,ZERO,ZERO); for ( auto const & p : eventRecord().hard()) phard += p->momentum(); Energy mhard = phard.m(); maxPt = mhard; } maxPt *= hardScaleFactor(); } else { maxPt = hardScaleFactor()*sqrt(muf); } muPt = maxPt; } else { muPt = hardScaleFactor()*sqrt(muf); } if ( doSubleadingNc ) { return; } for ( auto & ch : eventRecord().chains()) { // Note that minVetoScale is a value for each DipoleChain, not each dipole // It will contain the minimum veto scale from all of the dipoles in the chain Energy minVetoScale = -1.*GeV; for ( auto & dip : ch.dipoles()) { // max scale per config Energy maxFirst = ZERO; Energy maxSecond = ZERO; // Loop over the kernels for the given dipole. // For each dipole configuration, calculate ptMax (or QMax if virtuality ordering) // for each kernel and find the maximum for ( auto const & k : kernels) { pair<bool,bool> conf = {true,false}; if ( k->canHandle(dip.index(conf)) ) { // Look in DipoleChainOrdering for this Energy scale = evolutionOrdering()->hardScale(dip.emitter(conf),dip.spectator(conf), dip.emitterX(conf),dip.spectatorX(conf), *k,dip.index(conf)); maxFirst = max(maxFirst,scale); } conf = {false,true}; if ( k->canHandle(dip.index(conf)) ) { Energy scale = evolutionOrdering()->hardScale(dip.emitter(conf),dip.spectator(conf), dip.emitterX(conf),dip.spectatorX(conf), *k,dip.index(conf)); maxSecond = max(maxSecond,scale); } } // Find the maximum value from comparing the maxScale found from maxPt and the vetoScale of the particle if ( dip.leftParticle()->vetoScale() >= ZERO ) { maxFirst = min(maxFirst,sqrt(dip.leftParticle()->vetoScale())); // minVetoScale is a value for each DipoleChain, not each dipole // It contains the minimum veto scale for all the dipoles in the entire DipoleChain if ( minVetoScale >= ZERO ) minVetoScale = min(minVetoScale,sqrt(dip.leftParticle()->vetoScale())); else minVetoScale = sqrt(dip.leftParticle()->vetoScale()); } if ( dip.rightParticle()->vetoScale() >= ZERO ) { maxSecond = min(maxSecond,sqrt(dip.rightParticle()->vetoScale())); if ( minVetoScale >= ZERO ) minVetoScale = min(minVetoScale,sqrt(dip.rightParticle()->vetoScale())); else minVetoScale = sqrt(dip.rightParticle()->vetoScale()); } // Set the emitterScale for both members of each dipole maxFirst = min(maxPt,maxFirst); dip.emitterScale({true,false},maxFirst); maxSecond = min(maxPt,maxSecond); dip.emitterScale({false,true},maxSecond); } // if the smallest veto scale (i.e. from all of the dipoles) // is smaller than the scale calculated for a particular // particle in a particular dipole, // replace the scale with the veto scale if ( !evolutionOrdering()->independentDipoles() && chainOrderVetoScales && minVetoScale >= ZERO ) { for ( auto & dip : ch.dipoles() ) { dip.leftScale(min(dip.leftScale(),minVetoScale)); dip.rightScale(min(dip.rightScale(),minVetoScale)); } } } } void DipoleShowerHandler::hardScalesSubleading(list<DipoleSplittingInfo> candidates, Energy hardPt) { maxPt = hardPt;//generator()->maximumCMEnergy(); // Note that minVetoScale is a value for each competing dipole (i.e. all dipoles // for the subleading shower. // It will contain the minimum veto scale from all of the dipoles Energy minVetoScale = -1.*GeV; for ( list<DipoleSplittingInfo>::iterator cand = candidates.begin(); cand != candidates.end(); ++cand ) { // max scale Energy maxScale = ZERO; // Loop over kernels for ( vector<Ptr<DipoleSplittingKernel>::ptr>::iterator k = kernels.begin(); k != kernels.end(); ++k ) { if ( (**k).canHandle(cand->index()) ) { Energy scale = evolutionOrdering()->hardScale(cand->emitter(),cand->spectator(), cand->emitterX(),cand->spectatorX(), **k,cand->index()); maxScale = max(maxScale,scale); } } if ( cand->emitter()->vetoScale() >= ZERO ) { maxScale = min(maxScale,sqrt(cand->emitter()->vetoScale())); if ( minVetoScale >= ZERO ) minVetoScale = min(minVetoScale,sqrt(cand->emitter()->vetoScale())); else minVetoScale = sqrt(cand->emitter()->vetoScale()); } maxScale = min(maxPt,maxScale); cand->scale(maxScale); } if ( !evolutionOrdering()->independentDipoles() && chainOrderVetoScales && minVetoScale >= ZERO ) { for ( list<DipoleSplittingInfo>::iterator cand = candidates.begin(); cand != candidates.end(); ++cand ) { cand->scale(min(cand->scale(),minVetoScale)); } } } void DipoleShowerHandler::addCandidates(PPair particles, list<DipoleSplittingInfo>& clist) const { DipoleSplittingInfo candidate; Energy2 scale = ZERO; pair<bool,bool> is(particles.first == eventRecord().incoming().first, particles.second == eventRecord().incoming().second); if ( (is.first && !is.second) || (!is.first && is.second) ) { scale = -(particles.first->momentum() - particles.second->momentum()).m2(); } else { scale = (particles.first->momentum() + particles.second->momentum()).m2(); } DipoleIndex index(particles.first->dataPtr(),particles.second->dataPtr(), is.first ? eventRecord().pdfs().first : PDF(), is.second ? eventRecord().pdfs().second : PDF()); candidate.scale(sqrt(scale)); candidate.index(index); candidate.configuration(make_pair(true,false)); candidate.emitter(particles.first); candidate.emitterX(is.first ? eventRecord().fractions().first : 1.0); candidate.spectator(particles.second); candidate.spectatorX(is.second ? eventRecord().fractions().second : 1.0); clist.push_back(candidate); index.swap(); candidate.index(index); candidate.configuration(make_pair(false,true)); candidate.emitter(particles.second); candidate.emitterX(is.second ? eventRecord().fractions().second : 1.0); candidate.spectator(particles.first); candidate.spectatorX(is.first ? eventRecord().fractions().first : 1.0); clist.push_back(candidate); } void DipoleShowerHandler::getCandidates(list<DipoleSplittingInfo>& clist) const { clist.clear(); for ( PList::const_iterator i = eventRecord().outgoing().begin(); i != eventRecord().outgoing().end(); ++i ) { PList::const_iterator j = i; ++j; for ( ; j != eventRecord().outgoing().end(); ++j ) { addCandidates(make_pair(*i,*j),clist); } // Changed order of *i and inc().first if ( eventRecord().incoming().first->coloured() ) addCandidates(make_pair(eventRecord().incoming().first,*i),clist); if ( eventRecord().incoming().second->coloured() ) addCandidates(make_pair(*i,eventRecord().incoming().second),clist); } if ( eventRecord().incoming().first->coloured() && eventRecord().incoming().second->coloured() ) { addCandidates(eventRecord().incoming(),clist); } } void DipoleShowerHandler::performSplitting(DipoleSplittingInfo& split) const { Ptr<DipoleSplittingKinematics>::tptr kinematics = split.splittingKinematics(); kinematics->generateKinematics(split.emitter()->momentum(), split.spectator()->momentum(), split); split.splitEmitter(split.emitterData()->produceParticle(kinematics->lastEmitterMomentum())); split.splitSpectator(split.spectatorData()->produceParticle(kinematics->lastSpectatorMomentum())); split.emission(split.emissionData()->produceParticle(kinematics->lastEmissionMomentum())); // Setting resolution scales for the particles split.emission()->scale(sqr(split.lastPt())); split.splitEmitter()->scale(sqr(split.lastPt())); split.splitSpectator()->scale(split.spectator()->scale()); PVector neighbours; if ( DipolePartonSplitter::colourConnected(split.emitter(), eventRecord().incoming().first) && split.emitter() != eventRecord().incoming().first ) neighbours.push_back(eventRecord().incoming().first); if ( DipolePartonSplitter::colourConnected(split.emitter(), eventRecord().incoming().second) && split.emitter() != eventRecord().incoming().second ) neighbours.push_back(eventRecord().incoming().second); for ( PList::const_iterator p = eventRecord().outgoing().begin(); p != eventRecord().outgoing().end(); ++p ) { if ( *p == split.emitter() ) continue; if ( DipolePartonSplitter::colourConnected(split.emitter(),*p) ) neighbours.push_back(*p); } assert(neighbours.size() == 1 || neighbours.size() == 2 ); if ( neighbours.size() == 2 ) { if ( UseRandom::rnd() < 0.5 ) swap(neighbours[0],neighbours[1]); } DipolePartonSplitter::split(split.emitter(),split.splitEmitter(),split.emission(), neighbours.front(),split.index().initialStateEmitter(),false); DipolePartonSplitter::change(split.spectator(),split.splitSpectator(), split.index().initialStateSpectator(),false); } Energy DipoleShowerHandler::nextSubleadingSplitting(Energy hardPt, Energy optHardPt, Energy optCutoff, const bool decay) { list<DipoleSplittingInfo> candidates; getCandidates(candidates); hardScalesSubleading(candidates,hardPt); for ( list<DipoleSplittingInfo>::iterator cand = candidates.begin(); cand != candidates.end(); cand++ ) { cand->scale(hardPt); } list<DipoleSplittingInfo>::iterator split = candidates.end(); // Winner of all dipoles DipoleSplittingInfo winner; // Winner for the current iteration of the for loop DipoleSplittingInfo candWinner; Energy winnerScale = 0.0*GeV; Energy nextScale = 0.0*GeV; for ( list<DipoleSplittingInfo>::iterator cand = candidates.begin(); cand != candidates.end(); cand++ ) { nextScale = getWinner(candWinner, cand->index(), cand->emitterX(),cand->spectatorX(), make_pair(true,false), cand->emitter(),cand->spectator(), hardPt, optHardPt, optCutoff); if ( nextScale > winnerScale ) { winnerScale = nextScale; winner = candWinner; split = cand; winnerIndex = winningKernelIndex;//check } } if ( split == candidates.end() ) return ZERO; if ( decay ) winner.isDecayProc( true ); split->fill(winner); performSplitting(*split); eventRecord().update(*split); for ( list<DipoleSplittingInfo>::iterator dip = candidates.begin(); dip != candidates.end(); ++dip ) { if ( dip == split ) continue; dip->emission(split->emission()); if ( dip->emitter() == split->emitter() ) { dip->splitEmitter(split->splitEmitter()); } else { dip->splitEmitter(dip->emitter()); } if ( dip->spectator() == split->spectator() ) { dip->splitSpectator(split->splitSpectator()); } else { dip->splitSpectator(dip->spectator()); } } // Update the ShowerHandler of the splitting reweight. if ( doSubleadingNc ) { theSplittingReweight->updateCurrentHandler(); } return split->lastPt(); } Energy DipoleShowerHandler::getWinner(DipoleSplittingInfo& winner, const Dipole& dip, pair<bool,bool> conf, Energy optHardPt, Energy optCutoff) { return getWinner(winner,dip.index(conf), dip.emitterX(conf),dip.spectatorX(conf), conf,dip.emitter(conf),dip.spectator(conf), dip.emitterScale(conf),optHardPt,optCutoff); } Energy DipoleShowerHandler::getWinner(SubleadingSplittingInfo& winner, Energy optHardPt, Energy optCutoff) { return getWinner(winner,winner.index(), winner.emitterX(),winner.spectatorX(), winner.configuration(), winner.emitter(),winner.spectator(), winner.startScale(),optHardPt,optCutoff); } Energy DipoleShowerHandler::getWinner(DipoleSplittingInfo& winner, const DipoleIndex& index, double emitterX, double spectatorX, pair<bool,bool> conf, tPPtr emitter, tPPtr spectator, Energy startScale, Energy optHardPt, Energy optCutoff) { if ( !index.initialStateEmitter() && !doFSR() ) { winner.didStopEvolving(); return 0.0*GeV; } if ( index.initialStateEmitter() && !doISR() ) { winner.didStopEvolving(); return 0.0*GeV; } if ( index.incomingDecaySpectator() && !doFSR() ) { winner.didStopEvolving(); return 0.0*GeV; } // Currently do not split IF dipoles so // don't evaluate them in order to avoid // exceptions in the log if ( index.incomingDecayEmitter() ) { winner.didStopEvolving(); return 0.0*GeV; } DipoleSplittingInfo candidate; candidate.index(index); candidate.configuration(conf); candidate.emitterX(emitterX); candidate.spectatorX(spectatorX); candidate.emitter(emitter); candidate.spectator(spectator); if ( generators().find(candidate.index()) == generators().end() ) getGenerators(candidate.index(),theSplittingReweight); // // NOTE -- needs proper fixing at some point // // For some very strange reason, equal_range gives back // key ranges it hasn't been asked for. This particularly // happens e.g. for FI dipoles of the same kind, but different // PDF (hard vs MPI PDF). I can't see a reason for this, // as DipoleIndex properly implements comparison for equality // and (lexicographic) ordering; for the time being, we // use equal_range, extented by an explicit check for wether // the key is indeed what we wanted. See line after (*) comment // below. // // SW - Update 04/01/2016: Note - This caused a bug for me as I did not // include equality checks on the decay booleans in the == definition pair<GeneratorMap::iterator,GeneratorMap::iterator> gens = generators().equal_range(candidate.index()); Energy winnerScale = 0.0*GeV; GeneratorMap::iterator winnerGen = generators().end(); for ( GeneratorMap::iterator gen = gens.first; gen != gens.second; ++gen ) { if ( doPartialUnweighting ) gen->second->doPartialUnweighting(referenceWeight); // (*) see NOTE above if ( !(gen->first == candidate.index()) ) continue; if ( startScale <= gen->second->splittingKinematics()->IRCutoff() ) continue; Energy dScale = gen->second->splittingKinematics()->dipoleScale(emitter->momentum(), spectator->momentum()); // in very exceptional cases happening in DIS if ( std::isnan( double(dScale/MeV) ) ) throw RedoShower(); candidate.scale(dScale); // Calculate the mass of the recoil system // for decay dipoles if ( candidate.index().incomingDecaySpectator() || candidate.index().incomingDecayEmitter() ) { Energy recoilMass = gen->second->splittingKinematics()->recoilMassKin(emitter->momentum(), spectator->momentum()); candidate.recoilMass(recoilMass); } // Store emitter and spectator masses, needed in kinematics if ( candidate.index().emitterData()->mass() != ZERO ) { if ( !candidate.index().offShellEmitter() ) candidate.emitterMass( emitter->nominalMass() ); else candidate.emitterMass( emitter->mass() ); } if ( candidate.index().spectatorData()->mass() != ZERO ) { if ( !candidate.index().offShellSpectator() ) candidate.spectatorMass( spectator->nominalMass() ); else candidate.spectatorMass( spectator->mass() ); } candidate.continuesEvolving(); Energy hardScale = evolutionOrdering()->maxPt(startScale,candidate,*(gen->second->splittingKernel())); Energy maxPossible = gen->second->splittingKinematics()->ptMax(candidate.scale(), candidate.emitterX(), candidate.spectatorX(), candidate, *gen->second->splittingKernel()); Energy ircutoff = optCutoff < gen->second->splittingKinematics()->IRCutoff() ? gen->second->splittingKinematics()->IRCutoff() : optCutoff; if ( maxPossible <= ircutoff ) { continue; } if ( maxPossible >= hardScale ){ candidate.hardPt(hardScale); } else { hardScale = maxPossible; candidate.hardPt(maxPossible); } gen->second->generate(candidate,currentWeights(),optHardPt,optCutoff); Energy nextScale = evolutionOrdering()->evolutionScale( gen->second->lastSplitting(),*(gen->second->splittingKernel())); if ( nextScale > winnerScale ) { winner.fill(candidate); gen->second->completeSplitting(winner); winnerGen = gen; winnerScale = nextScale; if ( continueSubleadingNc() ) winningKernelIndex = kernelIndex+1;//check } if ( continueSubleadingNc() ) { kernelIndex++;//check scales.push_back(nextScale);//check theWeightsVector.push_back(gen->second->splittingWeightVector()); } reweight(reweight() * gen->second->splittingWeight()); } if ( winnerGen == generators().end() ) { winner.didStopEvolving(); return 0.0*GeV; } if ( winner.stoppedEvolving() ) return 0.0*GeV; return winnerScale; } void DipoleShowerHandler::doCascade(unsigned int& emDone, Energy optHardPt, Energy optCutoff, const bool decay) { if ( nEmissions ) if ( emDone == nEmissions ) return; if ( doSubleadingNc ) { unsigned int subEmDone = 0; // Set the starting scale Energy hardPt = muPt; double wref = referenceWeight; while ( subEmDone < subleadingNcEmissionsLimit && hardPt != ZERO && continueSubleadingNc() ) { // Clear out the weights from the earlier step theWeightsVector.clear(); kernelIndex = 0;//check scales.clear();//check hardPt = nextSubleadingSplitting( hardPt, optHardPt, optCutoff, decay ); // Partial unweighting if ( doPartialUnweightingAtEmission ) { const double w = reweight(); if ( abs(w) < wref ) { if ( abs(w)/wref < UseRandom::rnd() ) { // Set weight to zero and end this event reweight(0.0); return; } else reweight( wref*w/abs(w) ); } // Update the reference weight after emission wref *= referenceWeight; } // When the winning scale is larger than the cutoff // remove the added weights that are under the winning scale if ( hardPt != ZERO ) { Energy maxq = 0.0*GeV; #ifndef NDEBUG size_t iwinner = theWeightsVector.size();//check #endif for ( size_t i = 0; i < theWeightsVector.size(); i++ ) { if ( theWeightsVector[i].size() > 0 ) { // get<2> is true for an accept step. if ( std::get<2>(theWeightsVector[i].back()) && std::get<0>(theWeightsVector[i].back()) > maxq) { maxq = std::get<0>(theWeightsVector[i].back()); #ifndef NDEBUG iwinner = i;//check #endif } } } assert(winnerIndex-1 == iwinner);//check double correctionWeight = 1.0; for ( size_t i = 0; i < theWeightsVector.size(); i++ ) { for ( size_t j = 0; j < theWeightsVector[i].size(); j++ ) { if ( std::get<0>(theWeightsVector[i][j]) < maxq ) correctionWeight *= std::get<1>(theWeightsVector[i][j]); } } reweight(reweight()/correctionWeight); } // Increment the number of subleading Nc emissions done subEmDone++; // Stop if the limit of emissions is reached if ( nEmissions ) if ( ++emDone == nEmissions ) return; } // Subleading shower done, prepare chains for the standard // dipole shower eventRecord().prepareChainsSubleading( decay ); // Set scales for ( list<DipoleChain>::iterator ch = eventRecord().chains().begin(); ch != eventRecord().chains().end(); ch++ ) { for ( list<Dipole>::iterator dp = ch->dipoles().begin(); dp != ch->dipoles().end(); dp++ ) { dp->emitterScale(make_pair(true,false),hardPt); dp->emitterScale(make_pair(false,true),hardPt); } } } DipoleSplittingInfo winner; DipoleSplittingInfo dipoleWinner; while ( eventRecord().haveChain() ) { - - // allow the dipole chain to be rearranged according to arXiv:1801.06113 - if( _rearrange && ( _rearrangeNEmissions < 0 || _rearrangeNEmissions >= int(emDone) ) ){ - eventRecord().currentChain().rearrange(_dipmax,_diplong); - } if ( verbosity > 2 ) { generator()->log() << "DipoleShowerHandler selecting splittings for the chain:\n" << eventRecord().currentChain() << flush; } list<Dipole>::iterator winnerDip = eventRecord().currentChain().dipoles().end(); Energy winnerScale = 0.0*GeV; Energy nextLeftScale = 0.0*GeV; Energy nextRightScale = 0.0*GeV; for ( list<Dipole>::iterator dip = eventRecord().currentChain().dipoles().begin(); dip != eventRecord().currentChain().dipoles().end(); ++dip ) { nextLeftScale = getWinner(dipoleWinner,*dip,{true,false},optHardPt,optCutoff); if ( nextLeftScale > winnerScale ) { winnerScale = nextLeftScale; winner = dipoleWinner; winnerDip = dip; } nextRightScale = getWinner(dipoleWinner,*dip,{false,true},optHardPt,optCutoff); if ( nextRightScale > winnerScale ) { winnerScale = nextRightScale; winner = dipoleWinner; winnerDip = dip; } if ( evolutionOrdering()->independentDipoles() ) { Energy dipScale = max(nextLeftScale,nextRightScale); if ( dip->leftScale() > dipScale ) dip->leftScale(dipScale); if ( dip->rightScale() > dipScale ) dip->rightScale(dipScale); } } if ( verbosity > 1 ) { if ( winnerDip != eventRecord().currentChain().dipoles().end() ) generator()->log() << "DipoleShowerHandler selected the splitting:\n" << winner << " for the dipole\n" << (*winnerDip) << flush; else generator()->log() << "DipoleShowerHandler could not select a splitting above the IR cutoff\n" << flush; } // pop the chain if no dipole did radiate if ( winnerDip == eventRecord().currentChain().dipoles().end() ) { eventRecord().popChain(); if ( theEventReweight && eventRecord().chains().empty() ) if ( (theEventReweight->firstInteraction() && firstInteraction()) || (theEventReweight->secondaryInteractions() && !firstInteraction()) ) { double w = theEventReweight->weightCascade(eventRecord().incoming(), eventRecord().outgoing(), eventRecord().hard(),theGlobalAlphaS); reweight(reweight()*w); } continue; } // otherwise perform the splitting // but first see if the emission would produce a configuration in the ME region. if ( theMergingHelper && eventHandler()->currentCollision() && !decay && firstInteraction() ) { if (theMergingHelper->maxLegs()>eventRecord().outgoing().size()+ eventRecord().hard().size() +2){//incoming if (theMergingHelper->mergingScale()<winnerScale && theMergingHelper->emissionProbability() < UseRandom::rnd()) { theMergingHelper->setEmissionProbability(0.); const bool transparent=true; if (transparent) { pair<list<Dipole>::iterator,list<Dipole>::iterator> tmpchildren; DipoleSplittingInfo tmpwinner=winner; DipoleChain* tmpfirstChain = nullptr; DipoleChain* tmpsecondChain = nullptr; auto New=eventRecord().tmpsplit(winnerDip,tmpwinner, tmpchildren,tmpfirstChain, tmpsecondChain); if (theMergingHelper->matrixElementRegion(New.first, New.second, winnerScale, theMergingHelper->mergingScale())) { optHardPt=winnerScale; continue; } }else{ optHardPt=winnerScale; continue; } } } } if(theMergingHelper&&firstInteraction()) optHardPt=ZERO; didRadiate = true; eventRecord().isMCatNLOSEvent(false); eventRecord().isMCatNLOHEvent(false); pair<list<Dipole>::iterator,list<Dipole>::iterator> children; DipoleChain* firstChain = nullptr; DipoleChain* secondChain = nullptr; // Generate the azimuthal angle if ( spinCorrelations() ) vertexRecord().generatePhi(winner,*winnerDip); if ( decay ) winner.isDecayProc( true ); // Note: the dipoles are updated in eventRecord().split(....) after the splitting, // hence the entire cascade is handled in doCascade // The dipole scales are updated in dip->split(....) if ( decay ) winner.isDecayProc( true ); eventRecord().split(winnerDip,winner,children,firstChain,secondChain); // Update the vertex record following the splitting if ( spinCorrelations() ) vertexRecord().update(winner); assert(firstChain && secondChain); evolutionOrdering()->setEvolutionScale(winnerScale,winner,*firstChain,children); if ( !secondChain->dipoles().empty() ) evolutionOrdering()->setEvolutionScale(winnerScale,winner,*secondChain,children); if ( verbosity > 1 ) { generator()->log() << "DipoleShowerHandler did split the last selected dipole into:\n" << (*children.first) << (*children.second) << flush; } if ( verbosity > 2 ) { generator()->log() << "After splitting the last selected dipole, " << "DipoleShowerHandler encountered the following chains:\n" << (*firstChain) << (*secondChain) << flush; } if ( theEventReweight ) if ( (theEventReweight->firstInteraction() && firstInteraction()) || (theEventReweight->secondaryInteractions() && !firstInteraction()) ) { double w = theEventReweight->weight(eventRecord().incoming(), eventRecord().outgoing(), eventRecord().hard(),theGlobalAlphaS); reweight(reweight()*w); } if ( nEmissions ) if ( ++emDone == nEmissions ) return; } } bool DipoleShowerHandler::realign() { if ( !didRadiate && !intrinsicPtGenerator ) return false; if ( eventRecord().incoming().first->coloured() || eventRecord().incoming().second->coloured() ) { if ( eventRecord().incoming().first->momentum().perp2()/GeV2 < 1e-10 && eventRecord().incoming().second->momentum().perp2()/GeV2 < 1e-10 ) return false; pair<Lorentz5Momentum,Lorentz5Momentum> inMomenta (eventRecord().incoming().first->momentum(), eventRecord().incoming().second->momentum()); LorentzRotation transform((inMomenta.first+inMomenta.second).findBoostToCM()); Axis dir = (transform * inMomenta.first).vect().unit(); Axis rot (-dir.y(),dir.x(),0); double theta = dir.theta(); if ( lastParticles().first->momentum().z() < ZERO ) theta = -theta; transform.rotate(-theta,rot); inMomenta.first = transform*inMomenta.first; inMomenta.second = transform*inMomenta.second; assert(inMomenta.first.z() > ZERO && inMomenta.second.z() < ZERO); Energy2 sHat = (eventRecord().incoming().first->momentum() + eventRecord().incoming().second->momentum()).m2(); pair<Energy,Energy> masses(eventRecord().incoming().first->mass(), eventRecord().incoming().second->mass()); pair<Energy,Energy> qs; if ( !eventRecord().incoming().first->coloured() ) { assert(masses.second == ZERO); qs.first = eventRecord().incoming().first->momentum().z(); qs.second = (sHat-sqr(masses.first))/(2.*(qs.first+sqrt(sqr(masses.first)+sqr(qs.first)))); } else if ( !eventRecord().incoming().second->coloured() ) { assert(masses.first == ZERO); qs.second = eventRecord().incoming().second->momentum().z(); qs.first = (sHat-sqr(masses.second))/(2.*(qs.second+sqrt(sqr(masses.second)+sqr(qs.second)))); } else { assert(masses.first == ZERO && masses.second == ZERO); if ( realignmentScheme == 0 ) { double yX = eventRecord().pX().rapidity(); double yInt = (transform*eventRecord().pX()).rapidity(); double dy = yX-yInt; qs.first = (sqrt(sHat)/2.)*exp(dy); qs.second = (sqrt(sHat)/2.)*exp(-dy); } else if ( realignmentScheme == 1 ) { Energy sS = sqrt((lastParticles().first->momentum() + lastParticles().second->momentum()).m2()); qs.first = eventRecord().fractions().first * sS / 2.; qs.second = eventRecord().fractions().second * sS / 2.; } } double beta = (qs.first-qs.second) / ( sqrt(sqr(masses.first)+sqr(qs.first)) + sqrt(sqr(masses.second)+sqr(qs.second)) ); transform.boostZ(beta); Lorentz5Momentum tmp; if ( eventRecord().incoming().first->coloured() ) { tmp = eventRecord().incoming().first->momentum(); tmp = transform * tmp; eventRecord().incoming().first->set5Momentum(tmp); } if ( eventRecord().incoming().second->coloured() ) { tmp = eventRecord().incoming().second->momentum(); tmp = transform * tmp; eventRecord().incoming().second->set5Momentum(tmp); } eventRecord().transform(transform); return true; } return false; } void DipoleShowerHandler::resetAlphaS(Ptr<AlphaSBase>::tptr as) { for ( auto & k : kernels) { if ( !k->alphaS() ) k->alphaS(as); k->renormalizationScaleFreeze(theRenormalizationScaleFreeze); k->factorizationScaleFreeze(theFactorizationScaleFreeze); } // clear the generators to be rebuild // actually, there shouldn't be any generators // when this happens. generators().clear(); } void DipoleShowerHandler::resetReweight(Ptr<DipoleSplittingReweight>::tptr rw) { for ( auto & g : generators() ) g.second->splittingReweight(rw); } void DipoleShowerHandler::getGenerators(const DipoleIndex& ind, Ptr<DipoleSplittingReweight>::tptr rw) { bool gotone = false; for ( auto & k : kernels ) { if ( k->canHandle(ind) ) { if ( verbosity > 0 ) { generator()->log() << "DipoleShowerHandler encountered the dipole configuration\n" << ind << " in event number " << eventHandler()->currentEvent()->number() << "\nwhich can be handled by the splitting kernel '" << k->name() << "'.\n" << flush; } gotone = true; Ptr<DipoleSplittingGenerator>::ptr nGenerator = new_ptr(DipoleSplittingGenerator()); nGenerator->doCompensate(theDoCompensate); nGenerator->splittingKernel(k); if ( renormalizationScaleFactor() != 1. ) nGenerator->splittingKernel()->renormalizationScaleFactor(renormalizationScaleFactor()); if ( factorizationScaleFactor() != 1. ) nGenerator->splittingKernel()->factorizationScaleFactor(factorizationScaleFactor()); if ( !nGenerator->splittingReweight() ) nGenerator->splittingReweight(rw); nGenerator->splittingKernel()->freezeGrid(theFreezeGrid); nGenerator->splittingKernel()->detuning(theDetuning); GeneratorMap::const_iterator equivalent = generators().end(); for ( GeneratorMap::const_iterator eq = generators().begin(); eq != generators().end(); ++eq ) { if ( !eq->second->wrapping() ) if ( k->canHandleEquivalent(ind,*(eq->second->splittingKernel()),eq->first) ) { equivalent = eq; if ( verbosity > 0 ) { generator()->log() << "The dipole configuration " << ind << " can equivalently be handled by the existing\n" << "generator for configuration " << eq->first << " using the kernel '" << eq->second->splittingKernel()->name() << "'\n" << flush; } break; } } if ( equivalent != generators().end() ) { nGenerator->wrap(equivalent->second); } DipoleSplittingInfo dummy; dummy.index(ind); nGenerator->prepare(dummy); generators().insert({ind,nGenerator}); } } if ( !gotone ) { throw Exception() << "DipoleShowerHandler could not " << "find a splitting kernel which is able " << "to handle splittings off the dipole " << ind << ".\n" << "Please check the input files." << Exception::runerror; } } // If needed, insert default implementations of virtual function defined // in the InterfacedBase class here (using ThePEG-interfaced-impl in Emacs). void DipoleShowerHandler::doinit() { ShowerHandler::doinit(); if ( theGlobalAlphaS ) resetAlphaS(theGlobalAlphaS); // copy off-shell particle ids before showering from input vector to the // set used in the simulation if ( theColouredOffShellInShower.empty() ) { for(unsigned int ix=0;ix<theInputColouredOffShellInShower.size();++ix) theColouredOffShellInShower.insert(abs(theInputColouredOffShellInShower[ix])); } // work out which shower phase space to use for the matching bool zChoice0 = false; bool zChoice1 = false; size_t zChoiceOther = false; for ( auto & k : kernels) { if ( k->splittingKinematics()->openZBoundaries() == 0 ) zChoice0 = true; else if ( k->splittingKinematics()->openZBoundaries() == 1 ) zChoice1 = true; else zChoiceOther = true; // either inconsistent or other option which cannot be handled by the matching if ( zChoice0 && zChoice1 ) { zChoiceOther = true; break; } } if ( zChoiceOther ) theZBoundaries = 2; else if ( zChoice1 ) theZBoundaries = 1; else if ( zChoice0 ) theZBoundaries = 0; } void DipoleShowerHandler::dofinish() { ShowerHandler::dofinish(); } void DipoleShowerHandler::doinitrun() { ShowerHandler::doinitrun(); } void DipoleShowerHandler::persistentOutput(PersistentOStream & os) const { os << kernels << theEvolutionOrdering << constituentReshuffler << intrinsicPtGenerator << theGlobalAlphaS << chainOrderVetoScales << nEmissions << discardNoEmissions << firstMCatNLOEmission << thePowhegDecayEmission //<< theAnalyseSpinCorrelations << doSubleadingNc << subleadingNcEmissionsLimit << densityOperatorEvolution << ounit(densityOperatorCutoff,GeV2) << doPartialUnweightingAtEmission << doPartialUnweighting << referenceWeight << cmecReweightFactor << negCMECScaling << realignmentScheme << verbosity << printEvent << ounit(theRenormalizationScaleFreeze,GeV) << ounit(theFactorizationScaleFreeze,GeV) << theShowerApproximation << theDoCompensate << theFreezeGrid << theDetuning << theEventReweight << theSplittingReweight << ounit(maxPt,GeV) << ounit(muPt,GeV)<< theMergingHelper << theColouredOffShellInShower << theInputColouredOffShellInShower - << _rearrange << _dipmax << _diplong << _rearrangeNEmissions << theZBoundaries; + << theZBoundaries; } void DipoleShowerHandler::persistentInput(PersistentIStream & is, int) { is >> kernels >> theEvolutionOrdering >> constituentReshuffler >> intrinsicPtGenerator >> theGlobalAlphaS >> chainOrderVetoScales >> nEmissions >> discardNoEmissions >> firstMCatNLOEmission >> thePowhegDecayEmission //>> theAnalyseSpinCorrelations >> doSubleadingNc >> subleadingNcEmissionsLimit >> densityOperatorEvolution >> iunit(densityOperatorCutoff,GeV2) >> doPartialUnweightingAtEmission >> doPartialUnweighting >> referenceWeight >> cmecReweightFactor >> negCMECScaling >> realignmentScheme >> verbosity >> printEvent >> iunit(theRenormalizationScaleFreeze,GeV) >> iunit(theFactorizationScaleFreeze,GeV) >> theShowerApproximation >> theDoCompensate >> theFreezeGrid >> theDetuning >> theEventReweight >> theSplittingReweight >> iunit(maxPt,GeV) >> iunit(muPt,GeV)>>theMergingHelper >> theColouredOffShellInShower >> theInputColouredOffShellInShower - >> _rearrange >> _dipmax >> _diplong >> _rearrangeNEmissions >> theZBoundaries; + >> theZBoundaries; } ClassDescription<DipoleShowerHandler> DipoleShowerHandler::initDipoleShowerHandler; // Definition of the static class description member. void DipoleShowerHandler::Init() { static ClassDocumentation<DipoleShowerHandler> documentation ("The DipoleShowerHandler class manages the showering using " "the dipole shower algorithm.", "The shower evolution was performed using the algorithm described in " "\\cite{Platzer:2009jq} and \\cite{Platzer:2011bc}.", "%\\cite{Platzer:2009jq}\n" "\\bibitem{Platzer:2009jq}\n" "S.~Platzer and S.~Gieseke,\n" "``Coherent Parton Showers with Local Recoils,''\n" " JHEP {\\bf 1101}, 024 (2011)\n" "arXiv:0909.5593 [hep-ph].\n" "%%CITATION = ARXIV:0909.5593;%%\n" "%\\cite{Platzer:2011bc}\n" "\\bibitem{Platzer:2011bc}\n" "S.~Platzer and S.~Gieseke,\n" "``Dipole Showers and Automated NLO Matching in Herwig,''\n" "arXiv:1109.6256 [hep-ph].\n" "%%CITATION = ARXIV:1109.6256;%%"); static RefVector<DipoleShowerHandler,DipoleSplittingKernel> interfaceKernels ("Kernels", "Set the splitting kernels to be used by the dipole shower.", &DipoleShowerHandler::kernels, -1, false, false, true, false, false); static Reference<DipoleShowerHandler,DipoleEvolutionOrdering> interfaceEvolutionOrdering ("EvolutionOrdering", "Set the evolution ordering to be used.", &DipoleShowerHandler::theEvolutionOrdering, false, false, true, false, false); static Reference<DipoleShowerHandler,ConstituentReshuffler> interfaceConstituentReshuffler ("ConstituentReshuffler", "The object to be used to reshuffle partons to their constitutent mass shells.", &DipoleShowerHandler::constituentReshuffler, false, false, true, true, false); static Reference<DipoleShowerHandler,IntrinsicPtGenerator> interfaceIntrinsicPtGenerator ("IntrinsicPtGenerator", "Set the object in charge to generate intrinsic pt for incoming partons.", &DipoleShowerHandler::intrinsicPtGenerator, false, false, true, true, false); static Reference<DipoleShowerHandler,AlphaSBase> interfaceGlobalAlphaS ("GlobalAlphaS", "Set a global strong coupling for all splitting kernels.", &DipoleShowerHandler::theGlobalAlphaS, false, false, true, true, false); // Start: Trying to add interface for the subleading Nc static Switch<DipoleShowerHandler,bool> interfaceDoSubleadingNc ("DoSubleadingNc", "Switch on or off subleading Nc corrections.", &DipoleShowerHandler::doSubleadingNc, true, false, false); static SwitchOption interfaceDoSubleadingNcOn (interfaceDoSubleadingNc, "On", "Switch on subleading Nc corrections.", true); static SwitchOption interfaceDoSubleadingNcOff (interfaceDoSubleadingNc, "Off", "Switch off subleading Nc corrections.", false); // Limit for how many subleading Nc emissions should be calculated static Parameter<DipoleShowerHandler,size_t> interfaceSubleadingNcEmissionsLimit ("SubleadingNcEmissionsLimit", "Number of emissions to calculate subleading Nc corrections for.", &DipoleShowerHandler::subleadingNcEmissionsLimit,0,0,0, false, false, Interface::lowerlim); static Parameter<DipoleShowerHandler,int> interfaceDensityOperatorEvolution ("DensityOperatorEvolution", "Scheme for evolving the density operator.", &DipoleShowerHandler::densityOperatorEvolution,0,0,0, false, false, Interface::lowerlim); static Parameter<DipoleShowerHandler,Energy2> interfaceDensityOperatorCutoff ("DensityOperatorCutoff", "Cutoff for momentum invariants for the density operator evolution.", &DipoleShowerHandler::densityOperatorCutoff,GeV2,1.0*GeV2,0.0*GeV2,0*GeV2, false, false, Interface::lowerlim); static Switch<DipoleShowerHandler,bool> interfaceDoPartialUnweightingAtEmission ("DoPartialUnweightingAtEmission", "Switch on or off partial unweighting at the emission level.", &DipoleShowerHandler::doPartialUnweightingAtEmission,true,false,false); static SwitchOption interfaceDoPartialUnweightingAtEmissionOn (interfaceDoPartialUnweightingAtEmission, "On", "Switch on partial unweighting.", true); static SwitchOption interfaceDoPartialUnweightingAtEmissionOff (interfaceDoPartialUnweightingAtEmission, "Off", "Switch off partial unweighting.", false); static Switch<DipoleShowerHandler,bool> interfaceDoPartialUnweighting ("DoPartialUnweighting", "Switch on or off partial unweighting at the dipole splitting level.", &DipoleShowerHandler::doPartialUnweighting,true,false,false); static SwitchOption interfaceDoPartialUnweightingOn (interfaceDoPartialUnweighting, "On", "Switch on partial unweighting.", true); static SwitchOption interfaceDoPartialUnweightingOff (interfaceDoPartialUnweighting, "Off", "Switch off partial unweighting.", false); static Parameter<DipoleShowerHandler,double> interfaceReferenceWeight ("ReferenceWeight", "Reference weight for the partial unweighting.", &DipoleShowerHandler::referenceWeight,0.1,0.0,0, false, false, Interface::lowerlim); static Parameter<DipoleShowerHandler,double> interfaceCMECReweightFactor ("CMECReweightFactor", "Factor used in the reweighting algorithm.", &DipoleShowerHandler::cmecReweightFactor,1.0,0.0,0, false, false, Interface::lowerlim); static Parameter<DipoleShowerHandler,double> interfaceNegCMECScaling ("NegCMECScaling", "Scaling factor for the negative colour matrix element corrections (CMECs).", &DipoleShowerHandler::negCMECScaling,0.0,0.0,0, false, false, Interface::lowerlim); static Switch<DipoleShowerHandler,int> interfaceRealignmentScheme ("RealignmentScheme", "The realignment scheme to use.", &DipoleShowerHandler::realignmentScheme, 0, false, false); static SwitchOption interfaceRealignmentSchemePreserveRapidity (interfaceRealignmentScheme, "PreserveRapidity", "Preserve the rapidity of non-coloured outgoing system.", 0); static SwitchOption interfaceRealignmentSchemeEvolutionFractions (interfaceRealignmentScheme, "EvolutionFractions", "Use momentum fractions as generated by the evolution.", 1); static SwitchOption interfaceRealignmentSchemeCollisionFrame (interfaceRealignmentScheme, "CollisionFrame", "Determine realignment from collision frame.", 2); static Switch<DipoleShowerHandler,bool> interfaceChainOrderVetoScales ("ChainOrderVetoScales", "[experimental] Switch the chain ordering for veto scales on or off.", &DipoleShowerHandler::chainOrderVetoScales, true, false, false); static SwitchOption interfaceChainOrderVetoScalesYes (interfaceChainOrderVetoScales, "Yes", "Switch on chain ordering for veto scales.", true); static SwitchOption interfaceChainOrderVetoScalesNo (interfaceChainOrderVetoScales, "No", "Switch off chain ordering for veto scales.", false); interfaceChainOrderVetoScales.rank(-1); static Parameter<DipoleShowerHandler,unsigned int> interfaceNEmissions ("NEmissions", "[debug option] Limit the number of emissions to be generated. Zero does not limit the number of emissions.", &DipoleShowerHandler::nEmissions, 0, 0, 0, false, false, Interface::lowerlim); interfaceNEmissions.rank(-1); static Switch<DipoleShowerHandler,bool> interfaceDiscardNoEmissions ("DiscardNoEmissions", "[debug option] Discard events without radiation.", &DipoleShowerHandler::discardNoEmissions, false, false, false); static SwitchOption interfaceDiscardNoEmissionsYes (interfaceDiscardNoEmissions, "Yes", "Discard events without radiation.", true); static SwitchOption interfaceDiscardNoEmissionsNo (interfaceDiscardNoEmissions, "No", "Do not discard events without radiation.", false); interfaceDiscardNoEmissions.rank(-1); static Switch<DipoleShowerHandler,bool> interfaceFirstMCatNLOEmission ("FirstMCatNLOEmission", "[debug option] Only perform the first MC@NLO emission.", &DipoleShowerHandler::firstMCatNLOEmission, false, false, false); static SwitchOption interfaceFirstMCatNLOEmissionYes (interfaceFirstMCatNLOEmission, "Yes", "Perform only the first MC@NLO emission.", true); static SwitchOption interfaceFirstMCatNLOEmissionNo (interfaceFirstMCatNLOEmission, "No", "Produce all emissions.", false); interfaceFirstMCatNLOEmission.rank(-1); static Parameter<DipoleShowerHandler,int> interfaceVerbosity ("Verbosity", "[debug option] Set the level of debug information provided.", &DipoleShowerHandler::verbosity, 0, 0, 0, false, false, Interface::lowerlim); interfaceVerbosity.rank(-1); static Parameter<DipoleShowerHandler,int> interfacePrintEvent ("PrintEvent", "[debug option] The number of events for which debugging information should be provided.", &DipoleShowerHandler::printEvent, 0, 0, 0, false, false, Interface::lowerlim); interfacePrintEvent.rank(-1); static Parameter<DipoleShowerHandler,Energy> interfaceRenormalizationScaleFreeze ("RenormalizationScaleFreeze", "The freezing scale for the renormalization scale.", &DipoleShowerHandler::theRenormalizationScaleFreeze, GeV, 1.0*GeV, 0.0*GeV, 0*GeV, false, false, Interface::lowerlim); static Parameter<DipoleShowerHandler,Energy> interfaceFactorizationScaleFreeze ("FactorizationScaleFreeze", "The freezing scale for the factorization scale.", &DipoleShowerHandler::theFactorizationScaleFreeze, GeV, 2.0*GeV, 0.0*GeV, 0*GeV, false, false, Interface::lowerlim); static Switch<DipoleShowerHandler,bool> interfaceDoCompensate ("DoCompensate", "", &DipoleShowerHandler::theDoCompensate, false, false, false); static SwitchOption interfaceDoCompensateYes (interfaceDoCompensate, "Yes", "", true); static SwitchOption interfaceDoCompensateNo (interfaceDoCompensate, "No", "", false); static Parameter<DipoleShowerHandler,unsigned long> interfaceFreezeGrid ("FreezeGrid", "", &DipoleShowerHandler::theFreezeGrid, 500000, 1, 0, false, false, Interface::lowerlim); static Parameter<DipoleShowerHandler,double> interfaceDetuning ("Detuning", "A value to detune the overestimate kernel.", &DipoleShowerHandler::theDetuning, 1.0, 1.0, 0, false, false, Interface::lowerlim); static Reference<DipoleShowerHandler,DipoleEventReweight> interfaceEventReweight ("EventReweight", "", &DipoleShowerHandler::theEventReweight, false, false, true, true, false); static Reference<DipoleShowerHandler,DipoleSplittingReweight> interfaceSplittingReweight ("SplittingReweight", "Set the splitting reweight.", &DipoleShowerHandler::theSplittingReweight, false, false, true, true, false); static Switch<DipoleShowerHandler, bool> interfacePowhegDecayEmission ("PowhegDecayEmission", "Use Powheg style emission for the decays", &DipoleShowerHandler::thePowhegDecayEmission, true, false, false); static SwitchOption interfacePowhegDecayEmissionYes (interfacePowhegDecayEmission,"Yes","Powheg decay emission on", true); static SwitchOption interfacePowhegDecayEmissionNo (interfacePowhegDecayEmission,"No","Powheg decay emission off", false); static ParVector<DipoleShowerHandler,long> interfaceOffShellInShower ("OffShellInShower", "PDG codes of the coloured particles that can be off-shell in the process.", &DipoleShowerHandler::theInputColouredOffShellInShower, -1, 0l, -10000000l, 10000000l, false, false, Interface::limited); /* static Switch<DipoleShowerHandler, bool> interfaceAnalyseSpinCorrelations ("AnalyseSpinCorrelations", "Record the information required for the spin correlation analyis.", &DipoleShowerHandler::theAnalyseSpinCorrelations, false, false, false); static SwitchOption interfaceAnalyseSpinCorrelationsYes (interfaceAnalyseSpinCorrelations,"Yes","Record the information for analysing the spin correlations.", true); static SwitchOption interfaceAnalyseSpinCorrelationsNo (interfaceAnalyseSpinCorrelations,"No","Do not record extra information.", false); */ - static Switch<DipoleShowerHandler, bool> interfacerearrange - ("Rearrange", - "Allow rearranging of dipole chains according to arXiv:1801.06113", - &DipoleShowerHandler::_rearrange, false, false, false); - - static SwitchOption interfacerearrangeYes - (interfacerearrange,"Yes","_rearrange on", true); - - static SwitchOption interfacerearrangeNo - (interfacerearrange,"No","_rearrange off", false); - - static Parameter<DipoleShowerHandler,unsigned int> interfacedipmax - ("DipMax", - "Allow rearrangment of color chains with ME including dipmax dipoles.", - &DipoleShowerHandler::_dipmax, 0, 0, 0, - false, false, Interface::lowerlim); - - static Parameter<DipoleShowerHandler,unsigned int> interfacediplong - ("DipLong", - "Dipole chains with more than dipmax dipoles are treated as long. \ - diplong=3 rearranges these chains with eeuugg MEs, \ - diplong=4 rearranges these chains with eeuuggg MEs (slower), \ - diplong=5 rearranges these chains with eeuugggg MEs (slow).\ - Note: Numerically there is no difference between the options. ", - &DipoleShowerHandler::_diplong, 0, 0, 0, - false, false, Interface::lowerlim); - - static Parameter<DipoleShowerHandler, int> interfacedcorrectNemissions - ("RearrangeNEmissions", - "Allow rearrangment of color chains up to the nth emission.", - &DipoleShowerHandler::_rearrangeNEmissions, 0, 0, 0, - false, false, Interface::lowerlim); + } diff --git a/Shower/Dipole/DipoleShowerHandler.h b/Shower/Dipole/DipoleShowerHandler.h --- a/Shower/Dipole/DipoleShowerHandler.h +++ b/Shower/Dipole/DipoleShowerHandler.h @@ -1,777 +1,756 @@ // -*- C++ -*- // // DipoleShowerHandler.h is a part of Herwig - A multi-purpose Monte Carlo event generator // Copyright (C) 2002-2017 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_DipoleShowerHandler_H #define HERWIG_DipoleShowerHandler_H // // This is the declaration of the DipoleShowerHandler class. // #include "Herwig/Shower/ShowerHandler.h" #include "Herwig/Shower/Dipole/DipoleShowerHandler.fh" #include "Herwig/Shower/Dipole/Base/DipoleSplittingInfo.h" #include "Herwig/Shower/Dipole/Base/DipoleSplittingReweight.h" #include "Herwig/Shower/Dipole/Kernels/DipoleSplittingKernel.h" #include "Herwig/Shower/Dipole/Base/DipoleSplittingGenerator.h" #include "Herwig/Shower/Dipole/Base/DipoleEventRecord.h" #include "Herwig/Shower/Dipole/Base/DipoleEvolutionOrdering.h" #include "Herwig/Shower/Dipole/Base/DipoleEventReweight.h" #include "Herwig/Shower/Dipole/Utility/ConstituentReshuffler.h" #include "Herwig/Shower/Dipole/Utility/IntrinsicPtGenerator.h" #include "Herwig/MatrixElement/Matchbox/Base/MergerBase.h" #include "Herwig/MatrixElement/Matchbox/Matching/ShowerApproximation.h" #include "Herwig/Shower/Dipole/SpinCorrelations/DipoleVertexRecord.h" #include "Herwig/MatrixElement/Matchbox/Utility/DensityOperator.h" #include <tuple> namespace Herwig { using namespace ThePEG; /** * \ingroup DipoleShower * \author Simon Platzer, Stephen Webster * * \brief The DipoleShowerHandler class manages the showering using * the dipole shower algorithm. * * @see \ref DipoleShowerHandlerInterfaces "The interfaces" * defined for DipoleShowerHandler. */ class DipoleShowerHandler: public ShowerHandler { friend class Merger; public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ DipoleShowerHandler(); /** * The destructor. */ virtual ~DipoleShowerHandler(); //@} public: inline void colourPrint(); /** * Indicate a problem in the shower. */ struct RedoShower {}; /** * Insert an additional splitting kernel. */ void addSplitting(Ptr<DipoleSplittingKernel>::ptr sp) { kernels.push_back(sp); } /** * Reset the alpha_s for all splitting kernels. */ void resetAlphaS(Ptr<AlphaSBase>::tptr); virtual void cascade(tPVector); /** * Reset the splitting reweight for all splitting kernels. */ void resetReweight(Ptr<DipoleSplittingReweight>::tptr); /** * Return true, if the shower handler can generate a truncated * shower for POWHEG style events generated using Matchbox */ virtual bool canHandleMatchboxTrunc() const { return false; } /** * Return true, if this cascade handler will perform reshuffling from hard * process masses. */ virtual bool isReshuffling() const { return false; } /** * Return the relevant hard scale to be used in the profile scales */ virtual Energy hardScale() const { return muPt; } /** * Calculate the alpha_s value the shower uses for Q. */ double as(Energy Q)const{return theGlobalAlphaS->value(sqr(Q));} /** * Return the number of scale dependent active flavours from * the alpha_s object. */ double Nf(Energy Q)const{return theGlobalAlphaS->Nf(sqr(Q));} /* * Access the vertex record */ DipoleVertexRecord& vertexRecord() { return theVertexRecord; } /** * Return the event record */ const DipoleVertexRecord& vertexRecord() const { return theVertexRecord; } /** * Set the pointer to the Merging Helper. * Used by the merging factory. */ void setMerger(Ptr<MergerBase>::ptr mh){theMergingHelper=mh;} public: /** * Return the dictionary for the incoming particles and outgoing partons * in the event, will be empty if subleading Nc is turned off. */ const map<PPtr,size_t>& particleIndices() const { return eventRecord().particleIndices(); } /** * Return the particle data vector of the particles in the event, will * be empty if subleading Nc is turned off. */ const cPDVector& particlesAfter() const { return eventRecord().particlesAfter(); } /** * Return the density operator from the event record. */ DensityOperator& densityOperator() { return eventRecord().densityOperator(); } /** * Return the colour matrix element correction map, will be empty if * subleading Nc is turned off. NOT USED, REMOVE */ const map<pair<vector<PDT::Colour>,pair<size_t,size_t> >,double>& correlatorMap() const { return eventRecord().densityOperator().correlatorMap(); } /** * Return the colour basis used in the density operator. NOT USED, REMOVE */ Ptr<ColourBasis>::tptr colourBasis() { return eventRecord().densityOperator().colourBasis(); } /** * Return the continue subleading Nc flag from the event record. */ bool continueSubleadingNc() const { return eventRecord().getContinueSubleadingNc(); } protected: /** * Add the possible splitting candidates given a pair of emitting particles */ void addCandidates(PPair particles, list<DipoleSplittingInfo>& clist) const; /** * Get all possible radiating dipoles */ void getCandidates(list<DipoleSplittingInfo>& clist) const; /** * Perform a splitting independent of any chains */ void performSplitting(DipoleSplittingInfo&) const; /** * Generate the next subleading Nc improved splitting and return the scale */ Energy nextSubleadingSplitting(Energy hardPt, Energy optHardPt, Energy optCutoff, const bool decay); protected: typedef multimap<DipoleIndex,Ptr<DipoleSplittingGenerator>::ptr> GeneratorMap; /** * The main method which manages the showering of a subprocess. */ virtual tPPair cascade(tSubProPtr sub, XCombPtr xcomb) { return cascade(sub,xcomb,ZERO,ZERO); } /** * The main method which manages the showering of a subprocess. */ tPPair cascade(tSubProPtr sub, XCombPtr xcomb, Energy optHardPt, Energy optCutoff); /** * Build splitting generators for the given * dipole index. */ void getGenerators(const DipoleIndex&, Ptr<DipoleSplittingReweight>::tptr rw = Ptr<DipoleSplittingReweight>::tptr()); /** * Setup the hard scales. */ void hardScales(Energy2 scale); /** * Setup the hard scales of the dipoles after subleading emissions.//debug */ void hardScalesSubleading(list<DipoleSplittingInfo> candidates,Energy hardPt); /** * Return the evolution ordering */ Ptr<DipoleEvolutionOrdering>::tptr evolutionOrdering() const { return theEvolutionOrdering; } /** * Reshuffle to constituent mass shells */ void constituentReshuffle(); /** * Reshuffle to constituent mass shells */ void decayConstituentReshuffle( PerturbativeProcessPtr decayProc); /** * Access the generator map */ GeneratorMap& generators() { return theGenerators; } /** * Access the event record */ DipoleEventRecord& eventRecord() { return theEventRecord; } /** * Return the event record */ const DipoleEventRecord& eventRecord() const { return theEventRecord; } /** * Return the splitting kernels. */ const vector<Ptr<DipoleSplittingKernel>::ptr>& splittingKernels() const { return kernels; } /** * Return the set of offshell parton ids. **/ const set<long>& offShellPartons() { return theColouredOffShellInShower; } /** * Realign the event such as to have the incoming partons along thre * beam axes. */ bool realign(); /** * The choice of z boundaries; 0 = restricted, 1 = open, 2 = mixed/other */ virtual int showerPhaseSpaceOption() const { return theZBoundaries; } protected: /** * Perform the cascade. */ void doCascade(unsigned int& emDone, Energy optHardPt = ZERO, Energy optCutoff = ZERO, const bool decay = false); /** * Set the number of emissions **/ void setNEmissions(unsigned int n){nEmissions=n;} /** * Get the winning splitting for the * given dipole and configuration. */ Energy getWinner(DipoleSplittingInfo& winner, const Dipole& dip, pair<bool,bool> conf, Energy optHardPt = ZERO, Energy optCutoff = ZERO); /** * Get the winning splitting for the * given dipole and configuration. */ Energy getWinner(DipoleSplittingInfo& winner, Energy optHardPt = ZERO, Energy optCutoff = ZERO); /** * Get the winning splitting for the * given dipole and configuration. */ Energy getWinner(SubleadingSplittingInfo& winner, Energy optHardPt = ZERO, Energy optCutoff = ZERO); /** * Get the winning splitting for the * given dipole and configuration. */ Energy getWinner(DipoleSplittingInfo& winner, const DipoleIndex& index, double emitterX, double spectatorX, pair<bool,bool> conf, tPPtr emitter, tPPtr spectator, Energy startScale, Energy optHardPt = ZERO, Energy optCutoff = ZERO); 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). 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(); //@} private: /** * The splitting kernels to be used. */ vector<Ptr<DipoleSplittingKernel>::ptr> kernels; /** * The evolution ordering considered */ Ptr<DipoleEvolutionOrdering>::ptr theEvolutionOrdering; /** * The ConstituentReshuffler to be used */ Ptr<ConstituentReshuffler>::ptr constituentReshuffler; /** * The intrinsic pt generator to be used. */ Ptr<IntrinsicPtGenerator>::ptr intrinsicPtGenerator; /** * A global alpha_s to be used for all splitting kernels. */ Ptr<AlphaSBase>::ptr theGlobalAlphaS; /** * Apply chain ordering to events from matrix * element corrections. */ bool chainOrderVetoScales; /** * Limit the number of emissions. * Limit applied if > 0. */ unsigned int nEmissions; /** * Discard events which did not radiate. */ bool discardNoEmissions; /** * Perform the first MC@NLO emission only. */ bool firstMCatNLOEmission; /** * True if powheg style emissions are to be used in the decays */ bool thePowhegDecayEmission; /** * Switch to record information required for the * nearest neighbour analysis. */ //bool theAnalyseSpinCorrelations; /** * The realignment scheme */ int realignmentScheme; /** * Switch on or off subleading Nc corrections */ bool doSubleadingNc; /** * Number of emissions to do subleading Nc corrections to. */ size_t subleadingNcEmissionsLimit; /** * Current reference weight used for partial unweighting of the * subleading colour shower (updated each emission). */ int currentReferenceWeight; /** * Integer used to set which method of evolving the density operator * to use: * 0 - Vijk is Eikonal but there is a cutoff. * 1 - Vijk is Eikonal. * 2 - Vijk=1 for all i,j,k. * 3 - Semi-leading Nc, Vijk=0 for all */ int densityOperatorEvolution; /** * Cutoff scale for the invariants (e.g. pEmitter*pEmission) in the * Eikonal dipole kernel, Vijk. */ Energy2 densityOperatorCutoff; /** * Switch on or off partial unweighting in after each subleading emission. */ bool doPartialUnweightingAtEmission; /** * Switch on or off partial unweighting in the splitting generator. */ bool doPartialUnweighting; /** * Reference weight for the partial unweighting. */ double referenceWeight; /** * Factor changing the acceptance probability for the veto algorithm. */ double cmecReweightFactor; /** * Scaling factor for the negative colour matrix element corrections. */ double negCMECScaling; private: /** * The verbosity level. * 0 - print no info * 1 - print diagnostic information on setting up * splitting generators etc. * 2 - print detailed event information for up to * printEvent events. * 3 - print dipole chains after each splitting. */ int verbosity; /** * See verbosity. */ int printEvent; private: /** * The splitting generators indexed by the dipole * indices they can work on. */ GeneratorMap theGenerators; /** * The evnt record used. */ DipoleEventRecord theEventRecord; /** * The vertex record. **/ DipoleVertexRecord theVertexRecord; /** * The number of shoer tries so far. */ unsigned int nTries; /** * Whether or not we did radiate anything */ bool didRadiate; /** * Whether or not we did realign the event */ bool didRealign; /** * Vector of candidate splittings containing a vector of the * weights, scale and a bool for every step in the reweighted * veto algorithm. The bool is true for an accept step. */ vector<vector<std::tuple<Energy,double,bool> > > theWeightsVector; /** * Winning candidate index. */ size_t winnerIndex;//debug size_t kernelIndex;//debug size_t winningKernelIndex;//debug vector<Energy> scales;//debug private: /** * A freezing value for the renormalization scale */ Energy theRenormalizationScaleFreeze; /** * A freezing value for the factorization scale */ Energy theFactorizationScaleFreeze; /** * The matching subtraction, if appropriate */ Ptr<ShowerApproximation>::tptr theShowerApproximation; /** * True, if sampler should apply compensation */ bool theDoCompensate; /** * Return the number of accepted points after which the grid should * be frozen */ unsigned long theFreezeGrid; /** * The detuning factor applied to the sampling overestimate kernel */ double theDetuning; /** * A pointer to the dipole event reweight object */ Ptr<DipoleEventReweight>::ptr theEventReweight; /** * A pointer to a global dipole splitting reweight */ Ptr<DipoleSplittingReweight>::ptr theSplittingReweight; /** * True if no warnings have been issued yet */ static bool firstWarn; /** * The shower starting scale for the last event encountered */ Energy maxPt; /** * The shower hard scale for the last event encountered */ Energy muPt; /** * The merging helper takes care of merging multiple LO and NLO * cross sections. Here we need to check if an emission would * radiate in the matrix element region of an other multipicity. * If so, the emission is vetoed. */ Ptr<MergerBase>::ptr theMergingHelper; /** * PDG codes of the partons which can have an off-shell mass, * this is fast storage for use during running */ set<long> theColouredOffShellInShower; /** * PDG codes of the partons which can have an off-shell mass, * this is a vector that is interfaced so they can be changed */ vector<long> theInputColouredOffShellInShower; /** - * Allow the dipole chains to be rearranged - */ - bool _rearrange=false; - - /** - * number of maximal ME dipoles in the rearrangement. - */ - unsigned int _dipmax=3; - - /** - * If a chain is considered long (more than dipmax dipoles) - * ME with diplong dipoles are used to test for rearrangement. - */ - unsigned int _diplong=3; - - /** - * Number of emissions to be rearranged. - */ - int _rearrangeNEmissions=-1; - - /** * The choice of z boundaries; 0 = restricted, 1 = open, 2 = mixed/other */ int theZBoundaries; private: /** * The static object used to initialize the description of this class. * Indicates that this is a concrete class with persistent data. */ static ClassDescription<DipoleShowerHandler> initDipoleShowerHandler; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ DipoleShowerHandler & operator=(const DipoleShowerHandler &) = delete; }; } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of DipoleShowerHandler. */ template <> struct BaseClassTrait<Herwig::DipoleShowerHandler,1> { /** Typedef of the first base class of DipoleShowerHandler. */ typedef Herwig::ShowerHandler NthBase; }; /** This template specialization informs ThePEG about the name of * the DipoleShowerHandler class and the shared object where it is defined. */ template <> struct ClassTraits<Herwig::DipoleShowerHandler> : public ClassTraitsBase<Herwig::DipoleShowerHandler> { /** Return a platform-independent class name */ static string className() { return "Herwig::DipoleShowerHandler"; } /** * The name of a file containing the dynamic library where the class * DipoleShowerHandler is implemented. It may also include several, space-separated, * libraries if the class DipoleShowerHandler 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_DipoleShowerHandler_H */ diff --git a/Shower/Dipole/Makefile.am b/Shower/Dipole/Makefile.am --- a/Shower/Dipole/Makefile.am +++ b/Shower/Dipole/Makefile.am @@ -1,24 +1,23 @@ -SUBDIRS = Base Kernels Kinematics Utility AlphaS Merging SpinCorrelations Colorea +SUBDIRS = Base Kernels Kinematics Utility AlphaS Merging SpinCorrelations pkglib_LTLIBRARIES = HwDipoleShower.la HwDipoleShower_la_LDFLAGS = $(AM_LDFLAGS) -module -version-info 10:0:0 HwDipoleShower_la_LIBADD = \ Base/libHwDipoleShowerBase.la \ Kernels/libHwDipoleShowerKernels.la \ Kinematics/libHwDipoleShowerKinematics.la \ Utility/libHwDipoleShowerUtility.la \ Merging/libHwDipoleShowerMerging.la \ - SpinCorrelations/libHwDipoleShowerSpinCorrelations.la \ - Colorea/libHwDipoleShowerColorea.la + SpinCorrelations/libHwDipoleShowerSpinCorrelations.la HwDipoleShower_la_SOURCES = \ DipoleShowerHandler.h DipoleShowerHandler.fh DipoleShowerHandler.cc pkglib_LTLIBRARIES += HwKrknloEventReweight.la HwKrknloEventReweight_la_SOURCES = \ KrkNLO/KrknloEventReweight.h KrkNLO/KrknloEventReweight.cc HwKrknloEventReweight_la_LDFLAGS = $(AM_LDFLAGS) -module -version-info 2:0:0 diff --git a/configure.ac b/configure.ac --- a/configure.ac +++ b/configure.ac @@ -1,246 +1,245 @@ dnl Process this file with autoconf to produce a configure script. AC_PREREQ([2.63]) AC_INIT([Herwig],[7.2.0],[herwig@projects.hepforge.org],[Herwig]) AC_CONFIG_SRCDIR([Utilities/HerwigStrategy.cc]) AC_CONFIG_AUX_DIR([Config]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_HEADERS([Config/config.h]) dnl AC_PRESERVE_HELP_ORDER AC_CANONICAL_HOST dnl === disable debug symbols by default ===== if test "x$CXXFLAGS" = "x"; then CXXFLAGS=-O2 fi if test "x$CFLAGS" = "x"; then CFLAGS=-O2 fi AC_LANG([C++]) AM_INIT_AUTOMAKE([1.11 subdir-objects gnu dist-bzip2 no-dist-gzip -Wall -Wno-portability]) m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) dnl Checks for C++ compiler. Handle C++11 flags. AC_PROG_CXX AX_CXX_COMPILE_STDCXX([11],[noext],[mandatory]) dnl check for POSIX AC_CHECK_HEADER([unistd.h],[], [AC_MSG_ERROR([Herwig needs "unistd.h". Non-POSIX systems are not supported.])]) AC_CHECK_HEADER([sys/stat.h],[], [AC_MSG_ERROR([Herwig needs "sys/stat.h". Non-POSIX systems are not supported.])]) dnl Checks for programs. AC_PROG_INSTALL AC_PROG_MAKE_SET AC_PROG_LN_S dnl modified search order AC_PROG_FC([gfortran g95 g77]) dnl xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 xlf f77 frt pgf77 cf77 fort77 fl32 af77]) AC_LANG_PUSH([Fortran]) AC_MSG_CHECKING([if the Fortran compiler ($FC) works]) AC_COMPILE_IFELSE( AC_LANG_PROGRAM([],[ print *[,]"Hello"]), [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no]) AC_MSG_ERROR([A Fortran compiler is required to build Herwig.]) ] ) AC_LANG_POP([Fortran]) AC_FC_WRAPPERS LT_PREREQ([2.2.6]) LT_INIT([disable-static dlopen pic-only]) dnl #################################### dnl #################################### dnl for Doc/fixinterfaces.pl AC_PATH_PROG(PERL, perl) dnl for Models/Feynrules AM_PATH_PYTHON([2.6],, [:]) AM_CONDITIONAL([HAVE_PYTHON], [test "x$PYTHON" != "x:"]) HERWIG_CHECK_GSL HERWIG_CHECK_THEPEG BOOST_REQUIRE([1.41]) BOOST_FIND_HEADER([boost/numeric/ublas/io.hpp]) dnl Boost 1.64 is missing a required header to make these work dnl we just assume they're there if io.hpp has been found OK above dnl BOOST_FIND_HEADER([boost/numeric/ublas/matrix.hpp]) dnl BOOST_FIND_HEADER([boost/numeric/ublas/matrix_proxy.hpp]) dnl BOOST_FIND_HEADER([boost/numeric/ublas/matrix_sparse.hpp]) dnl BOOST_FIND_HEADER([boost/numeric/ublas/symmetric.hpp]) dnl BOOST_FIND_HEADER([boost/numeric/ublas/vector.hpp]) BOOST_FIND_HEADER([boost/operators.hpp]) BOOST_TEST() HERWIG_CHECK_VBFNLO HERWIG_CHECK_NJET HERWIG_CHECK_GOSAM HERWIG_CHECK_GOSAM_CONTRIB HERWIG_CHECK_OPENLOOPS HERWIG_CHECK_MADGRAPH HERWIG_CHECK_EVTGEN HERWIG_CHECK_PYTHIA HERWIG_COMPILERFLAGS HERWIG_LOOPTOOLS FASTJET_CHECK_FASTJET HERWIG_ENABLE_MODELS SHARED_FLAG=-shared AM_CONDITIONAL(NEED_APPLE_FIXES, [test "xx${host/darwin/foundit}xx" != "xx${host}xx"]) if test "xx${host/darwin/foundit}xx" != "xx${host}xx"; then APPLE_DSO_FLAGS=-Wl,-undefined,dynamic_lookup SHARED_FLAG=-bundle fi AC_SUBST([APPLE_DSO_FLAGS]) AC_SUBST([SHARED_FLAG]) AC_CONFIG_FILES([UnderlyingEvent/Makefile Models/Makefile Models/StandardModel/Makefile Models/RSModel/Makefile Models/General/Makefile Models/Susy/Makefile Models/Susy/NMSSM/Makefile Models/Susy/RPV/Makefile Models/UED/Makefile Models/LH/Makefile Models/LHTP/Makefile Models/Transplanckian/Makefile Models/Leptoquarks/Makefile Models/Zprime/Makefile Models/TTbAsymm/Makefile Models/Feynrules/Makefile Models/Feynrules/python/Makefile-FR Models/ADD/Makefile Models/Sextet/Makefile Decay/Makefile Decay/FormFactors/Makefile Decay/Tau/Makefile Decay/Baryon/Makefile Decay/VectorMeson/Makefile Decay/Perturbative/Makefile Decay/ScalarMeson/Makefile Decay/TensorMeson/Makefile Decay/WeakCurrents/Makefile Decay/Partonic/Makefile Decay/General/Makefile Decay/Radiation/Makefile Decay/EvtGen/Makefile Doc/refman.conf Doc/refman.h PDT/Makefile PDF/Makefile MatrixElement/Makefile MatrixElement/General/Makefile MatrixElement/Lepton/Makefile MatrixElement/Hadron/Makefile MatrixElement/DIS/Makefile MatrixElement/Powheg/Makefile MatrixElement/Gamma/Makefile MatrixElement/Reweighters/Makefile MatrixElement/Matchbox/Makefile MatrixElement/Matchbox/Base/Makefile MatrixElement/Matchbox/Utility/Makefile MatrixElement/Matchbox/Phasespace/Makefile MatrixElement/Matchbox/Dipoles/Makefile MatrixElement/Matchbox/InsertionOperators/Makefile MatrixElement/Matchbox/Matching/Makefile MatrixElement/Matchbox/Cuts/Makefile MatrixElement/Matchbox/Scales/Makefile MatrixElement/Matchbox/ColorFull/Makefile MatrixElement/Matchbox/CVolver/Makefile MatrixElement/Matchbox/Builtin/Makefile MatrixElement/Matchbox/Builtin/Amplitudes/Makefile MatrixElement/Matchbox/Tests/Makefile MatrixElement/Matchbox/External/Makefile MatrixElement/Matchbox/External/BLHAGeneric/Makefile MatrixElement/Matchbox/External/VBFNLO/Makefile MatrixElement/Matchbox/External/NJet/Makefile MatrixElement/Matchbox/External/GoSam/Makefile MatrixElement/Matchbox/External/OpenLoops/Makefile MatrixElement/Matchbox/External/MadGraph/Makefile MatrixElement/Matchbox/External/MadGraph/mg2herwig MatrixElement/FxFx/Makefile Sampling/Makefile Sampling/CellGrids/Makefile Shower/Makefile Shower/QTilde/Makefile Shower/QTilde/Matching/Makefile Shower/Dipole/Makefile Shower/Dipole/Base/Makefile Shower/Dipole/Kernels/Makefile Shower/Dipole/Kinematics/Makefile Shower/Dipole/Utility/Makefile Shower/Dipole/AlphaS/Makefile Shower/Dipole/SpinCorrelations/Makefile Utilities/Makefile Utilities/XML/Makefile Utilities/Statistics/Makefile Hadronization/Makefile lib/Makefile include/Makefile src/Makefile src/defaults/Makefile src/snippets/Makefile src/Matchbox/Makefile src/herwig-config Doc/Makefile Doc/HerwigDefaults.in Looptools/Makefile Analysis/Makefile API/Makefile src/Makefile-UserModules src/defaults/Analysis.in src/defaults/MatchboxDefaults.in src/defaults/Decays.in src/defaults/decayers.in src/defaults/setup.gosam.in src/Matchbox/LO-DefaultShower.in src/Matchbox/LO-DipoleShower.in src/Matchbox/MCatLO-DefaultShower.in src/Matchbox/MCatLO-DipoleShower.in src/Matchbox/LO-NoShower.in src/Matchbox/MCatNLO-DefaultShower.in src/Matchbox/MCatNLO-DipoleShower.in src/Matchbox/NLO-NoShower.in src/Matchbox/Powheg-DefaultShower.in src/Matchbox/Powheg-DipoleShower.in src/Merging/Makefile Shower/Dipole/Merging/Makefile - Shower/Dipole/Colorea/Makefile src/defaults/MatchboxMergingDefaults.in Contrib/Makefile Contrib/make_makefiles.sh Tests/Makefile Makefile]) AC_CONFIG_LINKS([Doc/BSMlibs.in:Doc/BSMlibs.in]) AC_CONFIG_FILES([Doc/fixinterfaces.pl],[chmod +x Doc/fixinterfaces.pl]) AC_CONFIG_HEADERS([PDF/SaSPhotonPDF.cc]) HERWIG_OVERVIEW AC_CONFIG_COMMANDS([summary],[cat config.herwig]) AC_OUTPUT