10 #include "Pythia8/ParticleData.h"
11 #include "Pythia8/SusyCouplings.h"
28 void CoupSUSY::initSUSY (SusyLesHouches* slhaPtrIn, Info* infoPtrIn) {
33 settingsPtr = infoPtr->settingsPtr;
34 particleDataPtr = infoPtr->particleDataPtr;
35 coupSMPtr = infoPtr->coupSMPtr;
38 bool DBSUSY = settingsPtr->mode(
"SLHA:verbose") > 2 ?
true :
false;
41 if (!slhaPtr->modsel.exists())
return;
44 isNMSSM = (slhaPtr->modsel(3) != 1 ?
false :
true);
45 settingsPtr->flag(
"SLHA:NMSSM",isNMSSM);
46 int nNeut = (isNMSSM ? 5 : 4);
50 mZpole = particleDataPtr->m0(23);
51 wZpole = particleDataPtr->mWidth(23);
52 mWpole = particleDataPtr->m0(24);
53 wWpole = particleDataPtr->mWidth(24);
59 sin2W = coupSMPtr->sin2thetaW();
61 if (settingsPtr->mode(
"SUSY:sin2thetaWMode") == 3) {
64 sin2W = 1.0 - pow(mW/mZ,2);
65 }
else if (settingsPtr->mode(
"SUSY:sin2thetaWMode") == 2){
68 if(slhaPtr->gauge.exists(1) && slhaPtr->gauge.exists(2)
69 && slhaPtr->hmix.exists(3)) {
70 double gp=slhaPtr->gauge(1);
71 double g =slhaPtr->gauge(2);
72 double v =slhaPtr->hmix(3);
74 mZ = sqrt(pow(gp,2)+pow(g,2)) * v / 2.0;
77 sin2W = pow2(gp)/(pow2(g)+pow2(gp));
79 infoPtr->errorMsg(
"Warning in CoupSUSY::initSUSY: Block GAUGE"
80 " not found or incomplete; using sin(thetaW) at mZ");
85 cosW = sqrt(1.0-sin2W);
90 if(slhaPtr->hmix.exists(2))
91 tanb = slhaPtr->hmix(2);
93 tanb = slhaPtr->minpar(3);
94 infoPtr->errorMsg(
"Warning in CoupSUSY::initSUSY: Block HMIX"
95 " not found or incomplete; using MINPAR tan(beta)");
97 cosb = sqrt( 1.0 / (1.0 + tanb*tanb) );
98 sinb = sqrt( max(0.0, 1.0 - cosb*cosb));
100 double beta = acos(cosb);
104 cout <<
" sin2W(Q) = " << sin2W <<
" mW(Q) = " << mW
105 <<
" mZ(Q) = " << mZ << endl;
106 cout <<
" vev(Q) = " << slhaPtr->hmix(3) <<
" tanb(Q) = " << tanb
108 for (
int i=1;i<=3;i++) {
109 for (
int j=1;j<=3;j++) {
110 cout <<
" VCKM [" << i <<
"][" << j <<
"] = "
111 << scientific << setw(10) << coupSMPtr->VCKMgen(i,j) << endl;
117 if(slhaPtr->alpha.exists()) {
118 alphaHiggs = slhaPtr->alpha();
121 else if (slhaPtr->modsel(4) == 1) {
122 alphaHiggs = asin(slhaPtr->rvhmix(1,2));
123 infoPtr->errorMsg(
"Info from CoupSUSY::initSUSY:",
"Extracting angle"
124 " alpha from RVHMIX",
true);
126 infoPtr->errorMsg(
"Info from CoupSUSY::initSUSY:",
"Block ALPHA"
127 " not found; using alpha = beta.",
true);
129 alphaHiggs = atan(tanb);
132 if(slhaPtr->hmix.exists(1) && slhaPtr->hmix.exists(4)){
133 muHiggs = slhaPtr->hmix(1);
134 mAHiggs = sqrt(slhaPtr->hmix(4));
135 }
else if (slhaPtr->rvamix.exists()){
136 mAHiggs = particleDataPtr->m0(36);
138 infoPtr->errorMsg(
"Warning from CoupSUSY::initSUSY: Block HMIX"
139 " not found or incomplete",
"; setting mu = 0.");
141 infoPtr->errorMsg(
"Warning from CoupSUSY::initSUSY: Block HMIX"
142 " not found or incomplete",
"; setting mu = mA = 0.");
149 double sba = sin(beta-alphaHiggs);
150 double cba = cos(beta-alphaHiggs);
151 double cosa = cos(alphaHiggs);
152 double sina = sin(alphaHiggs);
155 settingsPtr->parm(
"HiggsH1:coup2d", -sina/cosb);
156 settingsPtr->parm(
"HiggsH1:coup2u", cosa/sinb);
157 settingsPtr->parm(
"HiggsH1:coup2l", cosa/sinb);
158 settingsPtr->parm(
"HiggsH1:coup2Z", sba);
159 settingsPtr->parm(
"HiggsH1:coup2W", sba);
161 settingsPtr->parm(
"HiggsH2:coup2d", cosa/cosb);
162 settingsPtr->parm(
"HiggsH2:coup2u", sina/sinb);
163 settingsPtr->parm(
"HiggsH2:coup2l", sina/sinb);
164 settingsPtr->parm(
"HiggsH2:coup2Z", cba);
165 settingsPtr->parm(
"HiggsH2:coup2W", cba);
166 settingsPtr->parm(
"HiggsH2:coup2H1Z", 0.0);
167 settingsPtr->parm(
"HiggsH2:coup2HchgW", sba);
169 settingsPtr->parm(
"HiggsA3:coup2d", tanb);
170 settingsPtr->parm(
"HiggsA3:coup2u", cosb/sinb);
171 settingsPtr->parm(
"HiggsA3:coup2l", cosb/sinb);
172 settingsPtr->parm(
"HiggsA3:coup2Z", 0.0);
173 settingsPtr->parm(
"HiggsA3:coup2W", 0.0);
174 settingsPtr->parm(
"HiggsA3:coup2H1Z", cba);
175 settingsPtr->parm(
"HiggsA3:coup2H2Z", sba);
176 settingsPtr->parm(
"HiggsA3:coup2HchgW", 1.0);
179 settingsPtr->parm(
"HiggsHchg:tanBeta", tanb);
180 settingsPtr->parm(
"HiggsHchg:coup2H1W", cba);
181 settingsPtr->parm(
"HiggsHchg:coup2H2W", sba);
185 double cbpa = cos(beta+alphaHiggs);
186 double sbpa = sin(beta+alphaHiggs);
188 settingsPtr->parm(
"HiggsH1:coup2Hchg", cos(2*beta)*sbpa + 2*pow2(cosW)*sba);
189 settingsPtr->parm(
"HiggsH2:coup2Hchg", -cos(2*beta)*cbpa + 2*pow2(cosW)*cba);
190 settingsPtr->parm(
"HiggsH2:coup2H1H1", 2*sin(2*alphaHiggs)*sbpa
191 - cos(2*alphaHiggs)*cbpa);
192 settingsPtr->parm(
"HiggsH2:coup2A3A3", -cos(2*beta)*cbpa);
193 settingsPtr->parm(
"HiggsH2:coup2A3H1", 0.0);
194 settingsPtr->parm(
"HiggsA3:coup2H1H1", 0.0);
195 settingsPtr->parm(
"HiggsA3:coup2Hchg", 0.0);
198 LHmatrixBlock<6> Ru(slhaPtr->usqmix);
199 LHmatrixBlock<6> Rd(slhaPtr->dsqmix);
200 LHmatrixBlock<6> imRu(slhaPtr->imusqmix);
201 LHmatrixBlock<6> imRd(slhaPtr->imdsqmix);
204 for (
int i=1; i<=6; i++) {
205 for (
int j=1; j<=3; j++) {
206 LsddG[i][j] = complex( Rd(i,j) , imRd(i,j));
207 RsddG[i][j] = complex(-Rd(i,j+3), -imRd(i,j+3));
208 LsuuG[i][j] = complex( Ru(i,j) , imRu(i,j));
209 RsuuG[i][j] = complex(-Ru(i,j+3), -imRu(i,j+3));
212 cout <<
" Lsddg [" << i <<
"][" << j <<
"] = "
213 << scientific << setw(10) << LsddG[i][j]
214 <<
" RsddG [" << i <<
"][" << j <<
"] = "
215 << scientific << setw(10) << RsddG[i][j] << endl;
216 cout <<
" Lsuug [" << i <<
"][" << j <<
"] = "
217 << scientific << setw(10) << LsuuG[i][j]
218 <<
" RsuuG [" << i <<
"][" << j <<
"] = "
219 << scientific << setw(10) << RsuuG[i][j] << endl;
225 for (
int i=1 ; i<=6 ; i++) {
228 LqqZ[i] = coupSMPtr->af(i) - 2.0*coupSMPtr->ef(i)*sin2W ;
229 RqqZ[i] = - 2.0*coupSMPtr->ef(i)*sin2W ;
233 cout <<
" LqqZ [" << i <<
"][" << i <<
"] = "
234 << scientific << setw(10) << LqqZ[i]
235 <<
" RqqZ [" << i <<
"][" << i <<
"] = "
236 << scientific << setw(10) << RqqZ[i] << endl;
241 for (
int i=1 ; i<=6 ; i++) {
244 for (
int j=1 ; j<=6 ; j++) {
249 for (
int k=1;k<=3;k++) {
250 complex Rdik = complex(Rd(i,k), imRd(i,k) );
251 complex Rdjk = complex(Rd(j,k), imRd(j,k) );
252 complex Rdik3 = complex(Rd(i,k+3),imRd(i,k+3));
253 complex Rdjk3 = complex(Rd(j,k+3),imRd(j,k+3));
254 LsdsdZ[i][j] += LqqZ[1] * (Rdik*conj(Rdjk));
255 RsdsdZ[i][j] += RqqZ[1] * (Rdik3*conj(Rdjk3));
261 for (
int k=1;k<=3;k++) {
262 complex Ruik = complex(Ru(i,k) ,imRu(i,k) );
263 complex Rujk = complex(Ru(j,k) ,imRu(j,k) );
264 complex Ruik3 = complex(Ru(i,k+3),imRu(i,k+3));
265 complex Rujk3 = complex(Ru(j,k+3),imRu(j,k+3));
266 LsusuZ[i][j] += LqqZ[2] * (Ruik*conj(Rujk));
267 RsusuZ[i][j] += RqqZ[2] * (Ruik3*conj(Rujk3));
272 if (max(norm(LsdsdZ[i][j]),norm(RsdsdZ[i][j])) > 1e-6) {
273 cout <<
" LsdsdZ[" << i <<
"][" << j <<
"] = "
274 << scientific << setw(10) << LsdsdZ[i][j]
275 <<
" RsdsdZ[" << i <<
"][" << j <<
"] = "
276 << scientific << setw(10) << RsdsdZ[i][j] << endl;
278 if (max(norm(LsusuZ[i][j]),norm(RsusuZ[i][j]))> 1e-6) {
279 cout <<
" LsusuZ[" << i <<
"][" << j <<
"] = "
280 << scientific << setw(10) << LsusuZ[i][j]
281 <<
" RsusuZ[" << i <<
"][" << j <<
"] = "
282 << scientific << setw(10) << RsusuZ[i][j] << endl;
288 for(
int i = 1; i < 7; i++)
289 for(
int j = 1; j < 7; j++){
290 Rsl[i][j] = slhaPtr->selmix(i,j);
294 for(
int i = 1; i < 7; i++)
295 for(
int j = 1; j < 7; j++){
296 if (i < 4 && j < 4) Rsv[i][j] = slhaPtr->snumix(i,j);
297 else Rsv[i][j] = 0.0;
305 if (slhaPtr->modsel(4) >= 1 && slhaPtr->rvlmix.exists()) {
306 for (
int i=1; i<=6; ++i)
307 for (
int j=1; j<=6; ++j)
308 Rsl[i][j] = slhaPtr->rvlmix(i+1,j+2);
310 bool hasCrossTerms =
false;
311 for (
int i=2; i<=7; ++i)
312 for (
int j=1; j<=2; ++j)
313 if (abs(slhaPtr->rvlmix(i,j)) > 1e-5) {
314 hasCrossTerms =
true;
318 infoPtr->errorMsg(
"Warning from CoupSUSY::initSUSY: "
319 "slepton-Higgs mixing not supported internally in PYTHIA");
323 if (slhaPtr->modsel(4) >= 1 && slhaPtr->rvhmix.exists()) {
324 for (
int i=1; i<=3; ++i)
325 for (
int j=1; j<=3; ++j)
326 Rsv[i][j] = slhaPtr->rvhmix(i+2,j+2);
328 bool hasCrossTerms =
false;
329 for (
int i=3; i<=7; ++i)
330 for (
int j=1; j<=2; ++j)
331 if (abs(slhaPtr->rvhmix(i,j)) > 1e-5) {
332 hasCrossTerms =
true;
336 infoPtr->errorMsg(
"Warning from CoupSUSY::initSUSY: "
337 "sneutrino-Higgs mixing not supported internally in PYTHIA");
342 for(
int i=1;i<=6;i++){
343 for(
int j=1;j<=6;j++){
344 cout << scientific << setw(10) << Rsl[i][j]<<
" ";
349 for(
int i=1;i<=6;i++){
350 for(
int j=1;j<=6;j++){
351 cout << scientific << setw(10) << Rsv[i][j]<<
" ";
359 for (
int i=11 ; i<=16 ; i++) {
361 LllZ[i-10] = coupSMPtr->af(i) - 2.0*coupSMPtr->ef(i)*sin2W ;
362 RllZ[i-10] = - 2.0*coupSMPtr->ef(i)*sin2W ;
366 cout <<
" LllZ [" << i-10 <<
"][" << i-10 <<
"] = "
367 << scientific << setw(10) << LllZ[i-10]
368 <<
" RllZ [" << i-10 <<
"][" << i-10 <<
"] = "
369 << scientific << setw(10) << RllZ[i-10] << endl;
375 for(
int i=1;i<=6;i++){
376 for(
int j=1;j<=6;j++){
380 for (
int k=1;k<=3;k++) {
381 LslslZ[i][j] += LllZ[1] * Rsl[i][k] * Rsl[j][k];
382 RslslZ[i][j] += RllZ[1] * Rsl[i][k+3] * Rsl[j][k+3];
388 for (
int k=1;k<=3;k++)
389 LsvsvZ[i][j] += LllZ[2] * Rsv[i][k]*Rsv[j][k];
393 for(
int i=1;i<=6;i++){
394 for(
int j=1;j<=6;j++){
396 if (max(norm(LsvsvZ[i][j]),norm(RsvsvZ[i][j])) > 1e-6) {
397 cout <<
" LsvsvZ[" << i <<
"][" << j <<
"] = "
398 << scientific << setw(10) << LsvsvZ[i][j]
399 <<
" RsvsvZ[" << i <<
"][" << j <<
"] = "
400 << scientific << setw(10) << RsvsvZ[i][j] << endl;
402 if (max(norm(LslslZ[i][j]),norm(RslslZ[i][j]))> 1e-6) {
403 cout <<
" LslslZ[" << i <<
"][" << j <<
"] = "
404 << scientific << setw(10) << LslslZ[i][j]
405 <<
" RslslZ[" << i <<
"][" << j <<
"] = "
406 << scientific << setw(10) << RslslZ[i][j] << endl;
414 for (
int i=1;i<=3;i++) {
415 for (
int j=1;j<=3;j++) {
420 complex Vij=coupSMPtr->VCKMgen(i,j);
421 if (slhaPtr->vckm.exists()) {
422 Vij=complex(slhaPtr->vckm(i,j),slhaPtr->imvckm(i,j));
426 LudW[i][j] = sqrt(2.0) * cosW * Vij;
431 cout <<
" LudW [" << i <<
"][" << j <<
"] = "
432 << scientific << setw(10) << LudW[i][j]
433 <<
" RudW [" << i <<
"][" << j <<
"] = "
434 << scientific << setw(10) << RudW[i][j] << endl;
442 for (
int k=1;k<=6;k++) {
443 for (
int l=1;l<=6;l++) {
449 for (
int i=1;i<=3;i++) {
450 for (
int j=1;j<=3;j++) {
455 complex Vij=coupSMPtr->VCKMgen(i,j);
456 if (slhaPtr->vckm.exists()) {
457 Vij=complex(slhaPtr->vckm(i,j),slhaPtr->imvckm(i,j));
461 complex Ruki = complex(Ru(k,i),imRu(k,i));
462 complex Rdlj = complex(Rd(l,j),imRd(l,j));
463 LsusdW[k][l] += sqrt(2.0) * cosW * Vij * Ruki * conj(Rdlj);
471 if (max(norm(LsusdW[k][l]),norm(RsusdW[k][l]))> 1e-6) {
472 cout <<
" LsusdW[" << k <<
"][" << l <<
"] = "
473 << scientific << setw(10) << LsusdW[k][l]
474 <<
" RsusdW[" << k <<
"][" << l <<
"] = "
475 << scientific << setw(10) << RsusdW[k][l] << endl;
485 for (
int i=1;i<=3;i++){
486 for (
int j=1;j<=3;++j){
487 LlvW[i][j] = (i==j) ? sqrt(2.0) * cosW : 0.0 ;
492 cout <<
" LlvW [" << i <<
"][" << j <<
"] = "
493 << scientific << setw(10) << LlvW[i][j]
494 <<
" RlvW [" << i <<
"][" << j <<
"] = "
495 << scientific << setw(10) << RlvW[i][j] << endl;
501 for (
int k=1;k<=6;k++) {
502 for (
int l=1;l<=6;l++) {
507 for(
int i=1;i<=3;i++)
508 LslsvW[k][l] += sqrt(2.0) * cosW * Rsl[k][i] * Rsv[l][i];
513 cout <<
" LslsvW [" << k <<
"][" << l <<
"] = "
514 << scientific << setw(10) << LslsvW[k][l]
515 <<
" RslsvW [" << k <<
"][" << l <<
"] = "
516 << scientific << setw(10) << RslsvW[k][l] << endl;
524 if (slhaPtr->modsel(4) >= 1 && slhaPtr->rvnmix.exists()) {
525 bool hasCrossTerms =
false;
526 for (
int i=1; i<=3; ++i)
527 for (
int j=4; j<=7; ++j)
528 if (abs(slhaPtr->rvnmix(i,j)) > 1e-5) {
529 hasCrossTerms =
true;
533 infoPtr->errorMsg(
"Warning from CoupSUSY::initSUSY: "
534 "Neutrino-Neutralino mixing not supported internally in PYTHIA");
538 for (
int i=1;i<=nNeut;i++) {
541 complex ni1,ni2,ni3,ni4,ni5;
544 if (slhaPtr->modsel(4) >= 1 && slhaPtr->rvnmix.exists()) {
545 ni1=complex( slhaPtr->rvnmix(i+3,4), 0.0 );
546 ni2=complex( slhaPtr->rvnmix(i+3,5), 0.0 );
547 ni3=complex( slhaPtr->rvnmix(i+3,6), 0.0 );
548 ni4=complex( slhaPtr->rvnmix(i+3,7), 0.0 );
549 ni5=complex( 0.0, 0.0);
552 ni1=complex( slhaPtr->nmix(i,1), slhaPtr->imnmix(i,1) );
553 ni2=complex( slhaPtr->nmix(i,2), slhaPtr->imnmix(i,2) );
554 ni3=complex( slhaPtr->nmix(i,3), slhaPtr->imnmix(i,3) );
555 ni4=complex( slhaPtr->nmix(i,4), slhaPtr->imnmix(i,4) );
556 ni5=complex( 0.0, 0.0);
558 ni1=complex( slhaPtr->nmnmix(i,1), slhaPtr->imnmnmix(i,1) );
559 ni2=complex( slhaPtr->nmnmix(i,2), slhaPtr->imnmnmix(i,2) );
560 ni3=complex( slhaPtr->nmnmix(i,3), slhaPtr->imnmnmix(i,3) );
561 ni4=complex( slhaPtr->nmnmix(i,4), slhaPtr->imnmnmix(i,4) );
562 ni5=complex( slhaPtr->nmnmix(i,5), slhaPtr->imnmnmix(i,5) );
566 complex iRot( 0., 1.);
567 if (slhaPtr->mass(idNeut(i)) < 0.) {
576 for (
int j=1; j<=nNeut; j++) {
580 if (slhaPtr->modsel(4) >= 1 && slhaPtr->rvnmix.exists()) {
581 nj3=complex( slhaPtr->rvnmix(i+3,6), 0.0 );
582 nj4=complex( slhaPtr->rvnmix(i+3,7), 0.0 );
585 nj3=complex( slhaPtr->nmix(j,3), slhaPtr->imnmix(j,3) );
586 nj4=complex( slhaPtr->nmix(j,4), slhaPtr->imnmix(j,4) );
588 nj3=complex( slhaPtr->nmnmix(j,3), slhaPtr->imnmnmix(j,3) );
589 nj4=complex( slhaPtr->nmnmix(j,4), slhaPtr->imnmnmix(j,4) );
592 if (slhaPtr->mass(idNeut(j)) < 0.) {
598 OLpp[i][j] = -0.5 * ni3 * conj(nj3) + 0.5 * ni4 * conj(nj4);
599 ORpp[i][j] = 0.5 * conj(ni3) * nj3 - 0.5 * conj(ni4) * nj4;
603 cout <<
" OL'' [" << i <<
"][" << j <<
"] = "
604 << scientific << setw(10) << OLpp[i][j]
605 <<
" OR'' [" << i <<
"][" << j <<
"] = "
606 << scientific << setw(10) << ORpp[i][j] << endl;
612 for (
int j=1; j<=nChar; j++) {
615 complex uj1, uj2, vj1, vj2;
616 if (slhaPtr->modsel(4)<1 || !slhaPtr->rvumix.exists()) {
617 uj1=complex( slhaPtr->umix(j,1), slhaPtr->imumix(j,1) );
618 uj2=complex( slhaPtr->umix(j,2), slhaPtr->imumix(j,2) );
619 vj1=complex( slhaPtr->vmix(j,1), slhaPtr->imvmix(j,1) );
620 vj2=complex( slhaPtr->vmix(j,2), slhaPtr->imvmix(j,2) );
624 uj1=complex( slhaPtr->rvumix(j+3,4), 0.0 );
625 uj2=complex( slhaPtr->rvumix(j+3,5), 0.0 );
626 vj1=complex( slhaPtr->rvvmix(j+3,4), 0.0 );
627 vj2=complex( slhaPtr->rvvmix(j+3,5), 0.0 );
631 OL[i][j] = -1.0/sqrt(2.0)*ni4*conj(vj2)+ni2*conj(vj1);
632 OR[i][j] = 1.0/sqrt(2.0)*conj(ni3)*uj2+conj(ni2)*uj1;
636 cout <<
" OL [" << i <<
"][" << j <<
"] = "
637 << scientific << setw(10) << OL[i][j]
638 <<
" OR [" << i <<
"][" << j <<
"] = "
639 << scientific << setw(10) << OR[i][j] << endl;
646 double ed = -1.0/3.0;
652 for (
int k=1;k<=3;k++) {
656 double mu = particleDataPtr->m0(2*k);
657 double md = particleDataPtr->m0(2*k-1);
658 if (k == 1) { mu=0.0 ; md=0.0; }
659 if (k == 2) { md=0.0 ; mu=0.0; }
662 if (slhaPtr->yd.exists() && slhaPtr->hmix.exists(3)) {
663 double ykk=slhaPtr->yd(k,k);
664 double v1=slhaPtr->hmix(3)/sqrt(1+pow(tanb,2));
665 if (ykk > 0.0) md = ykk * v1 / sqrt(2.0) ;
667 if (slhaPtr->yu.exists() && slhaPtr->hmix.exists(3)) {
668 double ykk=slhaPtr->yu(k,k);
669 double v2=slhaPtr->hmix(3)/sqrt(1.0+1.0/pow(tanb,2));
670 if (ykk > 0.0) mu = ykk * v2 / sqrt(2.0) ;
675 cout <<
" Gen = " << k <<
" mu = " << mu <<
" md = " << md
676 <<
" yUU,DD = " << slhaPtr->yu(k,k) <<
","
677 << slhaPtr->yd(k,k) << endl;
681 for (
int j=1;j<=6;j++) {
684 complex Rdjk = complex(Rd(j,k), imRd(j,k) );
685 complex Rdjk3 = complex(Rd(j,k+3),imRd(j,k+3));
686 complex Rujk = complex(Ru(j,k), imRu(j,k) );
687 complex Rujk3 = complex(Ru(j,k+3),imRu(j,k+3));
691 LsddX[j][k][i] = ((ed-T3d)*sinW*ni1 + T3d*cosW*ni2)*conj(Rdjk)
692 + md*cosW*ni3*conj(Rdjk3)/2.0/mW/cosb;
693 RsddX[j][k][i] = -ed*sinW*conj(ni1)*conj(Rdjk3)
694 + md*cosW*conj(ni3)*conj(Rdjk)/2.0/mW/cosb;
697 LsuuX[j][k][i] = ((eu-T3u)*sinW*ni1 + T3u*cosW*ni2)*conj(Rujk)
698 + mu*cosW*ni4*conj(Rujk3)/2.0/mW/sinb;
699 RsuuX[j][k][i] = -eu*sinW*conj(ni1)*conj(Rujk3)
700 + mu*cosW*conj(ni4)*conj(Rujk)/2.0/mW/sinb;
703 if (norm(LsddX[j][k][i]) > 1e-6) {
705 cout <<
" LsddX[" << j <<
"][" << k <<
"][" << i <<
"] = "
706 << scientific << setw(10) << LsddX[j][k][i] << endl;
708 if (norm(RsddX[j][k][i]) > 1e-6) {
710 cout <<
" RsddX[" << j <<
"][" << k <<
"][" << i <<
"] = "
711 << scientific << setw(10) << RsddX[j][k][i] << endl;
713 if (norm(LsuuX[j][k][i]) > 1e-6) {
715 cout <<
" LsuuX[" << j <<
"][" << k <<
"][" << i <<
"] = "
716 << scientific << setw(10) << LsuuX[j][k][i] << endl;
718 if (norm(RsuuX[j][k][i]) > 1e-6) {
720 cout <<
" RsuuX[" << j <<
"][" << k <<
"][" << i <<
"] = "
721 << scientific << setw(10) << RsuuX[j][k][i] << endl;
735 for (
int k=1;k<=3;k++) {
738 if(k==3) ml = particleDataPtr->m0(15);
740 for(
int j=1;j<=6;j++){
748 LsllX[j][k][i] = ((el-T3l)*sinW*ni1 + T3l*cosW*ni2)*Rsl[j][k]
749 + ml*cosW*ni3/2.0/mW/cosb*Rsl[j][k+3];
750 RsllX[j][k][i] = -el*sinW*conj(ni1)*Rsl[j][k+3]
751 + ml*cosW*conj(ni3)/2.0/mW/cosb*Rsl[j][k];
756 LsvvX[j][k][i] = ((ev-T3v)*sinW*ni1 + T3v*cosW*ni2);
760 if (norm(LsllX[j][k][i]) > 1e-6) {
762 cout <<
" LsllX[" << j <<
"][" << k <<
"][" << i <<
"] = "
763 << scientific << setw(10) << LsllX[j][k][i] << endl;
765 if (norm(RsllX[j][k][i]) > 1e-6) {
767 cout <<
" RsllX[" << j <<
"][" << k <<
"][" << i <<
"] = "
768 << scientific << setw(10) << RsllX[j][k][i] << endl;
770 if (norm(LsvvX[j][k][i]) > 1e-6) {
772 cout <<
" LsvvX[" << j <<
"][" << k <<
"][" << i <<
"] = "
773 << scientific << setw(10) << LsvvX[j][k][i] << endl;
781 if (slhaPtr->modsel(4) >= 1 && slhaPtr->rvumix.exists()) {
782 bool hasCrossTerms =
false;
783 for (
int i=1; i<=3; ++i)
784 for (
int j=4; j<=5; ++j)
785 if (abs(slhaPtr->rvumix(i,j)) > 1e-5
786 || abs(slhaPtr->rvvmix(i,j)) > 1e-5) {
787 hasCrossTerms =
true;
791 infoPtr->errorMsg(
"Warning from CoupSUSY::initSUSY: "
792 "Lepton-Chargino mixing not supported internally in PYTHIA");
797 double rt2 = sqrt(2.0);
799 for (
int i=1;i<=nChar;i++) {
802 complex ui1,ui2,vi1,vi2;
803 ui1=complex( slhaPtr->umix(i,1), slhaPtr->imumix(i,1) );
804 ui2=complex( slhaPtr->umix(i,2), slhaPtr->imumix(i,2) );
805 vi1=complex( slhaPtr->vmix(i,1), slhaPtr->imvmix(i,1) );
806 vi2=complex( slhaPtr->vmix(i,2), slhaPtr->imvmix(i,2) );
809 for (
int j=1; j<=nChar; j++) {
812 complex uj1, uj2, vj1, vj2;
813 uj1=complex( slhaPtr->umix(j,1), slhaPtr->imumix(j,1) );
814 uj2=complex( slhaPtr->umix(j,2), slhaPtr->imumix(j,2) );
815 vj1=complex( slhaPtr->vmix(j,1), slhaPtr->imvmix(j,1) );
816 vj2=complex( slhaPtr->vmix(j,2), slhaPtr->imvmix(j,2) );
819 OLp[i][j] = -vi1*conj(vj1) - 0.5*vi2*conj(vj2)
820 + ( (i == j) ? sin2W : 0.0);
821 ORp[i][j] = -conj(ui1)*uj1 - 0.5*conj(ui2)*uj2
822 + ( (i == j) ? sin2W : 0.0);
826 cout <<
" OL' [" << i <<
"][" << j <<
"] = "
827 << scientific << setw(10) << OLp[i][j]
828 <<
" OR' [" << i <<
"][" << j <<
"] = "
829 << scientific << setw(10) << ORp[i][j] << endl;
834 for (
int l=1;l<=3;l++) {
838 double mul = particleDataPtr->m0(2*l);
839 double mdl = particleDataPtr->m0(2*l-1);
840 if (l == 1 || l == 2) { mul=0.0 ; mdl=0.0; }
843 if (slhaPtr->yd.exists() && slhaPtr->hmix.exists(3)) {
844 double yll=slhaPtr->yd(l,l);
845 double v1=slhaPtr->hmix(3)/sqrt(1+pow(tanb,2));
846 if (yll > 0.0) mdl = yll * v1 / sqrt(2.0) ;
848 if (slhaPtr->yu.exists() && slhaPtr->hmix.exists(3)) {
849 double yll=slhaPtr->yu(l,l);
850 double v2=slhaPtr->hmix(3)/sqrt(1.0+1.0/pow(tanb,2));
851 if (yll > 0.0) mul = yll * v2 / sqrt(2.0) ;
855 for (
int j=1;j<=6;j++) {
858 LsduX[j][l][i] = 0.0;
859 RsduX[j][l][i] = 0.0;
860 LsudX[j][l][i] = 0.0;
861 RsudX[j][l][i] = 0.0;
864 for (
int k=1;k<=3;k++) {
868 double muk = particleDataPtr->m0(2*k);
869 double mdk = particleDataPtr->m0(2*k-1);
870 if (k == 1) { muk=0.0 ; mdk=0.0; }
871 if (k == 2) { mdk=0.0 ; muk=0.0; }
874 if (slhaPtr->yd.exists() && slhaPtr->hmix.exists(3)) {
875 double ykk=slhaPtr->yd(k,k);
876 double v1=slhaPtr->hmix(3)/sqrt(1+pow(tanb,2));
877 if (ykk > 0.0) mdk = ykk * v1 / sqrt(2.0) ;
879 if (slhaPtr->yu.exists() && slhaPtr->hmix.exists(3)) {
880 double ykk=slhaPtr->yu(k,k);
881 double v2=slhaPtr->hmix(3)/sqrt(1.0+1.0/pow(tanb,2));
882 if (ykk > 0.0) muk = ykk * v2 / sqrt(2.0) ;
888 complex Vlk=coupSMPtr->VCKMgen(l,k);
889 complex Vkl=coupSMPtr->VCKMgen(k,l);
890 if (slhaPtr->vckm.exists()) {
891 Vlk=complex(slhaPtr->vckm(l,k),slhaPtr->imvckm(l,k));
892 Vkl=complex(slhaPtr->vckm(k,l),slhaPtr->imvckm(k,l));
896 complex Rdjk = complex(Rd(j,k), imRd(j,k) );
897 complex Rdjk3 = complex(Rd(j,k+3),imRd(j,k+3));
898 complex Rujk = complex(Ru(j,k), imRu(j,k) );
899 complex Rujk3 = complex(Ru(j,k+3),imRu(j,k+3));
903 LsduX[j][l][i] += (ui1*conj(Rdjk)
904 - mdk*ui2*conj(Rdjk3)/rt2/mW/cosb)*Vlk;
905 RsduX[j][l][i] -= mul*conj(vi2)*Vlk*conj(Rdjk)/rt2/mW/sinb;
908 LsudX[j][l][i] += (conj(vi1)*Rujk
909 - muk*conj(vi2)*Rujk3/rt2/mW/sinb)*Vkl;
910 RsudX[j][l][i] -= mdl*ui2*Vkl*Rujk/rt2/mW/cosb;
915 if (max(norm(LsduX[j][l][i]),norm(RsduX[j][l][i])) > 1e-6) {
917 cout <<
" LsduX[" << j <<
"][" << l <<
"][" << i <<
"] = "
918 << scientific << setw(10) << LsduX[j][l][i];
919 cout <<
" RsduX[" << j <<
"][" << l <<
"][" << i <<
"] = "
920 << scientific << setw(10) << RsduX[j][l][i] << endl;
922 if (max(norm(LsudX[j][l][i]),norm(RsudX[j][l][i])) > 1e-6) {
924 cout <<
" LsudX[" << j <<
"][" << l <<
"][" << i <<
"] = "
925 << scientific << setw(10) << LsudX[j][l][i];
926 cout <<
" RsudX[" << j <<
"][" << l <<
"][" << i <<
"] = "
927 << scientific << setw(10) << RsudX[j][l][i] << endl;
934 for (
int j=1;j<=6;j++) {
935 for (
int k=1;k<=3;k++) {
937 LslvX[j][k][i] = 0.0;
938 RslvX[j][k][i] = 0.0;
939 LsvlX[j][k][i] = 0.0;
940 RsvlX[j][k][i] = 0.0;
944 if (k == 3) ml = particleDataPtr->m0(15);
949 LslvX[j][k][i] += ui1- ml*ui2/rt2/mW/cosb;
950 RslvX[j][k][i] -= ml*conj(vi2)/rt2/mW/sinb;
954 LsvlX[j][k][i] += conj(vi1) - ml*conj(vi2)/rt2/mW/sinb;
959 if (max(norm(LslvX[j][k][i]),norm(RslvX[j][k][i])) > 1e-6) {
961 cout <<
" LslvX[" << j <<
"][" << k <<
"][" << i <<
"] = "
962 << scientific << setw(10) << LslvX[j][k][i];
963 cout <<
" RslvX[" << j <<
"][" << k <<
"][" << i <<
"] = "
964 << scientific << setw(10) << RslvX[j][k][i] << endl;
966 if (max(norm(LsvlX[j][k][i]),norm(RsvlX[j][k][i])) > 1e-6) {
968 cout <<
" LsvlX[" << j <<
"][" << k <<
"][" << i <<
"] = "
969 << scientific << setw(10) << LsvlX[j][k][i];
970 cout <<
" RsvlX[" << j <<
"][" << k <<
"][" << i <<
"] = "
971 << scientific << setw(10) << RsvlX[j][k][i] << endl;
980 LHtensor3Block<3> rvlle(slhaPtr->rvlamlle);
982 LHtensor3Block<3> rvlqd(slhaPtr->rvlamlqd);
984 LHtensor3Block<3> rvudd(slhaPtr->rvlamudd);
993 for(
int i=1;i<=3;i++){
994 for(
int j=i;j<=3;j++){
996 for(
int k=1;k<=3;k++){
998 rvLLE[i][j][k] = 0.0;
1000 rvLLE[i][j][k] = rvlle(i,j,k);
1001 rvLLE[j][i][k] = -rvlle(i,j,k);
1010 for(
int i=1;i<=3;i++){
1011 for(
int j=1;j<=3;j++){
1012 for(
int k=1;k<=3;k++){
1013 rvLQD[i][j][k] = rvlqd(i,j,k);
1023 for(
int i=1;i<=3;i++){
1024 for(
int j=i;j<=3;j++){
1025 for(
int k=1;k<=3;k++){
1027 rvUDD[k][i][j] = 0.0;
1029 rvUDD[k][i][j] = rvudd(k,i,j);
1030 rvUDD[k][j][i] = -rvudd(k,i,j);
1038 for(
int i=1;i<=3;i++){
1039 for(
int j=1;j<=3;j++){
1040 for(
int k=1;k<=3;k++){
1042 cout<<
"LambdaLLE["<<i<<
"]["<<j<<
"]["<<k<<
"]="<<rvLLE[i][j][k]<<
" ";
1044 cout<<
"LambdaLQD["<<i<<
"]["<<j<<
"]["<<k<<
"]="<<rvLQD[i][j][k]<<
" ";
1046 cout<<
"LambdaUDD["<<i<<
"]["<<j<<
"]["<<k<<
"]="<<rvUDD[i][j][k]
1054 for(
int i=1;i<=6;i++){
1055 for(
int j=1;j<=3;j++){
1056 Rusq[i][j] = complex(Ru(i,j), imRu(i,j) );
1057 Rusq[i][j+3] = complex(Ru(i,j+3),imRu(i,j+3));
1058 Rdsq[i][j] = complex(Rd(i,j), imRd(i,j) );
1059 Rdsq[i][j+3] = complex(Rd(i,j+3),imRd(i,j+3));
1065 for(
int i=1;i<=6;i++){
1066 for(
int j=1;j<=6;j++){
1067 cout << real(Rusq[i][j])<<
" ";
1072 for(
int i=1;i<=6;i++){
1073 for(
int j=1;j<=6;j++){
1074 cout << real(Rdsq[i][j])<<
" ";
1088 int CoupSUSY::idNeut(
int idChi) {
1091 if (idChi == 1)
id = 1000022;
1092 else if (idChi == 2)
id = 1000023;
1093 else if (idChi == 3)
id = 1000025;
1094 else if (idChi == 4)
id = 1000035;
1095 else if (idChi == 5)
id = 1000045;
1103 int CoupSUSY::idChar(
int idChi) {
1106 if (idChi == 1)
id = 1000024;
1107 else if (idChi == -1)
id = -1000024;
1108 else if (idChi == 2)
id = 1000037;
1109 else if (idChi == -2)
id = -1000037;
1117 int CoupSUSY::idSup(
int iSup) {
1120 int sgn = ( iSup > 0 ) ? 1 : -1;
1122 if (iSup == 1)
id = 1000002;
1123 else if (iSup == 2)
id = 1000004;
1124 else if (iSup == 3)
id = 1000006;
1125 else if (iSup == 4)
id = 2000002;
1126 else if (iSup == 5)
id = 2000004;
1127 else if (iSup == 6)
id = 2000006;
1135 int CoupSUSY::idSdown(
int iSdown) {
1138 int sgn = ( iSdown > 0 ) ? 1 : -1;
1139 iSdown = abs(iSdown);
1140 if (iSdown == 1)
id = 1000001;
1141 else if (iSdown == 2)
id = 1000003;
1142 else if (iSdown == 3)
id = 1000005;
1143 else if (iSdown == 4)
id = 2000001;
1144 else if (iSdown == 5)
id = 2000003;
1145 else if (iSdown == 6)
id = 2000005;
1153 int CoupSUSY::idSlep(
int iSlep) {
1156 int sgn = ( iSlep > 0 ) ? 1 : -1;
1158 if (iSlep == 1)
id = 1000011;
1159 else if (iSlep == 2)
id = 1000013;
1160 else if (iSlep == 3)
id = 1000015;
1161 else if (iSlep == 4)
id = 2000011;
1162 else if (iSlep == 5)
id = 2000013;
1163 else if (iSlep == 6)
id = 2000015;
1171 int CoupSUSY::typeNeut(
int idPDG) {
1173 int idAbs = abs(idPDG);
1174 if(idAbs == 1000022) type = 1;
1175 else if(idAbs == 1000023) type = 2;
1176 else if(idAbs == 1000025) type = 3;
1177 else if(idAbs == 1000035) type = 4;
1178 else if(isNMSSM && idAbs == 1000045) type = 5;
1187 int CoupSUSY::typeChar(
int idPDG) {
1189 if(abs(idPDG) == 1000024) type = 1;
1190 else if (abs(idPDG) == 1000037)type = 2;