LCOV - code coverage report
Current view: top level - PYTHIA8/pythia8210dev/src - SusyResonanceWidths.cc (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 995 0.0 %
Date: 2016-06-14 17:26:59 Functions: 0 22 0.0 %

          Line data    Source code
       1             : // SusyResonanceWidths.cc is a part of the PYTHIA event generator.
       2             : // Copyright (C) 2015 Torbjorn Sjostrand
       3             : // Authors: N. Desai, P. Skands
       4             : // PYTHIA is licenced under the GNU GPL version 2, see COPYING for details.
       5             : // Please respect the MCnet Guidelines, see GUIDELINES for details.
       6             : 
       7             : // Function definitions (not found in the header) for the
       8             : // SUSY Resonance widths classes.
       9             : 
      10             : #include "Pythia8/SusyResonanceWidths.h"
      11             : #include "Pythia8/SusyWidthFunctions.h"
      12             : #include "Pythia8/SusyCouplings.h"
      13             : #include "Pythia8/ParticleData.h"
      14             : #include "Pythia8/PythiaComplex.h"
      15             : 
      16             : namespace Pythia8 {
      17             : 
      18             : //==========================================================================
      19             : 
      20             : // The SUSYResonanceWidths Class
      21             : // Derived class for SUSY resonances
      22             : 
      23             : const bool SUSYResonanceWidths::DBSUSY = false;
      24             : 
      25             : //--------------------------------------------------------------------------
      26             : 
      27             : bool SUSYResonanceWidths::initBSM(){
      28             : 
      29           0 :   if (couplingsPtr->isSUSY) {
      30           0 :     coupSUSYPtr     = (CoupSUSY *) couplingsPtr;
      31           0 :     return true;
      32             :   }
      33             : 
      34           0 :   return false;
      35           0 : }
      36             : 
      37             : //--------------------------------------------------------------------------
      38             : 
      39             : bool SUSYResonanceWidths::allowCalc(){
      40             : 
      41             :   // Check if decay calculations at all possible
      42           0 :   if ( !couplingsPtr->isSUSY ) return false;
      43           0 :   if ( (idRes == 45 || idRes == 46 || idRes == 1000045)
      44           0 :        && !coupSUSYPtr->isNMSSM ) return false;
      45             : 
      46           0 :   if (settingsPtr->flag("SLHA:useDecayTable") ) {
      47             : 
      48             :     // Next check if decay table was read in via SLHA and takes precedence
      49           0 :     for ( int iDec = 1; iDec < int((coupSUSYPtr->slhaPtr)->decays.size());
      50           0 :           ++iDec)
      51           0 :       if ( (coupSUSYPtr->slhaPtr)->decays[iDec].getId() == abs(idRes) ) {
      52             :         if (DBSUSY) cout<<"Using external decay table for:"<<idRes<<endl;
      53           0 :         return false;
      54             :       }
      55             : 
      56             :   }
      57             : 
      58             :   // Else we should do the calculation; set available channels
      59           0 :   bool done = getChannels(idRes);
      60           0 :   stringstream idStream;
      61           0 :   idStream << "ID = " << idRes ;
      62           0 :   if (!done)  infoPtr->errorMsg("Error in SusyResonanceWidths::allowcalc: "
      63           0 :     "unable to reset decay table.", idStream.str(), true);
      64             :   return done;
      65           0 : }
      66             : 
      67             : //==========================================================================
      68             : 
      69             : // The ResonanceSquark class
      70             : // Derived class for Squark resonances
      71             : 
      72             : //--------------------------------------------------------------------------
      73             : 
      74             : // Set up channels
      75             : 
      76             : bool ResonanceSquark::getChannels(int idPDG){
      77             : 
      78           0 :   idPDG = abs(idPDG);
      79             : 
      80             :   int ksusy = 1000000;
      81           0 :   if (idPDG < ksusy) return false;
      82           0 :   if(idPDG % ksusy >= 7 || idPDG % ksusy < 1) return false;
      83             : 
      84             :   ParticleDataEntry* squarkEntryPtr
      85           0 :     = particleDataPtr->particleDataEntryPtr(idPDG);
      86             : 
      87             :   // Delete any decay channels read
      88           0 :   squarkEntryPtr->clearChannels();
      89             : 
      90           0 :   if(idPDG % 2 == 0) { // up-type squarks
      91             : 
      92             :     /*
      93             :     // Gravitino
      94             :     squarkEntryPtr->addChannel(1, 0.0, 103, 1000039, 2);
      95             :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000039, 4);
      96             :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000039, 6);
      97             :     */
      98             : 
      99             :     // Gaugino - quark
     100           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000024, 3);
     101           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000024, 5);
     102           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000037, 1);
     103           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000037, 3);
     104           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000037, 5);
     105           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000022, 2);
     106           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000022, 4);
     107           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000022, 6);
     108           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000023, 2);
     109           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000023, 4);
     110           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000023, 6);
     111           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000025, 2);
     112           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000025, 4);
     113           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000025, 6);
     114           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000035, 2);
     115           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000035, 4);
     116           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000035, 6);
     117             : 
     118             :     // Squark - Gauge boson
     119           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000001, -24);
     120           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000003, -24);
     121           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000005, -24);
     122           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 2000001, -24);
     123           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 2000003, -24);
     124           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 2000005, -24);
     125           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000001, -37);
     126           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000003, -37);
     127           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000005, -37);
     128           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 2000001, -37);
     129           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 2000003, -37);
     130           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 2000005, -37);
     131             : 
     132             :     // Gluino - quark
     133           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000021, 2);
     134           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000021, 4);
     135           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000021, 6);
     136             : 
     137             :     // lepton - quark via LQD
     138           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, -11, 1);
     139           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, -11, 3);
     140           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, -11, 5);
     141           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, -13, 1);
     142           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, -13, 3);
     143           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, -13, 5);
     144           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, -15, 1);
     145           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, -15, 3);
     146           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, -15, 5);
     147             : 
     148             :     // quark - quark via UDD
     149           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, -1 ,-3);
     150           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, -1 ,-5);
     151           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, -3 ,-5);
     152             : 
     153             : 
     154           0 :   } else { //down-type squarks
     155             : 
     156             :     // Gaugino - quark
     157           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, -1000024, 2);
     158           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, -1000037, 2);
     159           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, -1000024, 4);
     160           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, -1000037, 4);
     161           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, -1000024, 6);
     162           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, -1000037, 6);
     163           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000022, 1);
     164           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000022, 3);
     165           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000022,  5);
     166           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000023, 1);
     167           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000023, 3);
     168           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000023, 5);
     169           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000025, 1);
     170           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000025, 3);
     171           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000025, 5);
     172           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000035, 1);
     173           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000035, 3);
     174           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000035, 5);
     175             : 
     176             :     // Squark - Gauge boson
     177           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000002, -24);
     178           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000004, -24);
     179           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000006, -24);
     180           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 2000002, -24);
     181           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 2000004, -24);
     182           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 2000006, -24);
     183           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000002, -37);
     184           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000004, -37);
     185           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000006, -37);
     186           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 2000002, -37);
     187           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 2000004, -37);
     188           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 2000006, -37);
     189             : 
     190             :     // Gluino - quark
     191           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000021, 1);
     192           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000021, 2);
     193           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 1000021, 5);
     194             : 
     195             :     // lepton - quark via LQD
     196           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, -12, 1);
     197           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, -12, 3);
     198           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, -12, 5);
     199           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, -14, 1);
     200           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, -14, 3);
     201           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, -14, 5);
     202           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, -16, 1);
     203           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, -16, 3);
     204           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, -16, 5);
     205           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 12 ,1);
     206           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 11 ,2);
     207           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 12, 3);
     208           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 11, 4);
     209           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 12, 5);
     210           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 11, 6);
     211           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 14, 1);
     212           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 13, 2);
     213           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 14, 3);
     214           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 13, 4);
     215           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 14, 5);
     216           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 13, 6);
     217           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 16, 1);
     218           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 15, 2);
     219           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 16, 3);
     220           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 15, 4);
     221           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 16, 5);
     222           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, 15, 6);
     223             : 
     224             : 
     225             :     // quark - quark via UDD
     226           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, -2, -1);
     227           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, -2, -3);
     228           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, -2, -5);
     229           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, -4, -1);
     230           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, -4, -3);
     231           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, -4, -5);
     232           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, -6, -1);
     233           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, -6, -3);
     234           0 :     squarkEntryPtr->addChannel(1, 0.0, 0, -6, -5);
     235             :   }
     236             : 
     237             :   return true;
     238             : 
     239           0 : }
     240             : 
     241             : //--------------------------------------------------------------------------
     242             : 
     243             : // Initialize constants.
     244             : 
     245             : void ResonanceSquark::initConstants() {
     246             : 
     247             :   // Locally stored properties and couplings.
     248           0 :   s2W = coupSUSYPtr->sin2W;
     249             : 
     250           0 : }
     251             : 
     252             : //--------------------------------------------------------------------------
     253             : 
     254             : // Calculate various common prefactors for the current mass.
     255             : 
     256             : void ResonanceSquark::calcPreFac(bool) {
     257             : 
     258             :   // Common coupling factors.
     259           0 :   alpS   = coupSUSYPtr->alphaS(mHat * mHat );
     260           0 :   alpEM  = coupSUSYPtr->alphaEM(mHat * mHat);
     261           0 :   preFac = 1.0 / (s2W * pow(mHat,3));
     262           0 :   ps *= mHat * mHat;
     263             : 
     264           0 : }
     265             : 
     266             : //--------------------------------------------------------------------------
     267             : 
     268             : // Calculate width for currently considered channel.
     269             : 
     270             : void ResonanceSquark::calcWidth(bool) {
     271             : 
     272             :   // Squark type -- in u_i/d_i and generation
     273             :   int ksusy = 1000000;
     274           0 :   bool idown = (abs(idRes)%2 == 0 ? false : true);
     275           0 :   int isq = (abs(idRes)/ksusy == 2) ?
     276           0 :     (abs(idRes)%10+1)/2 + 3: (abs(idRes)%10+1)/2;
     277             :   // int isqgen = (abs(idRes)%10 + 1)/2;
     278             : 
     279             :   // Check that mass is above threshold.
     280           0 :   if (ps == 0.) return;
     281             :   else{
     282             :     // Two-body decays
     283           0 :     kinFac = (mHat * mHat - mf1 * mf1 - mf2 * mf2);
     284             : 
     285             :     double fac = 0.0 , wid = 0.0;
     286             : 
     287             :     //RPV decays
     288             :     //Case 1a:  UDD-type
     289           0 :     if (id1Abs < 7 && id2Abs < 7){
     290             : 
     291             :       // Quark generations
     292           0 :       int iq1 = (id1Abs + 1)/2;
     293           0 :       int iq2 = (id2Abs + 1)/2;
     294             : 
     295             :       // Check for RPV UDD couplings
     296           0 :       if (!coupSUSYPtr->isUDD) {widNow = 0; return;}
     297             : 
     298             :       // ~q -> q_i + q_j
     299             : 
     300           0 :       fac = 2.0 * kinFac / (16.0 * M_PI * pow(mHat,3));
     301             :       wid = 0.0;
     302           0 :       if (idown) {
     303           0 :         if ((id1Abs+id2Abs)%2 == 1){
     304           0 :           if (id1Abs%2==1)
     305           0 :             for (int isq2 = 1; isq2 < 4; isq2++)
     306           0 :               wid += norm(coupSUSYPtr->rvUDD[iq2][iq1][isq2]
     307           0 :                    * coupSUSYPtr->Rdsq[isq][isq2+3]);
     308             :           else
     309           0 :             for (int isq2 = 1; isq2 < 4; isq2++)
     310           0 :               wid += norm(coupSUSYPtr->rvUDD[iq1][iq2][isq2]
     311           0 :                    * coupSUSYPtr->Rdsq[isq][isq2+3]);
     312             :         }
     313             :       }
     314             :       else {
     315           0 :         if ((id1Abs+id2Abs)%2 != 0) widNow = 0.0;
     316             :         else
     317           0 :           for (int isq2 = 1; isq2 < 4; isq2++)
     318           0 :             wid += norm(coupSUSYPtr->rvUDD[isq2][iq1][iq2]
     319           0 :                  * coupSUSYPtr->Rusq[isq][isq2+3]);
     320             :       }
     321           0 :   }
     322             : 
     323             :     //Case 1b:  LQD-type
     324           0 :     else if (id1Abs < 17 && id2Abs < 7){
     325           0 :       if (!coupSUSYPtr->isLQD) {widNow = 0; return;}
     326             : 
     327           0 :       int ilep = (id1Abs - 9)/2;
     328           0 :       int iq = (id2Abs + 1)/2;
     329             : 
     330           0 :       fac = kinFac / (16.0 * M_PI * pow(mHat,3));
     331             :       wid = 0.0;
     332           0 :       if (idown){
     333           0 :         if (iq%2 == 0){
     334             :           // q is up-type; ~q is right-handed down type
     335           0 :           for (int isq2=1; isq2<3; isq2++)
     336           0 :             wid += norm(coupSUSYPtr->Rdsq[isq][isq2+3]
     337           0 :                  * coupSUSYPtr->rvLQD[ilep][iq][isq2]);
     338           0 :         }else{
     339             :           //q is down type; ~q left-handed down-type
     340           0 :           for (int isq2=1; isq2<3; isq2++)
     341           0 :             wid += norm(coupSUSYPtr->Rdsq[isq][isq2]
     342           0 :                  * coupSUSYPtr->rvLQD[ilep][isq2][isq2]);
     343             :         }
     344             :       }
     345             :       else{
     346           0 :         if (iq%2 == 0) {widNow = 0.0; return;}
     347             :         // q is down type; ~q is left-handed up-type
     348           0 :         for (int isq2=1; isq2<3; isq2++)
     349           0 :           wid += norm(coupSUSYPtr->Rusq[isq][isq2]
     350           0 :                * coupSUSYPtr->rvLQD[ilep][isq2][iq]);
     351             :       }
     352           0 :     }
     353             : 
     354             :     //Case 2: quark + gaugino
     355           0 :     else if (id1Abs > ksusy && id2Abs < 7) {
     356             : 
     357           0 :       int iq = (id2Abs + 1)/2;
     358             : 
     359             :       // ~q -> ~g + q
     360           0 :       if (id1Abs == 1000021 && idRes%10 == id2Abs) {
     361             :         // Removed factor of s2W in denominator: strong process -- no EW
     362           0 :         fac = 2.0 * alpS / (3.0 * pow3(mHat));
     363           0 :         if (idown)
     364           0 :           wid = kinFac * (norm(coupSUSYPtr->LsddG[isq][iq])
     365           0 :               + norm(coupSUSYPtr->RsddG[isq][iq]))
     366           0 :               - 4.0 * mHat * mf2 * real(coupSUSYPtr->LsddG[isq][iq]
     367           0 :               * conj(coupSUSYPtr->RsddG[isq][iq]));
     368             :         else
     369           0 :           wid = kinFac * (norm(coupSUSYPtr->LsuuG[isq][iq])
     370           0 :               + norm(coupSUSYPtr->RsuuG[isq][iq]))
     371           0 :               - 4.0 * mHat * mf2 * real(coupSUSYPtr->LsuuG[isq][iq]
     372           0 :               * conj(coupSUSYPtr->RsuuG[isq][iq]));
     373             :       }
     374             :       else
     375           0 :         for (int i=1; i<6 ; i++){
     376             :           // ~q -> ~chi0 + q
     377           0 :           if (coupSUSYPtr->idNeut(i)==id1Abs && idRes%2 == id2Abs%2){
     378           0 :             fac = alpEM *  preFac / (2.0 * (1 - s2W));
     379           0 :             if (idown)
     380           0 :               wid = kinFac * (norm(coupSUSYPtr->LsddX[isq][iq][i])
     381           0 :                   + norm(coupSUSYPtr->RsddX[isq][iq][i]))
     382           0 :                   - 4.0 * mHat * mf2 * real(coupSUSYPtr->LsddX[isq][iq][i]
     383           0 :                   * conj(coupSUSYPtr->RsddX[isq][iq][i]));
     384             :             else
     385           0 :               wid = kinFac * (norm(coupSUSYPtr->LsuuX[isq][iq][i])
     386           0 :                   + norm(coupSUSYPtr->RsuuX[isq][iq][i]))
     387           0 :                   - 4.0 * mHat * mf2 * real(coupSUSYPtr->LsuuX[isq][iq][i]
     388           0 :                   * conj(coupSUSYPtr->RsuuX[isq][iq][i]));
     389             :           }
     390             : 
     391             :           // ~q -> chi- + q
     392           0 :           else if (i < 3 && coupSUSYPtr->idChar(i)==id1Abs
     393           0 :             && idRes%2 != id2Abs%2){
     394             : 
     395           0 :             fac = alpEM *  preFac / (4.0 * (1 - s2W));
     396           0 :             if (idown)
     397           0 :               wid = kinFac * (norm(coupSUSYPtr->LsduX[isq][iq][i])
     398           0 :                   + norm(coupSUSYPtr->RsduX[isq][iq][i]))
     399           0 :                   - 4.0 * mHat * mf2 * real(coupSUSYPtr->LsduX[isq][iq][i]
     400           0 :                   * conj(coupSUSYPtr->RsduX[isq][iq][i]));
     401             :             else
     402           0 :               wid = kinFac * (norm(coupSUSYPtr->LsudX[isq][iq][i])
     403           0 :                   + norm(coupSUSYPtr->RsudX[isq][iq][i]))
     404           0 :                   - 4.0 * mHat * mf2 * real(coupSUSYPtr->LsudX[isq][iq][i]
     405           0 :                   * conj(coupSUSYPtr->RsudX[isq][iq][i]));
     406             :           }
     407             :         }
     408           0 :     }
     409             : 
     410             :     //Case 3: ~q_i -> ~q_j + Z/W
     411           0 :     else if (id1Abs > ksusy && id1Abs%100 < 7
     412           0 :       && (id2Abs == 23 || id2Abs == 24)){
     413             : 
     414             :       // factor of lambda^(3/2) = ps^(3/2) ;
     415           0 :       fac = alpEM * preFac/(16.0 * pow2(particleDataPtr->m0(id2Abs))
     416           0 :           * (1.0 - s2W)) * pow2(ps) ;
     417             : 
     418           0 :       int isq2 = (id1Abs/ksusy == 2) ? (id1Abs%10+1)/2 + 3: (id1Abs%10+1)/2;
     419             : 
     420           0 :       if (id2Abs == 23 && id1Abs%2 == idRes%2){
     421           0 :         if (idown)
     422           0 :           wid = norm(coupSUSYPtr->LsdsdZ[isq][isq2]
     423           0 :                      + coupSUSYPtr->RsdsdZ[isq][isq2]);
     424             :         else
     425           0 :           wid = norm(coupSUSYPtr->LsusuZ[isq][isq2]
     426           0 :                      + coupSUSYPtr->RsusuZ[isq][isq2]);
     427             :       }
     428           0 :       else if (id2Abs == 24 && id1Abs%2 != idRes%2){
     429           0 :         if (idown)
     430           0 :           wid = norm(coupSUSYPtr->LsusdW[isq2][isq]);
     431             :         else
     432           0 :           wid = norm(coupSUSYPtr->LsusdW[isq][isq2]);
     433             :       }
     434           0 :     }
     435             : 
     436             :     // TODO: Case ~q_i -> ~q_j + h/H
     437           0 :     widNow = fac * wid * ps * pow2(mHat);
     438             :     if (DBSUSY) cout<<idRes<<":: id1:"<<id1Abs<<" id2:"<<id2Abs
     439             :                   <<" Width: "<<widNow<<endl;
     440           0 :     return;
     441             :   }
     442             : 
     443           0 : }
     444             : 
     445             : //==========================================================================
     446             : 
     447             : // The ResonanceGluino class
     448             : // Derived class for Gluino resonances
     449             : 
     450             : //--------------------------------------------------------------------------
     451             : 
     452             : // Set up Channels
     453             : 
     454             : bool ResonanceGluino::getChannels(int idPDG){
     455             : 
     456           0 :   idPDG = abs(idPDG);
     457           0 :   if (idPDG != 1000021) return false;
     458             : 
     459             :   ParticleDataEntry* gluinoEntryPtr
     460           0 :     = particleDataPtr->particleDataEntryPtr(idPDG);
     461             : 
     462             :   // Delete any decay channels read
     463           0 :   gluinoEntryPtr->clearChannels();
     464             : 
     465           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, 1000001, -1);
     466           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, -1000001, 1);
     467           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, 1000001 ,-3);
     468           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, -1000001, 3);
     469           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, 1000001 ,-5);
     470           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, -1000001, 5);
     471           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, 2000001 ,-1);
     472           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, -2000001, 1);
     473           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, 2000001 ,-3);
     474           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, -2000001, 3);
     475           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, 2000001 ,-5);
     476           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, -2000001, 5);
     477           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, 1000002 ,-2);
     478           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, -1000002, 2);
     479           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, 1000002 ,-4);
     480           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, -1000002, 4);
     481           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, 1000002 ,-6);
     482           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, -1000002, 6);
     483           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, 2000002 ,-2);
     484           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, -2000002, 2);
     485           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, 2000002 ,-4);
     486           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, -2000002, 4);
     487           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, 2000002 ,-6);
     488           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, -2000002, 6);
     489           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, 1000003 ,-1);
     490           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, -1000003, 1);
     491           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, 1000003 ,-3);
     492           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, -1000003, 3);
     493           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, 1000003 ,-5);
     494           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, -1000003, 5);
     495           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, 2000003 ,-1);
     496           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, -2000003, 1);
     497           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, 2000003 ,-3);
     498           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, -2000003, 3);
     499           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, 2000003 ,-5);
     500           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, -2000003, 5);
     501           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, 1000004 ,-2);
     502           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, -1000004, 2);
     503           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, 1000004 ,-4);
     504           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, -1000004, 4);
     505           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, 1000004 ,-6);
     506           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, -1000004, 6);
     507           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, 2000004 ,-2);
     508           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, -2000004, 2);
     509           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, 2000004 ,-4);
     510           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, -2000004, 4);
     511           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, 2000004 ,-6);
     512           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, -2000004, 6);
     513           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, 1000005 ,-1);
     514           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, -1000005, 1);
     515           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, 1000005 ,-3);
     516           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, -1000005, 3);
     517           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, 1000005 ,-5);
     518           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, -1000005, 5);
     519           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, 2000005 ,-1);
     520           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, -2000005, 1);
     521           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, 2000005 ,-3);
     522           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, -2000005, 3);
     523           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, 2000005 ,-5);
     524           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, -2000005, 5);
     525           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, 1000006 ,-6);
     526           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, -1000006, 6);
     527           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, 1000006 ,-2);
     528           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, -1000006, 2);
     529           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, 1000006 ,-4);
     530           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, -1000006, 4);
     531           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, 2000006 ,-6);
     532           0 :   gluinoEntryPtr->addChannel(1, 0.0, 0, -2000006, 6);
     533             : 
     534             :   return true;
     535           0 : }
     536             : 
     537             : //--------------------------------------------------------------------------
     538             : 
     539             : // Initialize constants.
     540             : 
     541             : void ResonanceGluino::initConstants() {
     542           0 :   return;
     543             : }
     544             : 
     545             : //--------------------------------------------------------------------------
     546             : 
     547             : // Calculate various common prefactors for the current mass.
     548             : 
     549             : void ResonanceGluino::calcPreFac(bool) {
     550             : 
     551             :   // Common coupling factors.
     552           0 :   alpS  = coupSUSYPtr->alphaS(mHat * mHat);
     553           0 :   preFac = alpS /( 8.0 * pow(mHat,3));
     554           0 :   return;
     555             : 
     556             : }
     557             : 
     558             : 
     559             : //--------------------------------------------------------------------------
     560             : 
     561             : // Calculate width for currently considered channel.
     562             : 
     563             : void ResonanceGluino::calcWidth(bool) {
     564             : 
     565           0 :   widNow = 0.0;
     566           0 :   if (ps == 0.) return;
     567           0 :   kinFac = (mHat * mHat - mf1 * mf1 + mf2 * mf2);
     568             : 
     569           0 :   if (id1Abs > 1000000 && (id1Abs % 100) < 7 && id2Abs < 7) {
     570             : 
     571           0 :     int isq = (abs(id1Abs)/1000000 == 2) ? (abs(id1Abs)%10+1)/2 + 3
     572             :                                          : (abs(id1Abs)%10+1)/2;
     573           0 :     bool idown = id2Abs%2;
     574           0 :     int iq = (id2Abs + 1)/2;
     575             : 
     576             :     // ~g -> ~q + q
     577           0 :     if (idown){
     578           0 :       widNow = kinFac * (norm(coupSUSYPtr->LsddG[isq][iq])
     579           0 :              + norm(coupSUSYPtr->RsddG[isq][iq]))
     580           0 :              + 4.0 * mHat * mf2 * real(coupSUSYPtr->LsddG[isq][iq]
     581           0 :              * conj(coupSUSYPtr->RsddG[isq][iq]));
     582           0 :     }
     583             :     else{
     584           0 :       widNow = kinFac * (norm(coupSUSYPtr->LsuuG[isq][iq])
     585           0 :              + norm(coupSUSYPtr->RsuuG[isq][iq]))
     586           0 :              + 4.0 * mHat * mf2 * real(coupSUSYPtr->LsuuG[isq][iq]
     587           0 :              * conj(coupSUSYPtr->RsuuG[isq][iq]));
     588             :     }
     589           0 :     widNow = widNow * preFac * ps * pow2(mHat);
     590             :     if (DBSUSY) {
     591             :       cout<<"Gluino:: id1:"<<id1Abs<<" id2:"<<id2Abs<<" Width: ";
     592             :       cout<<scientific<<widNow<<endl;
     593             :     }
     594             :     return;
     595             :   }
     596           0 : }
     597             : 
     598             : //==========================================================================
     599             : 
     600             : //  Class ResonanceNeut
     601             : //  Derived class for Neutralino Resonances
     602             : //
     603             : //--------------------------------------------------------------------------
     604             : 
     605             : // Set up Channels
     606             : 
     607             : bool ResonanceNeut::getChannels(int idPDG){
     608             : 
     609           0 :   idPDG = abs(idPDG);
     610             : 
     611           0 :   int iNeut = coupSUSYPtr->typeNeut(idPDG);
     612           0 :   if (iNeut < 1) return false;
     613             : 
     614             :   ParticleDataEntry* neutEntryPtr
     615           0 :     = particleDataPtr->particleDataEntryPtr(idPDG);
     616             : 
     617             :   // Delete any decay channels read
     618           0 :   neutEntryPtr->clearChannels();
     619             : 
     620             :   // RPV channels
     621             : 
     622           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -12, -13, 11);
     623           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 12, 13, -11);
     624           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -12, -13, 13);
     625           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 12, 13, -13);
     626           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -12, -13, 15);
     627           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 12, 13, -15);
     628           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -12, -15, 11);
     629           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 12, 15, -11);
     630           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -12, -15, 13);
     631           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 12, 15, -13);
     632           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -12, -15, 15);
     633           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 12, 15, -15);
     634           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -14, -11, 11);
     635           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 14, 11, -11);
     636           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -14, -11, 13);
     637           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 14, 11, -13);
     638           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -14, -11, 15);
     639           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 14, 11, -15);
     640           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -14, -15, 11);
     641           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 14, 15, -11);
     642           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -14, -15, 13);
     643           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 14, 15, -13);
     644           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -14, -15, 15);
     645           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 14, 15, -15);
     646           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -16, -11, 11);
     647           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 16, 11, -11);
     648           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -16, -11, 13);
     649           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 16, 11, -13);
     650           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -16, -11, 15);
     651           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 16, 11, -15);
     652           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -16, -13, 11);
     653           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 16, 13, -11);
     654           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -16, -13, 13);
     655           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 16, 13, -13);
     656           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -16, -13, 15);
     657           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 16, 13, -15);
     658           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -12, -1, 1);
     659           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 12, 1, -1);
     660           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -11, -2, 1);
     661           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 11, 2, -1);
     662           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -12, -1, 3);
     663           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 12, 1, -3);
     664           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -11, -2, 3);
     665           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 11, 2, -3);
     666           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -12, -1, 5);
     667           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 12, 1, -5);
     668           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -11, -2, 5);
     669           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 11, 2, -5);
     670           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -12, -3, 1);
     671           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 12, 3, -1);
     672           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -11, -4, 1);
     673           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 11, 4, -1);
     674           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -12, -3, 3);
     675           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 12, 3, -3);
     676           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -11, -4, 3);
     677           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 11, 4, -3);
     678           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -12, -3, 5);
     679           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 12, 3, -5);
     680           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -11, -4, 5);
     681           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 11, 4, -5);
     682           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -12, -5, 1);
     683           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 12, 5, -1);
     684           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -11, -6, 1);
     685           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 11, 6, -1);
     686           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -12, -5, 3);
     687           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 12, 5, -3);
     688           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -11, -6, 3);
     689           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 11, 6, -3);
     690           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 12 ,-5 ,5);
     691           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 12, 5, -5);
     692           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -11, -6, 5);
     693           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 11, 6, -5);
     694           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -14, -1, 1);
     695           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 14, 1, -1);
     696           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -13, -2, 1);
     697           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 13, 2, -1);
     698           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -14, -1, 3);
     699           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 14, 1, -3);
     700           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -13, -2, 3);
     701           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 13, 2, -3);
     702           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -14, -1, 5);
     703           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 14, 1, -5);
     704           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -13, -2, 5);
     705           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 13, 2, -5);
     706           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -14, -3, 1);
     707           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 14, 3, -1);
     708           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -13, -4, 1);
     709           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 13, 4, -1);
     710           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -14, -3, 3);
     711           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 14, 3, -3);
     712           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -13, -4, 3);
     713           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 13, 4, -3);
     714           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -14, -3, 5);
     715           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 14, 3, -5);
     716           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -13, -4, 5);
     717           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 13, 4, -5);
     718           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -14, -5, 1);
     719           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 14, 5, -1);
     720           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -13, -6, 1);
     721           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 13, 6, -1);
     722           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -14, -5, 3);
     723           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 14, 5, -3);
     724           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -13, -6, 3);
     725           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 13, 6, -3);
     726           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -14, -5, 5);
     727           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 14, 5, -5);
     728           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -13, -6, 5);
     729           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 13, 6, -5);
     730           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -16, -1, 1);
     731           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 16, 1, -1);
     732           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -15, -2, 1);
     733           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 15, 2, -1);
     734           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -16, -1, 3);
     735           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 16, 1, -3);
     736           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -15, -2, 3);
     737           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 15, 2, -3);
     738           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -16, -1, 5);
     739           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 16, 1, -5);
     740           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -15, -2, 5);
     741           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 15, 2, -5);
     742           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -16, -3, 1);
     743           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 16, 3, -1);
     744           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -15, -4, 1);
     745           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 15, 4, -1);
     746           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -16, -3, 3);
     747           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 16, 3, -3);
     748           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -15, -4, 3);
     749           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 15, 4, -3);
     750           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -16, -3, 5);
     751           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 16, 3, -5);
     752           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -15, -4, 5);
     753           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 15, 4, -5);
     754           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -16, -5, 1);
     755           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 16, 5, -1);
     756           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -15, -6, 1);
     757           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 15, 6, -1);
     758           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -16, -5, 3);
     759           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 16, 5, -3);
     760           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -15, -6, 3);
     761           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 15, 6, -3);
     762           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -16, -5, 5);
     763           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 16, 5, -5);
     764           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -15, -6, 5);
     765           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 15, 6, -5);
     766           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -2 ,-1 ,-3);
     767           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 2, 1, 3);
     768           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -2, -1, -5);
     769           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 2, 1, 5);
     770           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -2, -3, -5);
     771           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 2, 3, 5);
     772           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -4, -1, -3);
     773           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 4, 1, 3);
     774           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -4, -1, -5);
     775           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 4, 1, 5);
     776           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -4, -3, -5);
     777           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 4, 3, 5);
     778           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -6, -1, -3);
     779           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 6, 1, 3);
     780           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -6, -1, -5);
     781           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 6, 1, 5);
     782           0 :   neutEntryPtr->addChannel(1, 0.0, 0, -6, -3, -5);
     783           0 :   neutEntryPtr->addChannel(1, 0.0, 0, 6, 3, 5);
     784             : 
     785           0 :   if (iNeut > 1) {
     786             : 
     787           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000022, 22);
     788           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000022, 23);
     789           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000022, 25);
     790           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000022, 35);
     791           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000022, 36);
     792             : 
     793           0 :     if ( iNeut > 2) {
     794           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000023, 22);
     795           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000023, 23);
     796           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000023, 25);
     797           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000023, 35);
     798           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000023, 36);
     799           0 :     }
     800             : 
     801           0 :     if (iNeut > 3) {
     802           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000025, 22);
     803           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000025, 23);
     804           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000025, 25);
     805           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000025, 35);
     806           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000025, 36);
     807           0 :     }
     808             : 
     809           0 :     if (iNeut > 4) {
     810           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000035, 22);
     811           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000035, 23);
     812           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000035, 25);
     813           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000035, 35);
     814           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000035, 36);
     815           0 :     }
     816             : 
     817           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000024, -24);
     818           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -1000024, 24);
     819           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000037, -24);
     820           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -1000037, 24);
     821           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000024, -37);
     822           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -1000024, 37);
     823           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000037, -37);
     824           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -1000037, 37);
     825           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000011, -11);
     826           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -1000011, 11);
     827           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 2000011, -11);
     828           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -2000011, 11);
     829           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000012, -12);
     830           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -1000012, 12);
     831           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000013, -13);
     832           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -1000013, 13);
     833           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 2000013, -13);
     834           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -2000013, 13);
     835           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000014, -14);
     836           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -1000014, 14);
     837           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000015, -15);
     838           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -1000015, 15);
     839           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 2000015, -15);
     840           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -2000015, 15);
     841           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000016, -16);
     842           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -1000016, 16);
     843           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000001, -1);
     844           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -1000001, 1);
     845           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000001, -3);
     846           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -1000001, 3);
     847           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000001, -5);
     848           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -1000001, 5);
     849           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 2000001, -1);
     850           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -2000001, 1);
     851           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 2000001, -3);
     852           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -2000001, 3);
     853           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 2000001, -5);
     854           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -2000001, 5);
     855           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000002, -2);
     856           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -1000002, 2);
     857           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000002, -4);
     858           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -1000002, 4);
     859           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000002, -6);
     860           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -1000002, 6);
     861           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 2000002, -2);
     862           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -2000002, 2);
     863           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 2000002, -4);
     864           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -2000002, 4);
     865           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 2000002, -6);
     866           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -2000002, 6);
     867           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000003, -1);
     868           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -1000003, 1);
     869           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000003, -3);
     870           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -1000003, 3);
     871           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000003, -5);
     872           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -1000003, 5);
     873           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 2000003, -1);
     874           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -2000003, 1);
     875           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 2000003, -3);
     876           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -2000003, 3);
     877           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 2000003, -5);
     878           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -2000003, 5);
     879           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000004, -2);
     880           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -1000004, 2);
     881           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000004, -4);
     882           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -1000004, 4);
     883           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000004, -6);
     884           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -1000004, 6);
     885           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 2000004, -2);
     886           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -2000004, 2);
     887           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 2000004, -4);
     888           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -2000004, 4);
     889           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 2000004, -6);
     890           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -2000004, 6);
     891           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000005, -1);
     892           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -1000005, 1);
     893           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000005, -3);
     894           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -1000005, 3);
     895           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000005, -5);
     896           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -1000005, 5);
     897           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 2000005, -1);
     898           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -2000005, 1);
     899           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 2000005, -3);
     900           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -2000005, 3);
     901           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 2000005, -5);
     902           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -2000005, 5);
     903           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000006, -6);
     904           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -1000006, 6);
     905           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000006, -2);
     906           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -1000006, 2);
     907           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 1000006, -4);
     908           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -1000006, 4);
     909           0 :     neutEntryPtr->addChannel(1, 0.0, 0, 2000006, -6);
     910           0 :     neutEntryPtr->addChannel(1, 0.0, 0, -2000006, 6);
     911             : 
     912             :     // Modes involving right-handed sneutrinos are not included by default,
     913             :     // but can be added by hand, by uncommenting the following lines.
     914             :     // neutEntryPtr->addChannel(1, 0.0, 0, 2000012, -12);
     915             :     // neutEntryPtr->addChannel(1, 0.0, 0, -2000012, 12);
     916             :     // neutEntryPtr->addChannel(1, 0.0, 0, 2000014, -14);
     917             :     // neutEntryPtr->addChannel(1, 0.0, 0, -2000014, 14);
     918             :     // neutEntryPtr->addChannel(1, 0.0, 0, 2000016, -16);
     919             :     // neutEntryPtr->addChannel(1, 0.0, 0, -2000016, 16);
     920             : 
     921             : 
     922             : 
     923           0 :   }
     924             :   return true;
     925           0 : }
     926             : 
     927             : //--------------------------------------------------------------------------
     928             : 
     929             : void ResonanceNeut::initConstants() {
     930             : 
     931           0 :   s2W = coupSUSYPtr->sin2W;
     932             : 
     933             :   // Initialize functions for calculating 3-body widths
     934             :   // psi.setPointers(particleDataPtr,coupSUSYPtr,infoPtr);
     935             :   // phi.setPointers(particleDataPtr,coupSUSYPtr,infoPtr);
     936             :   // upsil.setPointers(particleDataPtr,coupSUSYPtr,infoPtr);
     937             : 
     938           0 : }
     939             : 
     940             : //--------------------------------------------------------------------------
     941             : 
     942             : // Calculate various common prefactors for the current mass.
     943             : 
     944             : void  ResonanceNeut::calcPreFac(bool) {
     945             : 
     946             :   // Common coupling factors.
     947           0 :   alpEM  = coupSUSYPtr->alphaEM(mHat * mHat);
     948           0 :   preFac = alpEM / (8.0 * s2W * pow(mHat,3));
     949           0 :   return;
     950             : 
     951             : }
     952             : 
     953             : //--------------------------------------------------------------------------
     954             : 
     955             : // Calculate width for currently considered channel.
     956             : void  ResonanceNeut::calcWidth(bool){
     957             : 
     958           0 :   widNow = 0.0;
     959             : 
     960           0 :   if (ps == 0.) return;
     961           0 :   else if (mult ==2){
     962             :     // Two-body decays
     963             : 
     964           0 :     kinFac = mHat * mHat - mf1 * mf1 + mf2 * mf2;
     965           0 :     kinFac2 = pow(mHat,4) + pow(mf1,4) - 2.0 * pow(mf2,4)
     966           0 :             + pow2(mHat) * pow2(mf2) + pow2(mf1) * pow2(mf2)
     967           0 :             - 2.0 * pow2(mHat) * pow2(mf1);
     968             : 
     969             :     // Stable lightest neutralino
     970           0 :     if (idRes == 1000022) return;
     971             : 
     972             :     double fac = 0.0;
     973           0 :     int iNeut1 = coupSUSYPtr->typeNeut(idRes);
     974           0 :     int iNeut2 = coupSUSYPtr->typeNeut(id1Abs);
     975           0 :     int iChar1 = coupSUSYPtr->typeChar(id1Abs);
     976             : 
     977           0 :     if (iNeut2>0 && id2Abs == 23){
     978             :       // ~chi0_i -> chi0_j + Z
     979           0 :       fac = kinFac2 * (norm(coupSUSYPtr->OLpp[iNeut1][iNeut2])
     980           0 :           + norm(coupSUSYPtr->ORpp[iNeut1][iNeut2]));
     981           0 :       fac -= 12.0 * mHat * mf1 * pow2(mf2)
     982           0 :            * real(coupSUSYPtr->OLpp[iNeut1][iNeut2]
     983           0 :            * conj(coupSUSYPtr->ORpp[iNeut1][iNeut2]));
     984           0 :       fac /= pow2(mf2) * (1.0 - s2W);
     985           0 :     }
     986           0 :     else if (iChar1>0 && id2Abs==24){
     987             :       // ~chi0_i -> chi+_j + W- (or c.c.)
     988             : 
     989           0 :       fac = kinFac2 * (norm(coupSUSYPtr->OL[iNeut1][iChar1])
     990           0 :           + norm(coupSUSYPtr->OR[iNeut1][iChar1]));
     991           0 :       fac -= 12.0 * mHat * mf1 * pow2(mf2)
     992           0 :            * real(coupSUSYPtr->OL[iNeut1][iChar1]
     993           0 :            * conj(coupSUSYPtr->OR[iNeut1][iChar1]));
     994           0 :       fac /= pow2(mf2);
     995           0 :     }
     996           0 :     else if (id1Abs > 1000000 && id1Abs%100 < 7 && id2Abs < 7){
     997             :       // ~chi0_k -> ~q + q
     998           0 :       bool idown = (id1Abs%2 == 1);
     999           0 :       int iq = (id2Abs + 1 )/ 2;
    1000           0 :       int isq = (abs(id1Abs)/1000000 == 2) ? (abs(id1Abs)%10+1)/2 + 3
    1001             :                                            : (abs(id1Abs)%10+1)/2;
    1002             : 
    1003           0 :       if (idown){
    1004           0 :         fac  = kinFac * (norm(coupSUSYPtr->LsddX[isq][iq][iNeut1])
    1005           0 :              + norm(coupSUSYPtr->RsddX[isq][iq][iNeut1]));
    1006           0 :         fac += 4.0 * mHat * mf2 * real(coupSUSYPtr->LsddX[isq][iq][iNeut1]
    1007           0 :              * conj(coupSUSYPtr->RsddX[isq][iq][iNeut1]));
    1008           0 :       }
    1009             :       else{
    1010           0 :         fac = kinFac * (norm(coupSUSYPtr->LsuuX[isq][iq][iNeut1])
    1011           0 :             + norm(coupSUSYPtr->RsuuX[isq][iq][iNeut1]));
    1012           0 :         fac += 4.0 * mHat * mf2 * real(coupSUSYPtr->LsuuX[isq][iq][iNeut1]
    1013           0 :              * conj(coupSUSYPtr->RsuuX[isq][iq][iNeut1]));
    1014             :       }
    1015             :       // Extra multiplicative factor of 3 over sleptons
    1016           0 :       fac *= 6.0/(1 - s2W);
    1017           0 :     }
    1018           0 :     else if (id1Abs > 2000010 && id1Abs%2 == 0 ) {
    1019             :       // Check for right-handed neutralinos.
    1020           0 :       widNow = 0;
    1021           0 :     }
    1022           0 :     else if (id1Abs > 1000000 && id1Abs%100 > 10 && id1Abs%100 < 17
    1023           0 :       && id2Abs < 17){
    1024             : 
    1025             :       // ~chi0_k -> ~l + l
    1026           0 :       bool idown = id2Abs%2;
    1027           0 :       int il = (id2Abs - 9)/ 2;
    1028           0 :       int isl = (abs(id1Abs)/1000000 == 2) ? (abs(id1Abs)%10+1)/2 + 3
    1029             :                                            : (abs(id1Abs)%10+1)/2;
    1030             : 
    1031           0 :       if (idown){
    1032           0 :         fac  = kinFac * (norm(coupSUSYPtr->LsllX[isl][il][iNeut1])
    1033           0 :              + norm(coupSUSYPtr->RsllX[isl][il][iNeut1]));
    1034           0 :         fac += 4.0 * mHat * mf2 * real(coupSUSYPtr->LsllX[isl][il][iNeut1]
    1035           0 :              * conj(coupSUSYPtr->RsllX[isl][il][iNeut1]));
    1036           0 :       }
    1037             :       else{
    1038           0 :         fac = kinFac * (norm(coupSUSYPtr->LsvvX[isl][il][iNeut1]));
    1039             :       }
    1040           0 :       fac *= 2.0/(1 - s2W);
    1041           0 :     }
    1042             :     // TODO: Decays in higgs
    1043             :     // Final width for 2-body decays
    1044           0 :     widNow = fac * preFac * ps * pow2(mHat);
    1045             :     if (DBSUSY) {
    1046             :       cout<<idRes<<":: id1:"<<id1Abs<<" id2:"<<id2Abs<<" Width: ";
    1047             :       cout<<scientific<<widNow<<endl;
    1048             :     }
    1049             :   }
    1050             :   else {
    1051             :     //RPV 3-body decays
    1052             : 
    1053             :     //Case: UDD-type (TO BE RE-DONE to fix bug)
    1054             :     return;
    1055             : 
    1056             :     }
    1057             : 
    1058             :   // Normalisation.  Extra factor of 2 to account for the fact that
    1059             :   // d_i, d_j will always be ordered in ascending order. N_c! = 6
    1060           0 :   widNow *= 12.0 /(pow3(2.0 * M_PI * mHat) * 32.0);
    1061             : 
    1062           0 :   return;
    1063           0 : }
    1064             : 
    1065             : //==========================================================================
    1066             : 
    1067             : //  Class ResonanceChar
    1068             : //  Derived class for Neutralino Resonances
    1069             : //  Decays into higgses/sleptons not yet implemented
    1070             : 
    1071             : //--------------------------------------------------------------------------
    1072             : 
    1073             : // Set up Channels
    1074             : 
    1075             : bool ResonanceChar::getChannels(int idPDG){
    1076             : 
    1077           0 :   idPDG = abs(idPDG);
    1078           0 :   int iChar = coupSUSYPtr->typeChar(idPDG);
    1079           0 :   if (iChar < 1) return false;
    1080             : 
    1081             :   ParticleDataEntry* charEntryPtr
    1082           0 :     = particleDataPtr->particleDataEntryPtr(idPDG);
    1083             : 
    1084             :   // Delete any decay channels read
    1085           0 :   charEntryPtr->clearChannels();
    1086             : 
    1087           0 :   charEntryPtr->addChannel(1, 0.0, 0, 1000022, 24);
    1088           0 :   charEntryPtr->addChannel(1, 0.0, 0, 1000023, 24);
    1089           0 :   charEntryPtr->addChannel(1, 0.0, 0, 1000025, 24);
    1090           0 :   charEntryPtr->addChannel(1, 0.0, 0, 1000035, 24);
    1091           0 :   charEntryPtr->addChannel(1, 0.0, 0, 1000022, 37);
    1092           0 :   charEntryPtr->addChannel(1, 0.0, 0, 1000023, 37);
    1093           0 :   charEntryPtr->addChannel(1, 0.0, 0, 1000025, 37);
    1094           0 :   charEntryPtr->addChannel(1, 0.0, 0, 1000035, 37);
    1095           0 :   charEntryPtr->addChannel(1, 0.0, 0, 1000012, -11);
    1096           0 :   charEntryPtr->addChannel(1, 0.0, 0, -1000011, 12);
    1097           0 :   charEntryPtr->addChannel(1, 0.0, 0, -2000011, 12);
    1098           0 :   charEntryPtr->addChannel(1, 0.0, 0, 1000014, -13);
    1099           0 :   charEntryPtr->addChannel(1, 0.0, 0, -1000013, 14);
    1100           0 :   charEntryPtr->addChannel(1, 0.0, 0, -2000013, 14);
    1101           0 :   charEntryPtr->addChannel(1, 0.0, 0, 1000016, -15);
    1102           0 :   charEntryPtr->addChannel(1, 0.0, 0, -1000015, 16);
    1103           0 :   charEntryPtr->addChannel(1, 0.0, 0, -2000015, 16);
    1104           0 :   charEntryPtr->addChannel(1, 0.0, 0, 1000002, -1);
    1105           0 :   charEntryPtr->addChannel(1, 0.0, 0, 1000002, -3);
    1106           0 :   charEntryPtr->addChannel(1, 0.0, 0, 1000002, -5);
    1107           0 :   charEntryPtr->addChannel(1, 0.0, 0, 2000002, -1);
    1108           0 :   charEntryPtr->addChannel(1, 0.0, 0, 2000002, -3);
    1109           0 :   charEntryPtr->addChannel(1, 0.0, 0, 2000002, -5);
    1110           0 :   charEntryPtr->addChannel(1, 0.0, 0, -1000001, 2);
    1111           0 :   charEntryPtr->addChannel(1, 0.0, 0, -1000001, 4);
    1112           0 :   charEntryPtr->addChannel(1, 0.0, 0, -1000001, 6);
    1113           0 :   charEntryPtr->addChannel(1, 0.0, 0, -2000001, 2);
    1114           0 :   charEntryPtr->addChannel(1, 0.0, 0, -2000001, 4);
    1115           0 :   charEntryPtr->addChannel(1, 0.0, 0, -2000001, 6);
    1116           0 :   charEntryPtr->addChannel(1, 0.0, 0, 1000004, -1);
    1117           0 :   charEntryPtr->addChannel(1, 0.0, 0, 1000004, -3);
    1118           0 :   charEntryPtr->addChannel(1, 0.0, 0, 1000004, -5);
    1119           0 :   charEntryPtr->addChannel(1, 0.0, 0, 2000004, -1);
    1120           0 :   charEntryPtr->addChannel(1, 0.0, 0, 2000004, -3);
    1121           0 :   charEntryPtr->addChannel(1, 0.0, 0, 2000004, -5);
    1122           0 :   charEntryPtr->addChannel(1, 0.0, 0, -1000003, 2);
    1123           0 :   charEntryPtr->addChannel(1, 0.0, 0, -1000003, 4);
    1124           0 :   charEntryPtr->addChannel(1, 0.0, 0, -1000003, 6);
    1125           0 :   charEntryPtr->addChannel(1, 0.0, 0, -2000003, 2);
    1126           0 :   charEntryPtr->addChannel(1, 0.0, 0, -2000003, 4);
    1127           0 :   charEntryPtr->addChannel(1, 0.0, 0, -2000003, 6);
    1128           0 :   charEntryPtr->addChannel(1, 0.0, 0, 1000006, -1);
    1129           0 :   charEntryPtr->addChannel(1, 0.0, 0, 1000006, -3);
    1130           0 :   charEntryPtr->addChannel(1, 0.0, 0, 1000006, -5);
    1131           0 :   charEntryPtr->addChannel(1, 0.0, 0, 2000006, -1);
    1132           0 :   charEntryPtr->addChannel(1, 0.0, 0, 2000006, -3);
    1133           0 :   charEntryPtr->addChannel(1, 0.0, 0, 2000006, -5);
    1134           0 :   charEntryPtr->addChannel(1, 0.0, 0, -1000005, 2);
    1135           0 :   charEntryPtr->addChannel(1, 0.0, 0, -1000005, 4);
    1136           0 :   charEntryPtr->addChannel(1, 0.0, 0, -1000005, 6);
    1137           0 :   charEntryPtr->addChannel(1, 0.0, 0, -2000005, 2);
    1138           0 :   charEntryPtr->addChannel(1, 0.0, 0, -2000005, 4);
    1139           0 :   charEntryPtr->addChannel(1, 0.0, 0, -2000005, 6);
    1140             : 
    1141           0 :   if (iChar > 1) {
    1142           0 :     charEntryPtr->addChannel(1, 0.0, 0, 1000024, 23);
    1143           0 :     charEntryPtr->addChannel(1, 0.0, 0, 1000024, 25);
    1144           0 :     charEntryPtr->addChannel(1, 0.0, 0, 1000024, 35);
    1145           0 :     charEntryPtr->addChannel(1, 0.0, 0, 1000024, 36);
    1146           0 :   }
    1147             : 
    1148             :   // Modes involving right-handed sneutrinos are not included by default,
    1149             :   // but can be added by hand, by uncommenting the following lines.
    1150             :   // charEntryPtr->addChannel(1, 0.0, 0, 2000012, -11);
    1151             :   // charEntryPtr->addChannel(1, 0.0, 0, 2000014, -13);
    1152             :   // charEntryPtr->addChannel(1, 0.0, 0, 2000016, -15);
    1153             : 
    1154             :   return true;
    1155             : 
    1156           0 : }
    1157             : 
    1158             : //--------------------------------------------------------------------------
    1159             : 
    1160             : void ResonanceChar::initConstants() {
    1161             : 
    1162           0 :   s2W = coupSUSYPtr->sin2W;
    1163           0 :   return;
    1164             : 
    1165             : }
    1166             : 
    1167             : //--------------------------------------------------------------------------
    1168             : 
    1169             : // Calculate various common prefactors for the current mass.
    1170             : 
    1171             : void  ResonanceChar::calcPreFac(bool) {
    1172             : 
    1173           0 :   alpEM  = coupSUSYPtr->alphaEM(mHat * mHat);
    1174           0 :   preFac = alpEM / (8.0 * s2W * pow(mHat,3));
    1175           0 :   return;
    1176             : 
    1177             : }
    1178             : 
    1179             : //--------------------------------------------------------------------------
    1180             : 
    1181             : // Calculate width for currently considered channel.
    1182             : 
    1183             : void  ResonanceChar::calcWidth(bool) {
    1184             : 
    1185           0 :   widNow = 0.0;
    1186           0 :   if (ps == 0.) return;
    1187             : 
    1188           0 :   if (mult ==2){
    1189             :     double fac = 0.0;
    1190           0 :     kinFac = mHat * mHat - mf1 * mf1 + mf2 * mf2;
    1191           0 :     kinFac2 = pow(mHat,4) + pow(mf1,4) - 2.0 * pow(mf2,4)
    1192           0 :       + pow2(mHat) * pow2(mf2) + pow2(mf1)
    1193           0 :       * pow2(mf2) - 2.0 * pow2(mHat) * pow2(mf1);
    1194             : 
    1195           0 :     int idChar1 = coupSUSYPtr->typeChar(idRes);
    1196           0 :     int idChar2 = coupSUSYPtr->typeChar(id1Abs);
    1197           0 :     int idNeut1 = coupSUSYPtr->typeNeut(id1Abs);
    1198             : 
    1199           0 :     if (idChar2>0 && id2Abs == 23){
    1200             :       // ~chi_i -> chi_j + Z
    1201           0 :       fac = kinFac2 * (norm(coupSUSYPtr->OLp[idChar1][idChar2])
    1202           0 :           + norm(coupSUSYPtr->ORp[idChar1][idChar2]));
    1203           0 :       fac -= 12.0 * mHat * mf1 * pow2(mf2)
    1204           0 :            * real(coupSUSYPtr->OLp[idChar1][idChar2]
    1205           0 :            * conj(coupSUSYPtr->ORp[idChar1][idChar2]));
    1206           0 :       fac /= pow2(mf2) * (1.0 - s2W);
    1207           0 :     }
    1208           0 :     else if (idNeut1>0 && id2Abs==24){
    1209             :       // ~chi_i -> chi0_j + W- (or c.c.)
    1210             : 
    1211           0 :       fac  = kinFac2 * (norm(coupSUSYPtr->OL[idNeut1][idChar1])
    1212           0 :            + norm(coupSUSYPtr->OR[idNeut1][idChar1]));
    1213           0 :       fac -= 12.0 * mHat * mf1 * pow2(mf2)
    1214           0 :            * real(coupSUSYPtr->OL[idNeut1][idChar1]
    1215           0 :            * conj(coupSUSYPtr->OR[idNeut1][idChar1]));
    1216           0 :       fac /= pow2(mf2);
    1217           0 :     }
    1218           0 :     else if (id1Abs > 1000000 && id1Abs%100 < 7 && id2Abs < 7){
    1219             :       // ~chi0_k -> ~q + q
    1220           0 :       bool idown = (id1Abs%2 == 1);
    1221           0 :       int iq = (id2Abs + 1 )/ 2;
    1222           0 :       int isq = (abs(id1Abs)/1000000 == 2) ? (abs(id1Abs)%10+1)/2 + 3
    1223             :                                            : (abs(id1Abs)%10+1)/2;
    1224             : 
    1225           0 :       if (idown){
    1226           0 :         fac  = kinFac * (norm(coupSUSYPtr->LsduX[isq][iq][idChar1])
    1227           0 :              + norm(coupSUSYPtr->RsduX[isq][iq][idChar1]));
    1228           0 :         fac += 4.0 * mHat * mf2
    1229           0 :              * real(coupSUSYPtr->LsduX[isq][iq][idChar1]
    1230           0 :              * conj(coupSUSYPtr->RsduX[isq][iq][idChar1]));
    1231           0 :       }
    1232             :       else{
    1233           0 :         fac  = kinFac * (norm(coupSUSYPtr->LsudX[isq][iq][idChar1])
    1234           0 :              + norm(coupSUSYPtr->RsudX[isq][iq][idChar1]));
    1235           0 :         fac += 4.0 * mHat * mf2
    1236           0 :              * real(coupSUSYPtr->LsudX[isq][iq][idChar1]
    1237           0 :              * conj(coupSUSYPtr->RsudX[isq][iq][idChar1]));
    1238             :       }
    1239           0 :       fac *= 6.0/(1 - s2W);
    1240           0 :     }
    1241           0 :     else if (id1Abs > 2000010 && id1Abs%2 == 0 ) {
    1242             :       // Check for right-handed neutralinos.
    1243           0 :       widNow = 0;
    1244           0 :     }
    1245           0 :     else if (id1Abs > 1000000 && id1Abs%100 > 10 && id1Abs%100 < 17
    1246           0 :       && id2Abs < 17){
    1247             :       // ~chi+_k -> ~l + l
    1248           0 :       bool idown = id2Abs%2;
    1249           0 :       int il = (id2Abs - 9)/ 2;
    1250           0 :       int isl = (abs(id1Abs)/1000000 == 2) ? (abs(id1Abs)%10+1)/2 + 3
    1251             :                                            : (abs(id1Abs)%10+1)/2;
    1252             : 
    1253           0 :       if (idown){
    1254           0 :         fac  = kinFac * (norm(coupSUSYPtr->LslvX[isl][il][idChar1])
    1255           0 :              + norm(coupSUSYPtr->RslvX[isl][il][idChar1]));
    1256           0 :         fac += 4.0 * mHat * mf2 * real(coupSUSYPtr->LslvX[isl][il][idChar1]
    1257           0 :              * conj(coupSUSYPtr->RslvX[isl][il][idChar1]));
    1258           0 :       }
    1259             :       else{
    1260           0 :         fac = kinFac * (norm(coupSUSYPtr->LsvlX[isl][il][idChar1]));
    1261             :       }
    1262           0 :       fac *= 2.0/(1 - s2W);
    1263           0 :     }
    1264             : 
    1265             :     // TODO: Decays in higgs
    1266           0 :     widNow = fac * preFac * ps * pow2(mHat);
    1267             :     if (DBSUSY) {
    1268             :       cout<<idRes<<":: id1:"<<id1Abs<<" id2:"<<id2Abs<<" Width: ";
    1269             :       cout<<scientific<<widNow<<endl;
    1270             :     }
    1271           0 :   }else{
    1272             :     //TODO: Implement Chargino 3-body decays
    1273             :   }
    1274             :   return;
    1275           0 : }
    1276             : 
    1277             : //==========================================================================
    1278             : // The ResonanceSlepton class
    1279             : // Derived class for Slepton (and sneutrino) resonances
    1280             : 
    1281             : //--------------------------------------------------------------------------
    1282             : 
    1283             : // Set up Channels
    1284             : 
    1285             : bool ResonanceSlepton::getChannels(int idPDG){
    1286             : 
    1287           0 :   idPDG = abs(idPDG);
    1288             : 
    1289             :   int ksusy = 1000000;
    1290           0 :   if (idPDG < ksusy) return false;
    1291           0 :   if(idPDG % ksusy < 7 || idPDG % ksusy > 17) return false;
    1292             : 
    1293             :   ParticleDataEntry* slepEntryPtr
    1294           0 :     = particleDataPtr->particleDataEntryPtr(idPDG);
    1295             : 
    1296             :   // Delete any decay channels read
    1297           0 :   slepEntryPtr->clearChannels();
    1298             : 
    1299           0 :   if(idPDG % 2 == 1) {
    1300             : 
    1301           0 :     slepEntryPtr->addChannel(1, 0.0, 0, -1000024, 16);
    1302           0 :     slepEntryPtr->addChannel(1, 0.0, 0, -1000037, 16);
    1303           0 :     slepEntryPtr->addChannel(1, 0.0, 0, 1000022, 15);
    1304           0 :     slepEntryPtr->addChannel(1, 0.0, 0, 1000023, 15);
    1305           0 :     slepEntryPtr->addChannel(1, 0.0, 0, 1000025, 15);
    1306           0 :     slepEntryPtr->addChannel(1, 0.0, 0, 1000035, 15);
    1307           0 :     slepEntryPtr->addChannel(1, 0.0, 0, 1000016, -24);
    1308           0 :     slepEntryPtr->addChannel(1, 0.0, 0, 2000016, -24);
    1309           0 :     slepEntryPtr->addChannel(1, 0.0, 0, 1000016, -37);
    1310           0 :     slepEntryPtr->addChannel(1, 0.0, 0, 2000016, -37);
    1311           0 :     slepEntryPtr->addChannel(1, 0.0, 0, 12, 13);
    1312           0 :     slepEntryPtr->addChannel(1, 0.0, 0, 12, 15);
    1313           0 :     slepEntryPtr->addChannel(1, 0.0, 0, 14, 11);
    1314           0 :     slepEntryPtr->addChannel(1, 0.0, 0, 14, 15);
    1315           0 :     slepEntryPtr->addChannel(1, 0.0, 0, 16, 11);
    1316           0 :     slepEntryPtr->addChannel(1, 0.0, 0, 16, 13);
    1317           0 :     slepEntryPtr->addChannel(1, 0.0, 0, -12, 11);
    1318           0 :     slepEntryPtr->addChannel(1, 0.0, 0, -12, 13);
    1319           0 :     slepEntryPtr->addChannel(1, 0.0, 0, -12, 15);
    1320           0 :     slepEntryPtr->addChannel(1, 0.0, 0, -14, 11);
    1321           0 :     slepEntryPtr->addChannel(1, 0.0, 0, -14, 13);
    1322           0 :     slepEntryPtr->addChannel(1, 0.0, 0, -14, 15);
    1323           0 :     slepEntryPtr->addChannel(1, 0.0, 0, -2, 1);
    1324           0 :     slepEntryPtr->addChannel(1, 0.0, 0, -2, 3);
    1325           0 :     slepEntryPtr->addChannel(1, 0.0, 0, -2, 5);
    1326           0 :     slepEntryPtr->addChannel(1, 0.0, 0, -4, 1);
    1327           0 :     slepEntryPtr->addChannel(1, 0.0, 0, -4, 3);
    1328           0 :     slepEntryPtr->addChannel(1, 0.0, 0, -4, 5);
    1329           0 :     slepEntryPtr->addChannel(1, 0.0, 0, -6, 1);
    1330           0 :     slepEntryPtr->addChannel(1, 0.0, 0, -6, 3);
    1331           0 :     slepEntryPtr->addChannel(1, 0.0, 0, -6, 5);
    1332           0 :     slepEntryPtr->addChannel(1, 0.0, 0, 1000022, 111, 16);
    1333           0 :     slepEntryPtr->addChannel(1, 0.0, 0, 1000022, 113, 16);
    1334           0 :     slepEntryPtr->addChannel(1, 0.0, 0, 1000022, 900111, 16);
    1335           0 :     slepEntryPtr->addChannel(1, 0.0, 0, 1000022, 16, 12, 11);
    1336           0 :     slepEntryPtr->addChannel(1, 0.0, 0, 1000022, 16, 14, 13);
    1337             : 
    1338           0 :    } else {
    1339           0 :     slepEntryPtr->addChannel(1, 0.0, 0, 1000024, 15);
    1340           0 :     slepEntryPtr->addChannel(1, 0.0, 0, 1000037, 15);
    1341           0 :     slepEntryPtr->addChannel(1, 0.0, 0, 1000022, 16);
    1342           0 :     slepEntryPtr->addChannel(1, 0.0, 0, 1000023, 16);
    1343           0 :     slepEntryPtr->addChannel(1, 0.0, 0, 1000025, 16);
    1344           0 :     slepEntryPtr->addChannel(1, 0.0, 0, 1000035, 16);
    1345           0 :     slepEntryPtr->addChannel(1, 0.0, 0, 1000015, 24);
    1346           0 :     slepEntryPtr->addChannel(1, 0.0, 0, 2000015, 24);
    1347           0 :     slepEntryPtr->addChannel(1, 0.0, 0, 1000015, 37);
    1348           0 :     slepEntryPtr->addChannel(1, 0.0, 0, 2000015, 37);
    1349           0 :     slepEntryPtr->addChannel(1, 0.0, 0, -11, 11);
    1350           0 :     slepEntryPtr->addChannel(1, 0.0, 0, -11, 13);
    1351           0 :     slepEntryPtr->addChannel(1, 0.0, 0, -11, 15);
    1352           0 :     slepEntryPtr->addChannel(1, 0.0, 0, -13, 11);
    1353           0 :     slepEntryPtr->addChannel(1, 0.0, 0, -13, 13);
    1354           0 :     slepEntryPtr->addChannel(1, 0.0, 0, -13, 15);
    1355           0 :     slepEntryPtr->addChannel(1, 0.0, 0, -1, 1);
    1356           0 :     slepEntryPtr->addChannel(1, 0.0, 0, -1, 3);
    1357           0 :     slepEntryPtr->addChannel(1, 0.0, 0, -1, 5);
    1358           0 :     slepEntryPtr->addChannel(1, 0.0, 0, -3, 1);
    1359           0 :     slepEntryPtr->addChannel(1, 0.0, 0, -3, 3);
    1360           0 :     slepEntryPtr->addChannel(1, 0.0, 0, -3, 5);
    1361           0 :     slepEntryPtr->addChannel(1, 0.0, 0, -5, 1);
    1362           0 :     slepEntryPtr->addChannel(1, 0.0, 0, -5, 3);
    1363           0 :     slepEntryPtr->addChannel(1, 0.0, 0, -5, 5);
    1364             :   }
    1365             : 
    1366             :   return true;
    1367           0 : }
    1368             : 
    1369             : //--------------------------------------------------------------------------
    1370             : 
    1371             : // Initialize constants.
    1372             : 
    1373             : void ResonanceSlepton::initConstants() {
    1374             : 
    1375             :   // Locally stored properties and couplings.
    1376           0 :   s2W = coupSUSYPtr->sin2W;
    1377             : 
    1378             :   // Initialize functions for calculating 3-body widths
    1379           0 :   stauWidths.setPointers(particleDataPtr,coupSUSYPtr,infoPtr);
    1380             : 
    1381           0 : }
    1382             : 
    1383             : //--------------------------------------------------------------------------
    1384             : 
    1385             : // Calculate various common prefactors for the current mass.
    1386             : 
    1387             : void ResonanceSlepton::calcPreFac(bool) {
    1388             : 
    1389             :   // Common coupling factors.
    1390           0 :   alpEM  = coupSUSYPtr->alphaEM(mHat * mHat);
    1391           0 :   preFac = 1.0 / (s2W * pow(mHat,3));
    1392             : 
    1393           0 : }
    1394             : 
    1395             : //--------------------------------------------------------------------------
    1396             : 
    1397             : // Calculate width for currently considered channel.
    1398             : 
    1399             : void ResonanceSlepton::calcWidth(bool) {
    1400             : 
    1401             :   // Slepton type -- in u_i/d_i and generation
    1402             :   int ksusy = 1000000;
    1403           0 :   int isl = (abs(idRes)/ksusy == 2) ? (abs(idRes)%10+1)/2 + 3
    1404             :                                     : (abs(idRes)%10+1)/2;
    1405           0 :   int il = (id2Abs-9)/2;
    1406           0 :   bool islep = abs(idRes)%2;
    1407             : 
    1408             :   // Check that mass is above threshold.
    1409           0 :   if (ps == 0.) return;
    1410           0 :   widNow = 0.0;
    1411             : 
    1412             :   double fac = 0.0 , wid = 0.0;
    1413             : 
    1414           0 :   if (mult == 2) {
    1415             :     // Two-body decays
    1416             : 
    1417           0 :     kinFac = (mHat * mHat - mf1 * mf1 - mf2 * mf2);
    1418           0 :     fac = kinFac / (16.0 * M_PI * pow(mHat,3));
    1419             : 
    1420             :     // Case 1: RPV decays
    1421           0 :     if (id1Abs < 17 && id2Abs < 17)  {
    1422             : 
    1423             :       wid = 0;
    1424           0 :       int il2 = (id1Abs - 9)/2;
    1425             : 
    1426             :       //Case 1a: RPV LLE
    1427           0 :       if(id1Abs > 10 && id2Abs > 10) {
    1428           0 :         if (!coupSUSYPtr->isLLE) { widNow = 0.0; return;}
    1429             : 
    1430           0 :         if (!islep){ // sneutrino
    1431           0 :           for (int isl2=1; isl2<3; isl2++)
    1432           0 :             wid += norm(coupSUSYPtr->Rsv[isl][isl2]
    1433           0 :                  * coupSUSYPtr->rvLLE[il][isl2][il2]);
    1434           0 :         } else {
    1435           0 :           for (int isl2=1; isl2<3; isl2++)
    1436           0 :             wid += norm(coupSUSYPtr->Rsl[isl][isl2+3]
    1437           0 :                  * coupSUSYPtr->rvLLE[isl2][il][il2]);
    1438             :         }
    1439             :       }
    1440             :       //Case 1b: RPV LQD
    1441           0 :       if(id1Abs < 10 && id2Abs < 10) {
    1442           0 :         if (!coupSUSYPtr->isLQD) { widNow = 0.0; return;}
    1443           0 :         if (!islep){ // sneutrino
    1444           0 :           for (int isl2=1; isl2<3; isl2++)
    1445           0 :             wid += norm(coupSUSYPtr->Rsv[isl][isl2]
    1446           0 :                  * coupSUSYPtr->rvLQD[isl2][id1Abs][id2Abs]);
    1447           0 :           wid *= 3.0; // colour factor
    1448             : 
    1449           0 :         } else {
    1450           0 :           for (int isl2=1; isl2<3; isl2++)
    1451           0 :             wid += norm(coupSUSYPtr->Rsl[isl][isl2+3]
    1452           0 :                  * coupSUSYPtr->rvLLE[isl2][id1Abs][id2Abs]);
    1453           0 :           wid *= 3.0; // colour factor
    1454             :         }
    1455             :       }
    1456           0 :     }
    1457             : 
    1458             :     //Case 2: lepton + gaugino
    1459             : 
    1460           0 :     if (id1Abs > ksusy && id2Abs > 10 && id2Abs < 17) {
    1461           0 :       for (int i=1; i<6 ; i++){
    1462             :         // ~ell/~nu -> ~chi0 + ell/nu
    1463           0 :         if (coupSUSYPtr->idNeut(i)==id1Abs && idRes%2 == id2Abs%2){
    1464           0 :           fac = alpEM *  preFac / (2.0 * (1 - s2W));
    1465           0 :           if (islep)
    1466           0 :             wid = kinFac * (norm(coupSUSYPtr->LsllX[isl][il][i])
    1467           0 :                 + norm(coupSUSYPtr->RsllX[isl][il][i]))
    1468           0 :                 - 4.0 * mHat * mf2 * real(coupSUSYPtr->LsllX[isl][il][i]
    1469           0 :                 * conj(coupSUSYPtr->RsllX[isl][il][i]));
    1470             :           else
    1471           0 :             wid = kinFac * (norm(coupSUSYPtr->LsvvX[isl][il][i])
    1472           0 :                 + norm(coupSUSYPtr->RsvvX[isl][il][i]))
    1473           0 :                 - 4.0 * mHat * mf2 * real(coupSUSYPtr->LsvvX[isl][il][i]
    1474           0 :                 * conj(coupSUSYPtr->RsvvX[isl][il][i]));
    1475             :         }
    1476             : 
    1477             :         // ~ell/~nu -> ~chi- + nu/ell
    1478           0 :         else if (i < 3 && coupSUSYPtr->idChar(i)==id1Abs
    1479           0 :           && idRes%2 != id2Abs%2){
    1480             : 
    1481           0 :           fac = alpEM *  preFac / (4.0 * (1 - s2W));
    1482           0 :           if (islep)
    1483           0 :             wid = kinFac * (norm(coupSUSYPtr->LslvX[isl][il][i])
    1484           0 :                 + norm(coupSUSYPtr->RslvX[isl][il][i]))
    1485           0 :                 - 4.0 * mHat * mf2 * real(coupSUSYPtr->LslvX[isl][il][i]
    1486           0 :                 * conj(coupSUSYPtr->RslvX[isl][il][i]));
    1487             :           else
    1488             :             wid = kinFac * (norm(coupSUSYPtr->LslvX[isl][il][i])
    1489             :                 + norm(coupSUSYPtr->RslvX[isl][il][i]))
    1490           0 :                 - 4.0 * mHat * mf2 * real(coupSUSYPtr->LslvX[isl][il][i]
    1491           0 :                 * conj(coupSUSYPtr->RslvX[isl][il][i]));
    1492             :         }
    1493             :       }
    1494           0 :     }
    1495             : 
    1496             :     //Case 3: ~l_i -> ~l_j + Z/W
    1497           0 :     else if (id1Abs > ksusy+10 && id1Abs%100 < 17
    1498           0 :       && (id2Abs == 23 || id2Abs == 24)){
    1499             : 
    1500             :       // factor of lambda^(3/2) = ps^3;
    1501           0 :       fac = alpEM * preFac/(16.0 * pow2(mf2) * (1.0 - s2W)) * pow2(ps) ;
    1502             : 
    1503           0 :       int isl2 = (id1Abs/ksusy == 2) ? (id1Abs%10+1)/2 + 3: (id1Abs%10+1)/2;
    1504             : 
    1505           0 :       if (id2Abs == 23 && id1Abs%2 == idRes%2){
    1506           0 :         if (islep)
    1507           0 :           wid = norm(coupSUSYPtr->LslslZ[isl][isl2]
    1508           0 :               + coupSUSYPtr->RslslZ[isl][isl2]);
    1509             :         else
    1510           0 :           wid = norm(coupSUSYPtr->LsvsvZ[isl][isl2]
    1511           0 :               + coupSUSYPtr->RsvsvZ[isl][isl2]);
    1512             :       }
    1513           0 :       else if (id2Abs == 24 && id1Abs%2 != idRes%2){
    1514           0 :         if (islep)
    1515           0 :           wid = norm(coupSUSYPtr->LslsvW[isl2][isl]);
    1516             :         else
    1517           0 :           wid = norm(coupSUSYPtr->LslsvW[isl][isl2]);
    1518             :       }
    1519           0 :     }
    1520             : 
    1521             :     // TODO: Case ~l_i -> ~l_j + h/H
    1522             : 
    1523           0 :     widNow = fac * wid * ps * pow2(mHat);
    1524             : 
    1525             :     if (DBSUSY) cout<<idRes<<":: id1:"<<id1Abs<<" id2:"<<id2Abs
    1526             :                     <<" Width: "<<widNow<<endl;
    1527           0 :   }
    1528             :   else { // Case 4: special many-body stau decays
    1529             :     // Case 4a: ~tau -> pi0 nu_tau ~chi0
    1530             :     // Case 4b: ~tau -> rho/a1 nu_tau ~chi0
    1531             :     // Case 4c: ~tau -> l nu_l nu_tau ~chi0
    1532             : 
    1533             :     // Check that there is a stau component
    1534           0 :     double staufac = norm(coupSUSYPtr->Rsl[isl][3])
    1535           0 :                    + norm(coupSUSYPtr->Rsl[isl][6]);
    1536           0 :     if (staufac < 1.0e-6 || abs(mRes - particleDataPtr->m0(15)) > 0.0 ) return;
    1537           0 :     if(id2Abs > 17)
    1538           0 :       widNow = stauWidths.getWidth(idRes, id2Abs);
    1539             :     else
    1540           0 :       widNow = stauWidths.getWidth(idRes, id3Abs);
    1541             : 
    1542           0 :     widNow *= staufac;
    1543             : 
    1544           0 :   }
    1545             : 
    1546           0 :   return;
    1547             : 
    1548           0 : }
    1549             : 
    1550             : //==========================================================================
    1551             : 
    1552             : } //end namespace Pythia8

Generated by: LCOV version 1.11