10 #include "SusyCouplings.h"
24 const bool CoupSUSY::DEBUG =
false;
30 void CoupSUSY::initSUSY (SusyLesHouches* slhaPtrIn, Settings* settingsPtrIn,
31 ParticleData* particleDataPtrIn) {
35 settingsPtr = settingsPtrIn;
36 particleDataPtr = particleDataPtrIn;
39 if (!slhaPtr->modsel.exists())
return;
42 isNMSSM = (slhaPtr->modsel(3) != 1 ?
false :
true);
43 settingsPtr->flag(
"SLHA:NMSSM",isNMSSM);
44 int nNeut = (isNMSSM ? 5 : 4);
48 mZpole = particleDataPtr->m0(23);
49 wZpole = particleDataPtr->mWidth(23);
50 mWpole = particleDataPtr->m0(24);
51 wWpole = particleDataPtr->mWidth(24);
59 if (settingsPtr->mode(
"SUSY:sin2thetaWMode") == 3) {
62 sin2W = 1.0 - pow(mW/mZ,2);
63 }
else if (settingsPtr->mode(
"SUSY:sin2thetaWMode") == 2){
66 if(slhaPtr->gauge.exists(1) && slhaPtr->gauge.exists(2)
67 && slhaPtr->hmix.exists(3)) {
68 double gp=slhaPtr->gauge(1);
69 double g =slhaPtr->gauge(2);
70 double v =slhaPtr->hmix(3);
72 mZ = sqrt(pow(gp,2)+pow(g,2)) * v / 2.0;
75 sin2W = pow2(gp)/(pow2(g)+pow2(gp));
77 slhaPtr->message(1,
"initSUSY",
78 "Block GAUGE not found or incomplete; using sin(thetaW) at mZ");
86 cosW = sqrt(1.0-sin2W);
91 if(slhaPtr->hmix.exists(2))
92 tanb = slhaPtr->hmix(2);
95 slhaPtr->message(1,
"initSUSY",
96 "Block HMIX not found or incomplete; using MINPAR tan(beta)");
98 cosb = sqrt( 1.0 / (1.0 + tanb*tanb) );
99 sinb = sqrt(max(0.0,1.0-cosb*cosb));
103 cout <<
" sin2W(Q) = " << sin2W <<
" mW(Q) = " << mW
104 <<
" mZ(Q) = " << mZ << endl;
105 cout <<
" vev(Q) = " << slhaPtr->hmix(3) <<
" tanb(Q) = " << tanb
107 for (
int i=1;i<=3;i++) {
108 for (
int j=1;j<=3;j++) {
109 cout <<
" VCKM [" << i <<
"][" << j <<
"] = "
110 << scientific << setw(10) << VCKMgen(i,j) << endl;
116 if(slhaPtr->alpha.exists()) {
117 alphaHiggs = slhaPtr->alpha();
120 else if (slhaPtr->modsel(4) == 1) {
121 alphaHiggs = asin(slhaPtr->rvhmix(1,2));
122 slhaPtr->message(0,
"initSUSY",
"Extracting angle alpha from RVHMIX");
124 slhaPtr->message(1,
"initSUSY",
"Block ALPHA not found; using alpha = beta.");
126 alphaHiggs = atan(tanb);
129 if(slhaPtr->hmix.exists(1) && slhaPtr->hmix.exists(4)){
130 muHiggs = slhaPtr->hmix(1);
131 mAHiggs = sqrt(slhaPtr->hmix(4));
133 slhaPtr->message(1,
"initSUSY",
134 "Block HMIX not found or incomplete; setting mu = mA = 0.");
140 LHmatrixBlock<6> Ru(slhaPtr->usqmix);
141 LHmatrixBlock<6> Rd(slhaPtr->dsqmix);
142 LHmatrixBlock<6> imRu(slhaPtr->imusqmix);
143 LHmatrixBlock<6> imRd(slhaPtr->imdsqmix);
146 for (
int i=1; i<=6; i++) {
147 for (
int j=1; j<=3; j++) {
148 LsddG[i][j] = complex( Rd(i,j) , imRd(i,j));
149 RsddG[i][j] = complex(-Rd(i,j+3), -imRd(i,j+3));
150 LsuuG[i][j] = complex( Ru(i,j) , imRu(i,j));
151 RsuuG[i][j] = complex(-Ru(i,j+3), -imRu(i,j+3));
154 cout <<
" Lsddg [" << i <<
"][" << j <<
"] = "
155 << scientific << setw(10) << LsddG[i][j]
156 <<
" RsddG [" << i <<
"][" << j <<
"] = "
157 << scientific << setw(10) << RsddG[i][j] << endl;
158 cout <<
" Lsuug [" << i <<
"][" << j <<
"] = "
159 << scientific << setw(10) << LsuuG[i][j]
160 <<
" RsuuG [" << i <<
"][" << j <<
"] = "
161 << scientific << setw(10) << RsuuG[i][j] << endl;
167 for (
int i=1 ; i<=6 ; i++) {
170 LqqZ[i] = af(i) - 2.0*ef(i)*sin2W ;
171 RqqZ[i] = - 2.0*ef(i)*sin2W ;
175 cout <<
" LqqZ [" << i <<
"][" << i <<
"] = "
176 << scientific << setw(10) << LqqZ[i]
177 <<
" RqqZ [" << i <<
"][" << i <<
"] = "
178 << scientific << setw(10) << RqqZ[i] << endl;
183 for (
int i=1 ; i<=6 ; i++) {
186 for (
int j=1 ; j<=6 ; j++) {
191 for (
int k=1;k<=3;k++) {
192 complex Rdik = complex(Rd(i,k), imRd(i,k) );
193 complex Rdjk = complex(Rd(j,k), imRd(j,k) );
194 complex Rdik3 = complex(Rd(i,k+3),imRd(i,k+3));
195 complex Rdjk3 = complex(Rd(j,k+3),imRd(j,k+3));
196 LsdsdZ[i][j] += LqqZ[1] * (Rdik*conj(Rdjk));
197 RsdsdZ[i][j] += RqqZ[1] * (Rdik3*conj(Rdjk3));
203 for (
int k=1;k<=3;k++) {
204 complex Ruik = complex(Ru(i,k) ,imRu(i,k) );
205 complex Rujk = complex(Ru(j,k) ,imRu(j,k) );
206 complex Ruik3 = complex(Ru(i,k+3),imRu(i,k+3));
207 complex Rujk3 = complex(Ru(j,k+3),imRu(j,k+3));
208 LsusuZ[i][j] += LqqZ[2] * (Ruik*conj(Rujk));
209 RsusuZ[i][j] += RqqZ[2] * (Ruik3*conj(Rujk3));
214 if (max(abs(LsdsdZ[i][j]),abs(RsdsdZ[i][j])) > 1e-6) {
215 cout <<
" LsdsdZ[" << i <<
"][" << j <<
"] = "
216 << scientific << setw(10) << LsdsdZ[i][j]
217 <<
" RsdsdZ[" << i <<
"][" << j <<
"] = "
218 << scientific << setw(10) << RsdsdZ[i][j] << endl;
220 if (max(abs(LsusuZ[i][j]),abs(RsusuZ[i][j]))> 1e-6) {
221 cout <<
" LsusuZ[" << i <<
"][" << j <<
"] = "
222 << scientific << setw(10) << LsusuZ[i][j]
223 <<
" RsusuZ[" << i <<
"][" << j <<
"] = "
224 << scientific << setw(10) << RsusuZ[i][j] << endl;
230 LHmatrixBlock<6> Rsl(slhaPtr->selmix);
231 LHmatrixBlock<3> Rsv(slhaPtr->snumix);
238 if (slhaPtr->modsel(4) >= 1 && slhaPtr->rvlmix.exists()) {
239 for (
int i=1; i<=6; ++i)
240 for (
int j=1; j<=6; ++j)
241 Rsl.set(i,j,slhaPtr->rvlmix(i+1,j+2));
243 bool hasCrossTerms =
false;
244 for (
int i=2; i<=7; ++i)
245 for (
int j=1; j<=2; ++j)
246 if (abs(slhaPtr->rvlmix(i,j)) > 1e-5) {
247 hasCrossTerms =
true;
251 slhaPtr->message(0,
"initSUSY",
252 "Note: slepton-Higgs mixing not supported in PYTHIA");
256 if (slhaPtr->modsel(4) >= 1 && slhaPtr->rvhmix.exists()) {
257 for (
int i=1; i<=3; ++i)
258 for (
int j=1; j<=3; ++j)
259 Rsv.set(i,j,slhaPtr->rvhmix(i+2,j+2));
261 bool hasCrossTerms =
false;
262 for (
int i=3; i<=7; ++i)
263 for (
int j=1; j<=2; ++j)
264 if (abs(slhaPtr->rvhmix(i,j)) > 1e-5) {
265 hasCrossTerms =
true;
269 slhaPtr->message(0,
"initSUSY",
270 "Note: sneutrino-Higgs mixing not supported in PYTHIA");
274 for (
int i=11 ; i<=16 ; i++) {
276 LllZ[i-10] = af(i) - 2.0*ef(i)*sin2W ;
277 RllZ[i-10] = - 2.0*ef(i)*sin2W ;
281 cout <<
" LllZ [" << i-10 <<
"][" << i-10 <<
"] = "
282 << scientific << setw(10) << LllZ[i-10]
283 <<
" RllZ [" << i-10 <<
"][" << i-10 <<
"] = "
284 << scientific << setw(10) << RllZ[i-10] << endl;
290 for(
int i=1;i<=6;i++){
291 for(
int j=1;j<=6;j++){
295 for (
int k=1;k<=3;k++) {
296 LsdsdZ[i][j] += LllZ[1] * Rsl(i,k) * Rsl(j,k);
297 RsdsdZ[i][j] += RllZ[1] * Rsl(i,k+3) * Rsl(j,k+3);
303 for (
int k=1;k<=3;k++)
304 LsusuZ[i][j] += LllZ[2] * Rsv(i,k)*Rsv(j,k);
308 for(
int i=1;i<=6;i++){
309 for(
int j=1;j<=6;j++){
311 if (max(abs(LsvsvZ[i][j]),abs(RsvsvZ[i][j])) > 1e-6) {
312 cout <<
" LsvsvZ[" << i <<
"][" << j <<
"] = "
313 << scientific << setw(10) << LsvsvZ[i][j]
314 <<
" RsvsvZ[" << i <<
"][" << j <<
"] = "
315 << scientific << setw(10) << RsvsvZ[i][j] << endl;
317 if (max(abs(LslslZ[i][j]),abs(RslslZ[i][j]))> 1e-6) {
318 cout <<
" LslslZ[" << i <<
"][" << j <<
"] = "
319 << scientific << setw(10) << LslslZ[i][j]
320 <<
" RslslZ[" << i <<
"][" << j <<
"] = "
321 << scientific << setw(10) << RslslZ[i][j] << endl;
329 for (
int i=1;i<=3;i++) {
330 for (
int j=1;j<=3;j++) {
335 complex Vij=VCKMgen(i,j);
336 if (slhaPtr->vckm.exists()) {
337 Vij=complex(slhaPtr->vckm(i,j),slhaPtr->imvckm(i,j));
341 LudW[i][j] = sqrt(2.0) * cosW * Vij;
346 cout <<
" LudW [" << i <<
"][" << j <<
"] = "
347 << scientific << setw(10) << LudW[i][j]
348 <<
" RudW [" << i <<
"][" << j <<
"] = "
349 << scientific << setw(10) << RudW[i][j] << endl;
357 for (
int k=1;k<=6;k++) {
358 for (
int l=1;l<=6;l++) {
364 for (
int i=1;i<=3;i++) {
365 for (
int j=1;j<=3;j++) {
370 complex Vij=VCKMgen(i,j);
371 if (slhaPtr->vckm.exists()) {
372 Vij=complex(slhaPtr->vckm(i,j),slhaPtr->imvckm(i,j));
376 complex Ruki = complex(Ru(k,i),imRu(k,i));
377 complex Rdlj = complex(Rd(l,j),imRd(l,j));
378 LsusdW[k][l] += sqrt(2.0) * cosW * Vij * Ruki * conj(Rdlj);
386 if (max(abs(LsusdW[k][l]),abs(RsusdW[k][l]))> 1e-6) {
387 cout <<
" LsusdW[" << k <<
"][" << l <<
"] = "
388 << scientific << setw(10) << LsusdW[k][l]
389 <<
" RsusdW[" << k <<
"][" << l <<
"] = "
390 << scientific << setw(10) << RsusdW[k][l] << endl;
400 for (
int i=1;i<=3;i++){
401 LlvW[i] = sqrt(2.0) * cosW;
406 cout <<
" LlvW [" << i <<
"] = "
407 << scientific << setw(10) << LlvW[i]
408 <<
" RlvW [" << i <<
"] = "
409 << scientific << setw(10) << RlvW[i] << endl;
414 for (
int k=1;k<=6;k++) {
415 for (
int l=1;l<=6;l++) {
420 for(
int i=1;i<=3;i++)
421 LslsvW[k][l] += sqrt(2.0) * cosW * Rsl(k,i) * Rsl(l,i);
426 cout <<
" LslsvW [" << k <<
"][" << l <<
"] = "
427 << scientific << setw(10) << LslsvW[k][l]
428 <<
" RslsvW [" << k <<
"][" << l <<
"] = "
429 << scientific << setw(10) << RslsvW[k][l] << endl;
437 if (slhaPtr->modsel(4) >= 1 && slhaPtr->rvnmix.exists()) {
438 bool hasCrossTerms =
false;
439 for (
int i=1; i<=3; ++i)
440 for (
int j=4; j<=7; ++j)
441 if (abs(slhaPtr->rvnmix(i,j)) > 1e-5) {
442 hasCrossTerms =
true;
446 slhaPtr->message(1,
"initSUSY",
447 "Neutrino-Neutralino mixing not supported!");
451 for (
int i=1;i<=nNeut;i++) {
454 complex ni1,ni2,ni3,ni4,ni5;
457 if (slhaPtr->modsel(4) >= 1 && slhaPtr->rvnmix.exists()) {
458 ni1=complex( slhaPtr->rvnmix(i+3,4), 0.0 );
459 ni2=complex( slhaPtr->rvnmix(i+3,5), 0.0 );
460 ni3=complex( slhaPtr->rvnmix(i+3,6), 0.0 );
461 ni4=complex( slhaPtr->rvnmix(i+3,7), 0.0 );
462 ni5=complex( 0.0, 0.0);
464 else if (not isNMSSM) {
465 ni1=complex( slhaPtr->nmix(i,1), slhaPtr->imnmix(i,1) );
466 ni2=complex( slhaPtr->nmix(i,2), slhaPtr->imnmix(i,2) );
467 ni3=complex( slhaPtr->nmix(i,3), slhaPtr->imnmix(i,3) );
468 ni4=complex( slhaPtr->nmix(i,4), slhaPtr->imnmix(i,4) );
469 ni5=complex( 0.0, 0.0);
471 ni1=complex( slhaPtr->nmnmix(i,1), slhaPtr->imnmnmix(i,1) );
472 ni2=complex( slhaPtr->nmnmix(i,2), slhaPtr->imnmnmix(i,2) );
473 ni3=complex( slhaPtr->nmnmix(i,3), slhaPtr->imnmnmix(i,3) );
474 ni4=complex( slhaPtr->nmnmix(i,4), slhaPtr->imnmnmix(i,4) );
475 ni5=complex( slhaPtr->nmnmix(i,5), slhaPtr->imnmnmix(i,5) );
479 complex iRot( 0., 1.);
480 if (slhaPtr->mass(idNeut(i)) < 0.) {
489 for (
int j=1; j<=nNeut; j++) {
493 if (slhaPtr->modsel(4) >= 1 && slhaPtr->rvnmix.exists()) {
494 nj3=complex( slhaPtr->rvnmix(i+3,6), 0.0 );
495 nj4=complex( slhaPtr->rvnmix(i+3,7), 0.0 );
497 else if (not isNMSSM) {
498 nj3=complex( slhaPtr->nmix(j,3), slhaPtr->imnmix(j,3) );
499 nj4=complex( slhaPtr->nmix(j,4), slhaPtr->imnmix(j,4) );
501 nj3=complex( slhaPtr->nmnmix(j,3), slhaPtr->imnmnmix(j,3) );
502 nj4=complex( slhaPtr->nmnmix(j,4), slhaPtr->imnmnmix(j,4) );
505 if (slhaPtr->mass(idNeut(j)) < 0.) {
511 OLpp[i][j] = -0.5 * ni3 * conj(nj3) + 0.5 * ni4 * conj(nj4);
512 ORpp[i][j] = 0.5 * conj(ni3) * nj3 - 0.5 * conj(ni4) * nj4;
516 cout <<
" OL'' [" << i <<
"][" << j <<
"] = "
517 << scientific << setw(10) << OLpp[i][j]
518 <<
" OR'' [" << i <<
"][" << j <<
"] = "
519 << scientific << setw(10) << ORpp[i][j] << endl;
525 for (
int j=1; j<=nChar; j++) {
528 complex uj1, uj2, vj1, vj2;
529 if (slhaPtr->modsel(4)<1 || not slhaPtr->rvumix.exists()) {
530 uj1=complex( slhaPtr->umix(j,1), slhaPtr->imumix(j,1) );
531 uj2=complex( slhaPtr->umix(j,2), slhaPtr->imumix(j,2) );
532 vj1=complex( slhaPtr->vmix(j,1), slhaPtr->imvmix(j,1) );
533 vj2=complex( slhaPtr->vmix(j,2), slhaPtr->imvmix(j,2) );
537 uj1=complex( slhaPtr->rvumix(j+3,4), 0.0 );
538 uj2=complex( slhaPtr->rvumix(j+3,5), 0.0 );
539 vj1=complex( slhaPtr->rvvmix(j+3,4), 0.0 );
540 vj2=complex( slhaPtr->rvvmix(j+3,5), 0.0 );
544 OL[i][j] = -1.0/sqrt(2.0)*ni4*conj(vj2)+ni2*conj(vj1);
545 OR[i][j] = 1.0/sqrt(2.0)*conj(ni3)*uj2+conj(ni2)*uj1;
549 cout <<
" OL [" << i <<
"][" << j <<
"] = "
550 << scientific << setw(10) << OL[i][j]
551 <<
" OR [" << i <<
"][" << j <<
"] = "
552 << scientific << setw(10) << OR[i][j] << endl;
559 double ed = -1.0/3.0;
565 for (
int k=1;k<=3;k++) {
569 double mu = particleDataPtr->m0(2*k);
570 double md = particleDataPtr->m0(2*k-1);
571 if (k == 1) { mu=0.0 ; md=0.0; }
572 if (k == 2) { md=0.0 ; mu=0.0; }
575 if (slhaPtr->yd.exists() && slhaPtr->hmix.exists(3)) {
576 double ykk=slhaPtr->yd(k,k);
577 double v1=slhaPtr->hmix(3)/sqrt(1+pow(tanb,2));
578 if (ykk > 0.0) md = ykk * v1 / sqrt(2.0) ;
580 if (slhaPtr->yu.exists() && slhaPtr->hmix.exists(3)) {
581 double ykk=slhaPtr->yu(k,k);
582 double v2=slhaPtr->hmix(3)/sqrt(1.0+1.0/pow(tanb,2));
583 if (ykk > 0.0) mu = ykk * v2 / sqrt(2.0) ;
588 cout <<
" Gen = " << k <<
" mu = " << mu <<
" md = " << md
589 <<
" yUU,DD = " << slhaPtr->yu(k,k) <<
","
590 << slhaPtr->yd(k,k) << endl;
594 for (
int j=1;j<=6;j++) {
597 complex Rdjk = complex(Rd(j,k), imRd(j,k) );
598 complex Rdjk3 = complex(Rd(j,k+3),imRd(j,k+3));
599 complex Rujk = complex(Ru(j,k), imRu(j,k) );
600 complex Rujk3 = complex(Ru(j,k+3),imRu(j,k+3));
604 LsddX[j][k][i] = ((ed-T3d)*sinW*ni1 + T3d*cosW*ni2)*conj(Rdjk)
605 + md*cosW*ni3*conj(Rdjk3)/2.0/mW/cosb;
606 RsddX[j][k][i] = -ed*sinW*conj(ni1)*conj(Rdjk3)
607 + md*cosW*conj(ni3)*conj(Rdjk)/2.0/mW/cosb;
610 LsuuX[j][k][i] = ((eu-T3u)*sinW*ni1 + T3u*cosW*ni2)*conj(Rujk)
611 + mu*cosW*ni4*conj(Rujk3)/2.0/mW/sinb;
612 RsuuX[j][k][i] = -eu*sinW*conj(ni1)*conj(Rujk3)
613 + mu*cosW*conj(ni4)*conj(Rujk)/2.0/mW/sinb;
616 if (abs(LsddX[j][k][i]) > 1e-6) {
618 cout <<
" LsddX[" << j <<
"][" << k <<
"][" << i <<
"] = "
619 << scientific << setw(10) << LsddX[j][k][i] << endl;
621 if (abs(RsddX[j][k][i]) > 1e-6) {
623 cout <<
" RsddX[" << j <<
"][" << k <<
"][" << i <<
"] = "
624 << scientific << setw(10) << RsddX[j][k][i] << endl;
626 if (abs(LsuuX[j][k][i]) > 1e-6) {
628 cout <<
" LsuuX[" << j <<
"][" << k <<
"][" << i <<
"] = "
629 << scientific << setw(10) << LsuuX[j][k][i] << endl;
631 if (abs(RsuuX[j][k][i]) > 1e-6) {
633 cout <<
" RsuuX[" << j <<
"][" << k <<
"][" << i <<
"] = "
634 << scientific << setw(10) << RsuuX[j][k][i] << endl;
648 for (
int k=1;k<=3;k++) {
651 if(k==3) ml = particleDataPtr->m0(15);
653 for(
int j=1;j<=6;j++){
661 LsllX[j][k][i] = ((el-T3l)*sinW*ni1 + T3l*cosW*ni2)*Rsl(j,k)
662 + ml*cosW*ni3/2.0/mW/cosb*Rsl(j,k+3);
663 RsllX[j][k][i] = -el*sinW*conj(ni1)*Rsl(j,k+3)
664 + ml*cosW*conj(ni3)/2.0/mW/cosb*Rsl(j,k);
669 LsvvX[j][k][i] = ((ev-T3v)*sinW*ni1 + T3v*cosW*ni2);
673 if (abs(LsllX[j][k][i]) > 1e-6) {
675 cout <<
" LsllX[" << j <<
"][" << k <<
"][" << i <<
"] = "
676 << scientific << setw(10) << LsllX[j][k][i] << endl;
678 if (abs(RsllX[j][k][i]) > 1e-6) {
680 cout <<
" RsllX[" << j <<
"][" << k <<
"][" << i <<
"] = "
681 << scientific << setw(10) << RsllX[j][k][i] << endl;
683 if (abs(LsvvX[j][k][i]) > 1e-6) {
685 cout <<
" LsvvX[" << j <<
"][" << k <<
"][" << i <<
"] = "
686 << scientific << setw(10) << LsvvX[j][k][i] << endl;
694 if (slhaPtr->modsel(4) >= 1 && slhaPtr->rvumix.exists()) {
695 bool hasCrossTerms =
false;
696 for (
int i=1; i<=3; ++i)
697 for (
int j=4; j<=5; ++j)
698 if (abs(slhaPtr->rvumix(i,j)) > 1e-5
699 || abs(slhaPtr->rvvmix(i,j)) > 1e-5) {
700 hasCrossTerms =
true;
704 slhaPtr->message(1,
"initSUSY",
705 "Lepton-Chargino mixing not supported!");
710 double rt2 = sqrt(2.0);
712 for (
int i=1;i<=nChar;i++) {
715 complex ui1,ui2,vi1,vi2;
716 ui1=complex( slhaPtr->umix(i,1), slhaPtr->imumix(i,1) );
717 ui2=complex( slhaPtr->umix(i,2), slhaPtr->imumix(i,2) );
718 vi1=complex( slhaPtr->vmix(i,1), slhaPtr->imvmix(i,1) );
719 vi2=complex( slhaPtr->vmix(i,2), slhaPtr->imvmix(i,2) );
722 for (
int j=1; j<=nChar; j++) {
725 complex uj1, uj2, vj1, vj2;
726 uj1=complex( slhaPtr->umix(j,1), slhaPtr->imumix(j,1) );
727 uj2=complex( slhaPtr->umix(j,2), slhaPtr->imumix(j,2) );
728 vj1=complex( slhaPtr->vmix(j,1), slhaPtr->imvmix(j,1) );
729 vj2=complex( slhaPtr->vmix(j,2), slhaPtr->imvmix(j,2) );
732 OLp[i][j] = -vi1*conj(vj1) - 0.5*vi2*conj(vj2)
733 + ( (i == j) ? sin2W : 0.0);
734 ORp[i][j] = -conj(ui1)*uj1 - 0.5*conj(ui2)*uj2
735 + ( (i == j) ? sin2W : 0.0);
739 cout <<
" OL' [" << i <<
"][" << j <<
"] = "
740 << scientific << setw(10) << OLp[i][j]
741 <<
" OR' [" << i <<
"][" << j <<
"] = "
742 << scientific << setw(10) << ORp[i][j] << endl;
747 for (
int l=1;l<=3;l++) {
751 double mul = particleDataPtr->m0(2*l);
752 double mdl = particleDataPtr->m0(2*l-1);
753 if (l == 1 || l == 2) { mul=0.0 ; mdl=0.0; }
756 if (slhaPtr->yd.exists() && slhaPtr->hmix.exists(3)) {
757 double yll=slhaPtr->yd(l,l);
758 double v1=slhaPtr->hmix(3)/sqrt(1+pow(tanb,2));
759 if (yll > 0.0) mdl = yll * v1 / sqrt(2.0) ;
761 if (slhaPtr->yu.exists() && slhaPtr->hmix.exists(3)) {
762 double yll=slhaPtr->yu(l,l);
763 double v2=slhaPtr->hmix(3)/sqrt(1.0+1.0/pow(tanb,2));
764 if (yll > 0.0) mul = yll * v2 / sqrt(2.0) ;
768 for (
int j=1;j<=6;j++) {
771 for (
int k=1;k<=3;k++) {
775 double muk = particleDataPtr->m0(2*k);
776 double mdk = particleDataPtr->m0(2*k-1);
777 if (k == 1) { muk=0.0 ; mdk=0.0; }
778 if (k == 2) { mdk=0.0 ; muk=0.0; }
781 if (slhaPtr->yd.exists() && slhaPtr->hmix.exists(3)) {
782 double ykk=slhaPtr->yd(k,k);
783 double v1=slhaPtr->hmix(3)/sqrt(1+pow(tanb,2));
784 if (ykk > 0.0) mdk = ykk * v1 / sqrt(2.0) ;
786 if (slhaPtr->yu.exists() && slhaPtr->hmix.exists(3)) {
787 double ykk=slhaPtr->yu(k,k);
788 double v2=slhaPtr->hmix(3)/sqrt(1.0+1.0/pow(tanb,2));
789 if (ykk > 0.0) muk = ykk * v2 / sqrt(2.0) ;
795 complex Vlk=VCKMgen(l,k);
796 complex Vkl=VCKMgen(k,l);
797 if (slhaPtr->vckm.exists()) {
798 Vlk=complex(slhaPtr->vckm(l,k),slhaPtr->imvckm(l,k));
799 Vkl=complex(slhaPtr->vckm(k,l),slhaPtr->imvckm(k,l));
803 complex Rdjk = complex(Rd(j,k), imRd(j,k) );
804 complex Rdjk3 = complex(Rd(j,k+3),imRd(j,k+3));
805 complex Rujk = complex(Ru(j,k), imRu(j,k) );
806 complex Rujk3 = complex(Ru(j,k+3),imRu(j,k+3));
810 LsduX[j][l][i] += (ui1*conj(Rdjk)
811 - mdk*ui2*conj(Rdjk3)/rt2/mW/cosb)*Vlk;
812 RsduX[j][l][i] -= mul*conj(vi2)*Vlk*conj(Rdjk)/rt2/mW/sinb;
815 LsudX[j][l][i] += (conj(vi1)*Rujk
816 - muk*conj(vi2)*Rujk3/rt2/mW/sinb)*Vkl;
817 RsudX[j][l][i] -= mdl*ui2*Vkl*Rujk/rt2/mW/cosb;
822 if (max(abs(LsduX[j][l][i]),abs(RsduX[j][l][i])) > 1e-6) {
824 cout <<
" LsduX[" << j <<
"][" << l <<
"][" << i <<
"] = "
825 << scientific << setw(10) << LsduX[j][l][i];
826 cout <<
" RsduX[" << j <<
"][" << l <<
"][" << i <<
"] = "
827 << scientific << setw(10) << RsduX[j][l][i] << endl;
829 if (max(abs(LsudX[j][l][i]),abs(RsudX[j][l][i])) > 1e-6) {
831 cout <<
" LsudX[" << j <<
"][" << l <<
"][" << i <<
"] = "
832 << scientific << setw(10) << LsudX[j][l][i];
833 cout <<
" RsudX[" << j <<
"][" << l <<
"][" << i <<
"] = "
834 << scientific << setw(10) << RsudX[j][l][i] << endl;
841 for (
int j=1;j<=6;j++) {
842 for (
int k=1;k<=3;k++) {
844 LslvX[j][k][i] = 0.0;
845 RslvX[j][k][i] = 0.0;
846 LsvlX[j][k][i] = 0.0;
847 RsvlX[j][k][i] = 0.0;
851 if (k == 3) ml = particleDataPtr->m0(15);
856 LslvX[j][k][i] += ui1- ml*ui2/rt2/mW/cosb;
857 RslvX[j][k][i] -= ml*conj(vi2)/rt2/mW/sinb;
861 LsvlX[j][k][i] += conj(vi1) - ml*conj(vi2)/rt2/mW/sinb;
866 if (max(abs(LslvX[j][k][i]),abs(RslvX[j][k][i])) > 1e-6) {
868 cout <<
" LslvX[" << j <<
"][" << k <<
"][" << i <<
"] = "
869 << scientific << setw(10) << LslvX[j][k][i];
870 cout <<
" RslvX[" << j <<
"][" << k <<
"][" << i <<
"] = "
871 << scientific << setw(10) << RslvX[j][k][i] << endl;
873 if (max(abs(LsvlX[j][k][i]),abs(RsvlX[j][k][i])) > 1e-6) {
875 cout <<
" LsvlX[" << j <<
"][" << k <<
"][" << i <<
"] = "
876 << scientific << setw(10) << LsvlX[j][k][i];
877 cout <<
" RsvlX[" << j <<
"][" << k <<
"][" << i <<
"] = "
878 << scientific << setw(10) << RsvlX[j][k][i] << endl;
887 bool orderedQ =
true;
888 bool orderedL =
true;
889 for (
int j=1;j<=5;j++) {
890 if (particleDataPtr->m0(idSlep(j+1)) < particleDataPtr->m0(idSlep(j)))
892 if (particleDataPtr->m0(idSup(j+1)) < particleDataPtr->m0(idSup(j)))
894 if (particleDataPtr->m0(idSdown(j+1)) <particleDataPtr->m0(idSdown(j)))
899 for (
int i=1;i<=6;i++) {
902 string uName =
"~u_"+indx.str();
903 string dName =
"~d_"+indx.str();
904 string lName =
"~e_"+indx.str();
905 ParticleDataEntry* pdePtr;
907 pdePtr = particleDataPtr->particleDataEntryPtr(idSup(i));
908 pdePtr->setNames(uName,uName+
"bar");
909 pdePtr = particleDataPtr->particleDataEntryPtr(idSdown(i));
910 pdePtr->setNames(dName,dName+
"bar");
913 pdePtr = particleDataPtr->particleDataEntryPtr(idSlep(i));
914 pdePtr->setNames(lName,lName+
"bar");
920 LHtensor3Block<3> rvlle(slhaPtr->rvlamlle);
922 LHtensor3Block<3> rvlqd(slhaPtr->rvlamlqd);
924 LHtensor3Block<3> rvudd(slhaPtr->rvlamudd);
933 for(
int i=1;i<=3;i++){
934 for(
int j=i;j<=3;j++){
936 for(
int k=1;k<=3;k++){
938 rvLLE[i][j][k] = 0.0;
940 rvLLE[i][j][k] = rvlle(i,j,k);
941 rvLLE[j][i][k] = -rvlle(i,j,k);
950 for(
int i=1;i<=3;i++){
951 for(
int j=1;j<=3;j++){
952 for(
int k=1;k<=3;k++){
953 rvLQD[i][j][k] = rvlqd(i,j,k);
963 for(
int i=1;i<=3;i++){
964 for(
int j=i;j<=3;j++){
965 for(
int k=1;k<=3;k++){
967 rvUDD[k][i][j] = 0.0;
969 rvUDD[k][i][j] = rvudd(k,i,j);
970 rvUDD[k][j][i] = -rvudd(k,i,j);
978 for(
int i=1;i<=3;i++){
979 for(
int j=1;j<=3;j++){
980 for(
int k=1;k<=3;k++){
982 cout<<
"LambdaLLE["<<i<<
"]["<<j<<
"]["<<k<<
"]="<<rvLLE[i][j][k]<<
" ";
984 cout<<
"LambdaLQD["<<i<<
"]["<<j<<
"]["<<k<<
"]="<<rvLQD[i][j][k]<<
" ";
986 cout<<
"LambdaUDD["<<i<<
"]["<<j<<
"]["<<k<<
"]="<<rvUDD[i][j][k]
994 for(
int i=1;i<=6;i++){
995 for(
int j=1;j<=3;j++){
996 Rusq[i][j] = complex(Ru(i,j), imRu(i,j) );
997 Rusq[i][j+3] = complex(Ru(i,j+3),imRu(i,j+3));
998 Rdsq[i][j] = complex(Rd(i,j), imRd(i,j) );
999 Rdsq[i][j+3] = complex(Rd(i,j+3),imRd(i,j+3));
1005 for(
int i=1;i<=6;i++){
1006 for(
int j=1;j<=6;j++){
1007 cout << real(Rusq[i][j])<<
" ";
1012 for(
int i=1;i<=6;i++){
1013 for(
int j=1;j<=6;j++){
1014 cout << real(Rdsq[i][j])<<
" ";
1028 int CoupSUSY::idNeut(
int idChi) {
1031 if (idChi == 1)
id = 1000022;
1032 else if (idChi == 2)
id = 1000023;
1033 else if (idChi == 3)
id = 1000025;
1034 else if (idChi == 4)
id = 1000035;
1035 else if (idChi == 5)
id = 1000045;
1043 int CoupSUSY::idChar(
int idChi) {
1046 if (idChi == 1)
id = 1000024;
1047 else if (idChi == -1)
id = -1000024;
1048 else if (idChi == 2)
id = 1000037;
1049 else if (idChi == -2)
id = -1000037;
1057 int CoupSUSY::idSup(
int iSup) {
1060 int sgn = ( iSup > 0 ) ? 1 : -1;
1062 if (iSup == 1)
id = 1000002;
1063 else if (iSup == 2)
id = 1000004;
1064 else if (iSup == 3)
id = 1000006;
1065 else if (iSup == 4)
id = 2000002;
1066 else if (iSup == 5)
id = 2000004;
1067 else if (iSup == 6)
id = 2000006;
1075 int CoupSUSY::idSdown(
int iSdown) {
1078 int sgn = ( iSdown > 0 ) ? 1 : -1;
1079 iSdown = abs(iSdown);
1080 if (iSdown == 1)
id = 1000001;
1081 else if (iSdown == 2)
id = 1000003;
1082 else if (iSdown == 3)
id = 1000005;
1083 else if (iSdown == 4)
id = 2000001;
1084 else if (iSdown == 5)
id = 2000003;
1085 else if (iSdown == 6)
id = 2000005;
1093 int CoupSUSY::idSlep(
int iSlep) {
1096 int sgn = ( iSlep > 0 ) ? 1 : -1;
1098 if (iSlep == 1)
id = 1000011;
1099 else if (iSlep == 2)
id = 1000013;
1100 else if (iSlep == 3)
id = 1000015;
1101 else if (iSlep == 4)
id = 2000011;
1102 else if (iSlep == 5)
id = 2000013;
1103 else if (iSlep == 6)
id = 2000015;
1111 string CoupSUSY::getName(
int pdgCode) {
1114 int codeA = abs(pdgCode);
1115 int idSM = codeA % 1000000;
1124 if (codeA == idSM) {
1126 if (!slhaPtr->upmns.exists()) slha1=
true;
1127 if (codeA == 12) name = (slha1) ?
"nu_e" :
"nu_1";
1128 if (codeA == 14) name = (slha1) ?
"nu_mu" :
"nu_2";
1129 if (codeA == 16) name = (slha1) ?
"nu_tau" :
"nu_3";
1133 else if ( idSM <= 6) {
1135 if (idSM % 2 == 0) {
1137 if (slhaPtr->stopmix.exists()) slha1 =
true;
1138 if (codeA == 1000002) name = (slha1) ?
"~u_L" :
"~u_1";
1139 if (codeA == 1000004) name = (slha1) ?
"~c_L" :
"~u_2";
1140 if (codeA == 1000006) name = (slha1) ?
"~t_1" :
"~u_3";
1141 if (codeA == 2000002) name = (slha1) ?
"~u_R" :
"~u_4";
1142 if (codeA == 2000004) name = (slha1) ?
"~c_R" :
"~u_5";
1143 if (codeA == 2000006) name = (slha1) ?
"~t_2" :
"~u_6";
1148 if (slhaPtr->sbotmix.exists()) slha1 =
true;
1149 if (codeA == 1000001) name = (slha1) ?
"~d_L" :
"~d_1";
1150 if (codeA == 1000003) name = (slha1) ?
"~s_L" :
"~d_2";
1151 if (codeA == 1000005) name = (slha1) ?
"~b_1" :
"~d_3";
1152 if (codeA == 2000001) name = (slha1) ?
"~d_R" :
"~d_4";
1153 if (codeA == 2000003) name = (slha1) ?
"~s_R" :
"~d_5";
1154 if (codeA == 2000005) name = (slha1) ?
"~b_2" :
"~d_6";
1156 if (pdgCode < 0) name +=
"bar";
1160 else if ( idSM <= 19 ) {
1163 if (idSM % 2 == 0) {
1165 if (slhaPtr->staumix.exists()) slha1 =
true;
1166 if (codeA == 1000012) name = (slha1) ?
"~nu_eL" :
"~nu_1";
1167 if (codeA == 1000014) name = (slha1) ?
"~nu_muL" :
"~nu_2";
1168 if (codeA == 1000016) name = (slha1) ?
"~nu_tauL" :
"~nu_3";
1169 if (codeA == 2000012) name = (slha1) ?
"~nu_eR" :
"~nu_4";
1170 if (codeA == 2000014) name = (slha1) ?
"~nu_muR" :
"~nu_5";
1171 if (codeA == 2000016) name = (slha1) ?
"~nu_tauR" :
"~nu_6";
1172 if (pdgCode < 0) name +=
"bar";
1177 if (slhaPtr->staumix.exists()) slha1 =
true;
1178 if (codeA == 1000011) name = (slha1) ?
"~e_L" :
"~e_1";
1179 if (codeA == 1000013) name = (slha1) ?
"~mu_L" :
"~e_2";
1180 if (codeA == 1000015) name = (slha1) ?
"~tau_1" :
"~e_3";
1181 if (codeA == 2000011) name = (slha1) ?
"~e_R" :
"~e_4";
1182 if (codeA == 2000013) name = (slha1) ?
"~mu_R" :
"~e_5";
1183 if (codeA == 2000015) name = (slha1) ?
"~tau_2" :
"~e_6";
1184 if (pdgCode < 0) name +=
"-";
1189 else if (codeA == 1000021) name =
"~g";
1190 else if (codeA == 1000022) name =
"~chi_10";
1191 else if (codeA == 1000023) name =
"~chi_20";
1192 else if (codeA == 1000024) name = (pdgCode > 0) ?
"~chi_1+" :
"~chi_1-";
1193 else if (codeA == 1000025) name =
"~chi_30";
1194 else if (codeA == 1000035) name =
"~chi_40";
1195 else if (codeA == 1000037) name = (pdgCode > 0) ?
"~chi_2+" :
"~chi_2-";
1205 int CoupSUSY::typeNeut(
int idPDG) {
1207 int idAbs = abs(idPDG);
1208 if(idAbs == 1000022) type = 1;
1209 else if(idAbs == 1000023) type = 2;
1210 else if(idAbs == 1000025) type = 3;
1211 else if(idAbs == 1000035) type = 4;
1212 else if(isNMSSM && idAbs == 1000045) type = 5;
1221 int CoupSUSY::typeChar(
int idPDG) {
1223 if(abs(idPDG) == 1000024) type = 1;
1224 else if (abs(idPDG) == 1000037)type = 2;