10 #include "Pythia8/ParticleData.h"
11 #include "Pythia8/SusyCouplings.h"
25 const bool CoupSUSY::DBSUSY =
false;
31 void CoupSUSY::initSUSY (SusyLesHouches* slhaPtrIn, Info* infoPtrIn,
32 ParticleData* particleDataPtrIn, Settings* settingsPtrIn) {
37 settingsPtr = settingsPtrIn;
38 particleDataPtr = particleDataPtrIn;
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);
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");
88 cosW = sqrt(1.0-sin2W);
93 if(slhaPtr->hmix.exists(2))
94 tanb = slhaPtr->hmix(2);
96 tanb = slhaPtr->minpar(3);
97 infoPtr->errorMsg(
"Warning in CoupSUSY::initSUSY: Block HMIX"
98 " not found or incomplete; using MINPAR tan(beta)");
100 cosb = sqrt( 1.0 / (1.0 + tanb*tanb) );
101 sinb = sqrt( max(0.0, 1.0 - cosb*cosb));
103 double beta = acos(cosb);
107 cout <<
" sin2W(Q) = " << sin2W <<
" mW(Q) = " << mW
108 <<
" mZ(Q) = " << mZ << endl;
109 cout <<
" vev(Q) = " << slhaPtr->hmix(3) <<
" tanb(Q) = " << tanb
111 for (
int i=1;i<=3;i++) {
112 for (
int j=1;j<=3;j++) {
113 cout <<
" VCKM [" << i <<
"][" << j <<
"] = "
114 << scientific << setw(10) << VCKMgen(i,j) << endl;
120 if(slhaPtr->alpha.exists()) {
121 alphaHiggs = slhaPtr->alpha();
124 else if (slhaPtr->modsel(4) == 1) {
125 alphaHiggs = asin(slhaPtr->rvhmix(1,2));
126 infoPtr->errorMsg(
"Info from CoupSUSY::initSUSY:",
"Extracting angle"
127 " alpha from RVHMIX",
true);
129 infoPtr->errorMsg(
"Info from CoupSUSY::initSUSY:",
"Block ALPHA"
130 " not found; using alpha = beta.",
true);
132 alphaHiggs = atan(tanb);
135 if(slhaPtr->hmix.exists(1) && slhaPtr->hmix.exists(4)){
136 muHiggs = slhaPtr->hmix(1);
137 mAHiggs = sqrt(slhaPtr->hmix(4));
138 }
else if (slhaPtr->rvamix.exists()){
139 mAHiggs = particleDataPtr->m0(36);
141 infoPtr->errorMsg(
"Warning from CoupSUSY::initSUSY: Block HMIX"
142 " not found or incomplete",
"; setting mu = 0.");
144 infoPtr->errorMsg(
"Warning from CoupSUSY::initSUSY: Block HMIX"
145 " not found or incomplete",
"; setting mu = mA = 0.");
152 double sba = sin(beta-alphaHiggs);
153 double cba = cos(beta-alphaHiggs);
154 double cosa = cos(alphaHiggs);
155 double sina = sin(alphaHiggs);
158 settingsPtr->parm(
"HiggsH1:coup2d", -sina/cosb);
159 settingsPtr->parm(
"HiggsH1:coup2u", cosa/sinb);
160 settingsPtr->parm(
"HiggsH1:coup2l", cosa/sinb);
161 settingsPtr->parm(
"HiggsH1:coup2Z", sba);
162 settingsPtr->parm(
"HiggsH1:coup2W", sba);
164 settingsPtr->parm(
"HiggsH2:coup2d", cosa/cosb);
165 settingsPtr->parm(
"HiggsH2:coup2u", sina/sinb);
166 settingsPtr->parm(
"HiggsH2:coup2l", sina/sinb);
167 settingsPtr->parm(
"HiggsH2:coup2Z", cba);
168 settingsPtr->parm(
"HiggsH2:coup2W", cba);
169 settingsPtr->parm(
"HiggsH2:coup2H1Z", 0.0);
170 settingsPtr->parm(
"HiggsH2:coup2HchgW", sba);
172 settingsPtr->parm(
"HiggsA3:coup2d", tanb);
173 settingsPtr->parm(
"HiggsA3:coup2u", cosb/sinb);
174 settingsPtr->parm(
"HiggsA3:coup2l", cosb/sinb);
175 settingsPtr->parm(
"HiggsA3:coup2Z", 0.0);
176 settingsPtr->parm(
"HiggsA3:coup2W", 0.0);
177 settingsPtr->parm(
"HiggsA3:coup2H1Z", cba);
178 settingsPtr->parm(
"HiggsA3:coup2H2Z", sba);
179 settingsPtr->parm(
"HiggsA3:coup2HchgW", 1.0);
182 settingsPtr->parm(
"HiggsHchg:tanBeta", tanb);
183 settingsPtr->parm(
"HiggsHchg:coup2H1W", cba);
184 settingsPtr->parm(
"HiggsHchg:coup2H2W", sba);
188 double cbpa = cos(beta+alphaHiggs);
189 double sbpa = sin(beta+alphaHiggs);
191 settingsPtr->parm(
"HiggsH1:coup2Hchg", cos(2*beta)*sbpa + 2*pow2(cosW)*sba);
192 settingsPtr->parm(
"HiggsH2:coup2Hchg", -cos(2*beta)*cbpa + 2*pow2(cosW)*cba);
193 settingsPtr->parm(
"HiggsH2:coup2H1H1", 2*sin(2*alphaHiggs)*sbpa
194 - cos(2*alphaHiggs)*cbpa);
195 settingsPtr->parm(
"HiggsH2:coup2A3A3", -cos(2*beta)*cbpa);
196 settingsPtr->parm(
"HiggsH2:coup2A3H1", 0.0);
197 settingsPtr->parm(
"HiggsA3:coup2H1H1", 0.0);
198 settingsPtr->parm(
"HiggsA3:coup2Hchg", 0.0);
201 LHmatrixBlock<6> Ru(slhaPtr->usqmix);
202 LHmatrixBlock<6> Rd(slhaPtr->dsqmix);
203 LHmatrixBlock<6> imRu(slhaPtr->imusqmix);
204 LHmatrixBlock<6> imRd(slhaPtr->imdsqmix);
207 for (
int i=1; i<=6; i++) {
208 for (
int j=1; j<=3; j++) {
209 LsddG[i][j] = complex( Rd(i,j) , imRd(i,j));
210 RsddG[i][j] = complex(-Rd(i,j+3), -imRd(i,j+3));
211 LsuuG[i][j] = complex( Ru(i,j) , imRu(i,j));
212 RsuuG[i][j] = complex(-Ru(i,j+3), -imRu(i,j+3));
215 cout <<
" Lsddg [" << i <<
"][" << j <<
"] = "
216 << scientific << setw(10) << LsddG[i][j]
217 <<
" RsddG [" << i <<
"][" << j <<
"] = "
218 << scientific << setw(10) << RsddG[i][j] << endl;
219 cout <<
" Lsuug [" << i <<
"][" << j <<
"] = "
220 << scientific << setw(10) << LsuuG[i][j]
221 <<
" RsuuG [" << i <<
"][" << j <<
"] = "
222 << scientific << setw(10) << RsuuG[i][j] << endl;
228 for (
int i=1 ; i<=6 ; i++) {
231 LqqZ[i] = af(i) - 2.0*ef(i)*sin2W ;
232 RqqZ[i] = - 2.0*ef(i)*sin2W ;
236 cout <<
" LqqZ [" << i <<
"][" << i <<
"] = "
237 << scientific << setw(10) << LqqZ[i]
238 <<
" RqqZ [" << i <<
"][" << i <<
"] = "
239 << scientific << setw(10) << RqqZ[i] << endl;
244 for (
int i=1 ; i<=6 ; i++) {
247 for (
int j=1 ; j<=6 ; j++) {
252 for (
int k=1;k<=3;k++) {
253 complex Rdik = complex(Rd(i,k), imRd(i,k) );
254 complex Rdjk = complex(Rd(j,k), imRd(j,k) );
255 complex Rdik3 = complex(Rd(i,k+3),imRd(i,k+3));
256 complex Rdjk3 = complex(Rd(j,k+3),imRd(j,k+3));
257 LsdsdZ[i][j] += LqqZ[1] * (Rdik*conj(Rdjk));
258 RsdsdZ[i][j] += RqqZ[1] * (Rdik3*conj(Rdjk3));
264 for (
int k=1;k<=3;k++) {
265 complex Ruik = complex(Ru(i,k) ,imRu(i,k) );
266 complex Rujk = complex(Ru(j,k) ,imRu(j,k) );
267 complex Ruik3 = complex(Ru(i,k+3),imRu(i,k+3));
268 complex Rujk3 = complex(Ru(j,k+3),imRu(j,k+3));
269 LsusuZ[i][j] += LqqZ[2] * (Ruik*conj(Rujk));
270 RsusuZ[i][j] += RqqZ[2] * (Ruik3*conj(Rujk3));
275 if (max(abs(LsdsdZ[i][j]),abs(RsdsdZ[i][j])) > 1e-6) {
276 cout <<
" LsdsdZ[" << i <<
"][" << j <<
"] = "
277 << scientific << setw(10) << LsdsdZ[i][j]
278 <<
" RsdsdZ[" << i <<
"][" << j <<
"] = "
279 << scientific << setw(10) << RsdsdZ[i][j] << endl;
281 if (max(abs(LsusuZ[i][j]),abs(RsusuZ[i][j]))> 1e-6) {
282 cout <<
" LsusuZ[" << i <<
"][" << j <<
"] = "
283 << scientific << setw(10) << LsusuZ[i][j]
284 <<
" RsusuZ[" << i <<
"][" << j <<
"] = "
285 << scientific << setw(10) << RsusuZ[i][j] << endl;
291 for(
int i = 1; i < 7; i++)
292 for(
int j = 1; j < 7; j++){
293 Rsl[i][j] = slhaPtr->selmix(i,j);
297 for(
int i = 1; i < 7; i++)
298 for(
int j = 1; j < 7; j++){
299 if (i < 4 && j < 4) Rsv[i][j] = slhaPtr->snumix(i,j);
300 else Rsv[i][j] = 0.0;
308 if (slhaPtr->modsel(4) >= 1 && slhaPtr->rvlmix.exists()) {
309 for (
int i=1; i<=6; ++i)
310 for (
int j=1; j<=6; ++j)
311 Rsl[i][j] = slhaPtr->rvlmix(i+1,j+2);
313 bool hasCrossTerms =
false;
314 for (
int i=2; i<=7; ++i)
315 for (
int j=1; j<=2; ++j)
316 if (abs(slhaPtr->rvlmix(i,j)) > 1e-5) {
317 hasCrossTerms =
true;
321 infoPtr->errorMsg(
"Warning from CoupSUSY::initSUSY: "
322 "slepton-Higgs mixing not supported internally in PYTHIA");
326 if (slhaPtr->modsel(4) >= 1 && slhaPtr->rvhmix.exists()) {
327 for (
int i=1; i<=3; ++i)
328 for (
int j=1; j<=3; ++j)
329 Rsv[i][j] = slhaPtr->rvhmix(i+2,j+2);
331 bool hasCrossTerms =
false;
332 for (
int i=3; i<=7; ++i)
333 for (
int j=1; j<=2; ++j)
334 if (abs(slhaPtr->rvhmix(i,j)) > 1e-5) {
335 hasCrossTerms =
true;
339 infoPtr->errorMsg(
"Warning from CoupSUSY::initSUSY: "
340 "sneutrino-Higgs mixing not supported internally in PYTHIA");
345 for(
int i=1;i<=6;i++){
346 for(
int j=1;j<=6;j++){
347 cout << scientific << setw(10) << Rsl[i][j]<<
" ";
352 for(
int i=1;i<=6;i++){
353 for(
int j=1;j<=6;j++){
354 cout << scientific << setw(10) << Rsv[i][j]<<
" ";
362 for (
int i=11 ; i<=16 ; i++) {
364 LllZ[i-10] = af(i) - 2.0*ef(i)*sin2W ;
365 RllZ[i-10] = - 2.0*ef(i)*sin2W ;
369 cout <<
" LllZ [" << i-10 <<
"][" << i-10 <<
"] = "
370 << scientific << setw(10) << LllZ[i-10]
371 <<
" RllZ [" << i-10 <<
"][" << i-10 <<
"] = "
372 << scientific << setw(10) << RllZ[i-10] << endl;
378 for(
int i=1;i<=6;i++){
379 for(
int j=1;j<=6;j++){
383 for (
int k=1;k<=3;k++) {
384 LslslZ[i][j] += LllZ[1] * Rsl[i][k] * Rsl[j][k];
385 RslslZ[i][j] += RllZ[1] * Rsl[i][k+3] * Rsl[j][k+3];
391 for (
int k=1;k<=3;k++)
392 LsvsvZ[i][j] += LllZ[2] * Rsv[i][k]*Rsv[j][k];
396 for(
int i=1;i<=6;i++){
397 for(
int j=1;j<=6;j++){
399 if (max(abs(LsvsvZ[i][j]),abs(RsvsvZ[i][j])) > 1e-6) {
400 cout <<
" LsvsvZ[" << i <<
"][" << j <<
"] = "
401 << scientific << setw(10) << LsvsvZ[i][j]
402 <<
" RsvsvZ[" << i <<
"][" << j <<
"] = "
403 << scientific << setw(10) << RsvsvZ[i][j] << endl;
405 if (max(abs(LslslZ[i][j]),abs(RslslZ[i][j]))> 1e-6) {
406 cout <<
" LslslZ[" << i <<
"][" << j <<
"] = "
407 << scientific << setw(10) << LslslZ[i][j]
408 <<
" RslslZ[" << i <<
"][" << j <<
"] = "
409 << scientific << setw(10) << RslslZ[i][j] << endl;
417 for (
int i=1;i<=3;i++) {
418 for (
int j=1;j<=3;j++) {
423 complex Vij=VCKMgen(i,j);
424 if (slhaPtr->vckm.exists()) {
425 Vij=complex(slhaPtr->vckm(i,j),slhaPtr->imvckm(i,j));
429 LudW[i][j] = sqrt(2.0) * cosW * Vij;
434 cout <<
" LudW [" << i <<
"][" << j <<
"] = "
435 << scientific << setw(10) << LudW[i][j]
436 <<
" RudW [" << i <<
"][" << j <<
"] = "
437 << scientific << setw(10) << RudW[i][j] << endl;
445 for (
int k=1;k<=6;k++) {
446 for (
int l=1;l<=6;l++) {
452 for (
int i=1;i<=3;i++) {
453 for (
int j=1;j<=3;j++) {
458 complex Vij=VCKMgen(i,j);
459 if (slhaPtr->vckm.exists()) {
460 Vij=complex(slhaPtr->vckm(i,j),slhaPtr->imvckm(i,j));
464 complex Ruki = complex(Ru(k,i),imRu(k,i));
465 complex Rdlj = complex(Rd(l,j),imRd(l,j));
466 LsusdW[k][l] += sqrt(2.0) * cosW * Vij * Ruki * conj(Rdlj);
474 if (max(abs(LsusdW[k][l]),abs(RsusdW[k][l]))> 1e-6) {
475 cout <<
" LsusdW[" << k <<
"][" << l <<
"] = "
476 << scientific << setw(10) << LsusdW[k][l]
477 <<
" RsusdW[" << k <<
"][" << l <<
"] = "
478 << scientific << setw(10) << RsusdW[k][l] << endl;
488 for (
int i=1;i<=3;i++){
489 for (
int j=1;j<=3;++j){
490 LlvW[i][j] = (i==j) ? sqrt(2.0) * cosW : 0.0 ;
495 cout <<
" LlvW [" << i <<
"][" << j <<
"] = "
496 << scientific << setw(10) << LlvW[i][j]
497 <<
" RlvW [" << i <<
"][" << j <<
"] = "
498 << scientific << setw(10) << RlvW[i][j] << endl;
504 for (
int k=1;k<=6;k++) {
505 for (
int l=1;l<=6;l++) {
510 for(
int i=1;i<=3;i++)
511 LslsvW[k][l] += sqrt(2.0) * cosW * Rsl[k][i] * Rsv[l][i];
516 cout <<
" LslsvW [" << k <<
"][" << l <<
"] = "
517 << scientific << setw(10) << LslsvW[k][l]
518 <<
" RslsvW [" << k <<
"][" << l <<
"] = "
519 << scientific << setw(10) << RslsvW[k][l] << endl;
527 if (slhaPtr->modsel(4) >= 1 && slhaPtr->rvnmix.exists()) {
528 bool hasCrossTerms =
false;
529 for (
int i=1; i<=3; ++i)
530 for (
int j=4; j<=7; ++j)
531 if (abs(slhaPtr->rvnmix(i,j)) > 1e-5) {
532 hasCrossTerms =
true;
536 infoPtr->errorMsg(
"Warning from CoupSUSY::initSUSY: "
537 "Neutrino-Neutralino mixing not supported internally in PYTHIA");
541 for (
int i=1;i<=nNeut;i++) {
544 complex ni1,ni2,ni3,ni4,ni5;
547 if (slhaPtr->modsel(4) >= 1 && slhaPtr->rvnmix.exists()) {
548 ni1=complex( slhaPtr->rvnmix(i+3,4), 0.0 );
549 ni2=complex( slhaPtr->rvnmix(i+3,5), 0.0 );
550 ni3=complex( slhaPtr->rvnmix(i+3,6), 0.0 );
551 ni4=complex( slhaPtr->rvnmix(i+3,7), 0.0 );
552 ni5=complex( 0.0, 0.0);
555 ni1=complex( slhaPtr->nmix(i,1), slhaPtr->imnmix(i,1) );
556 ni2=complex( slhaPtr->nmix(i,2), slhaPtr->imnmix(i,2) );
557 ni3=complex( slhaPtr->nmix(i,3), slhaPtr->imnmix(i,3) );
558 ni4=complex( slhaPtr->nmix(i,4), slhaPtr->imnmix(i,4) );
559 ni5=complex( 0.0, 0.0);
561 ni1=complex( slhaPtr->nmnmix(i,1), slhaPtr->imnmnmix(i,1) );
562 ni2=complex( slhaPtr->nmnmix(i,2), slhaPtr->imnmnmix(i,2) );
563 ni3=complex( slhaPtr->nmnmix(i,3), slhaPtr->imnmnmix(i,3) );
564 ni4=complex( slhaPtr->nmnmix(i,4), slhaPtr->imnmnmix(i,4) );
565 ni5=complex( slhaPtr->nmnmix(i,5), slhaPtr->imnmnmix(i,5) );
569 complex iRot( 0., 1.);
570 if (slhaPtr->mass(idNeut(i)) < 0.) {
579 for (
int j=1; j<=nNeut; j++) {
583 if (slhaPtr->modsel(4) >= 1 && slhaPtr->rvnmix.exists()) {
584 nj3=complex( slhaPtr->rvnmix(i+3,6), 0.0 );
585 nj4=complex( slhaPtr->rvnmix(i+3,7), 0.0 );
588 nj3=complex( slhaPtr->nmix(j,3), slhaPtr->imnmix(j,3) );
589 nj4=complex( slhaPtr->nmix(j,4), slhaPtr->imnmix(j,4) );
591 nj3=complex( slhaPtr->nmnmix(j,3), slhaPtr->imnmnmix(j,3) );
592 nj4=complex( slhaPtr->nmnmix(j,4), slhaPtr->imnmnmix(j,4) );
595 if (slhaPtr->mass(idNeut(j)) < 0.) {
601 OLpp[i][j] = -0.5 * ni3 * conj(nj3) + 0.5 * ni4 * conj(nj4);
602 ORpp[i][j] = 0.5 * conj(ni3) * nj3 - 0.5 * conj(ni4) * nj4;
606 cout <<
" OL'' [" << i <<
"][" << j <<
"] = "
607 << scientific << setw(10) << OLpp[i][j]
608 <<
" OR'' [" << i <<
"][" << j <<
"] = "
609 << scientific << setw(10) << ORpp[i][j] << endl;
615 for (
int j=1; j<=nChar; j++) {
618 complex uj1, uj2, vj1, vj2;
619 if (slhaPtr->modsel(4)<1 || !slhaPtr->rvumix.exists()) {
620 uj1=complex( slhaPtr->umix(j,1), slhaPtr->imumix(j,1) );
621 uj2=complex( slhaPtr->umix(j,2), slhaPtr->imumix(j,2) );
622 vj1=complex( slhaPtr->vmix(j,1), slhaPtr->imvmix(j,1) );
623 vj2=complex( slhaPtr->vmix(j,2), slhaPtr->imvmix(j,2) );
627 uj1=complex( slhaPtr->rvumix(j+3,4), 0.0 );
628 uj2=complex( slhaPtr->rvumix(j+3,5), 0.0 );
629 vj1=complex( slhaPtr->rvvmix(j+3,4), 0.0 );
630 vj2=complex( slhaPtr->rvvmix(j+3,5), 0.0 );
634 OL[i][j] = -1.0/sqrt(2.0)*ni4*conj(vj2)+ni2*conj(vj1);
635 OR[i][j] = 1.0/sqrt(2.0)*conj(ni3)*uj2+conj(ni2)*uj1;
639 cout <<
" OL [" << i <<
"][" << j <<
"] = "
640 << scientific << setw(10) << OL[i][j]
641 <<
" OR [" << i <<
"][" << j <<
"] = "
642 << scientific << setw(10) << OR[i][j] << endl;
649 double ed = -1.0/3.0;
655 for (
int k=1;k<=3;k++) {
659 double mu = particleDataPtr->m0(2*k);
660 double md = particleDataPtr->m0(2*k-1);
661 if (k == 1) { mu=0.0 ; md=0.0; }
662 if (k == 2) { md=0.0 ; mu=0.0; }
665 if (slhaPtr->yd.exists() && slhaPtr->hmix.exists(3)) {
666 double ykk=slhaPtr->yd(k,k);
667 double v1=slhaPtr->hmix(3)/sqrt(1+pow(tanb,2));
668 if (ykk > 0.0) md = ykk * v1 / sqrt(2.0) ;
670 if (slhaPtr->yu.exists() && slhaPtr->hmix.exists(3)) {
671 double ykk=slhaPtr->yu(k,k);
672 double v2=slhaPtr->hmix(3)/sqrt(1.0+1.0/pow(tanb,2));
673 if (ykk > 0.0) mu = ykk * v2 / sqrt(2.0) ;
678 cout <<
" Gen = " << k <<
" mu = " << mu <<
" md = " << md
679 <<
" yUU,DD = " << slhaPtr->yu(k,k) <<
","
680 << slhaPtr->yd(k,k) << endl;
684 for (
int j=1;j<=6;j++) {
687 complex Rdjk = complex(Rd(j,k), imRd(j,k) );
688 complex Rdjk3 = complex(Rd(j,k+3),imRd(j,k+3));
689 complex Rujk = complex(Ru(j,k), imRu(j,k) );
690 complex Rujk3 = complex(Ru(j,k+3),imRu(j,k+3));
694 LsddX[j][k][i] = ((ed-T3d)*sinW*ni1 + T3d*cosW*ni2)*conj(Rdjk)
695 + md*cosW*ni3*conj(Rdjk3)/2.0/mW/cosb;
696 RsddX[j][k][i] = -ed*sinW*conj(ni1)*conj(Rdjk3)
697 + md*cosW*conj(ni3)*conj(Rdjk)/2.0/mW/cosb;
700 LsuuX[j][k][i] = ((eu-T3u)*sinW*ni1 + T3u*cosW*ni2)*conj(Rujk)
701 + mu*cosW*ni4*conj(Rujk3)/2.0/mW/sinb;
702 RsuuX[j][k][i] = -eu*sinW*conj(ni1)*conj(Rujk3)
703 + mu*cosW*conj(ni4)*conj(Rujk)/2.0/mW/sinb;
706 if (abs(LsddX[j][k][i]) > 1e-6) {
708 cout <<
" LsddX[" << j <<
"][" << k <<
"][" << i <<
"] = "
709 << scientific << setw(10) << LsddX[j][k][i] << endl;
711 if (abs(RsddX[j][k][i]) > 1e-6) {
713 cout <<
" RsddX[" << j <<
"][" << k <<
"][" << i <<
"] = "
714 << scientific << setw(10) << RsddX[j][k][i] << endl;
716 if (abs(LsuuX[j][k][i]) > 1e-6) {
718 cout <<
" LsuuX[" << j <<
"][" << k <<
"][" << i <<
"] = "
719 << scientific << setw(10) << LsuuX[j][k][i] << endl;
721 if (abs(RsuuX[j][k][i]) > 1e-6) {
723 cout <<
" RsuuX[" << j <<
"][" << k <<
"][" << i <<
"] = "
724 << scientific << setw(10) << RsuuX[j][k][i] << endl;
738 for (
int k=1;k<=3;k++) {
741 if(k==3) ml = particleDataPtr->m0(15);
743 for(
int j=1;j<=6;j++){
751 LsllX[j][k][i] = ((el-T3l)*sinW*ni1 + T3l*cosW*ni2)*Rsl[j][k]
752 + ml*cosW*ni3/2.0/mW/cosb*Rsl[j][k+3];
753 RsllX[j][k][i] = -el*sinW*conj(ni1)*Rsl[j][k+3]
754 + ml*cosW*conj(ni3)/2.0/mW/cosb*Rsl[j][k];
759 LsvvX[j][k][i] = ((ev-T3v)*sinW*ni1 + T3v*cosW*ni2);
763 if (abs(LsllX[j][k][i]) > 1e-6) {
765 cout <<
" LsllX[" << j <<
"][" << k <<
"][" << i <<
"] = "
766 << scientific << setw(10) << LsllX[j][k][i] << endl;
768 if (abs(RsllX[j][k][i]) > 1e-6) {
770 cout <<
" RsllX[" << j <<
"][" << k <<
"][" << i <<
"] = "
771 << scientific << setw(10) << RsllX[j][k][i] << endl;
773 if (abs(LsvvX[j][k][i]) > 1e-6) {
775 cout <<
" LsvvX[" << j <<
"][" << k <<
"][" << i <<
"] = "
776 << scientific << setw(10) << LsvvX[j][k][i] << endl;
784 if (slhaPtr->modsel(4) >= 1 && slhaPtr->rvumix.exists()) {
785 bool hasCrossTerms =
false;
786 for (
int i=1; i<=3; ++i)
787 for (
int j=4; j<=5; ++j)
788 if (abs(slhaPtr->rvumix(i,j)) > 1e-5
789 || abs(slhaPtr->rvvmix(i,j)) > 1e-5) {
790 hasCrossTerms =
true;
794 infoPtr->errorMsg(
"Warning from CoupSUSY::initSUSY: "
795 "Lepton-Chargino mixing not supported internally in PYTHIA");
800 double rt2 = sqrt(2.0);
802 for (
int i=1;i<=nChar;i++) {
805 complex ui1,ui2,vi1,vi2;
806 ui1=complex( slhaPtr->umix(i,1), slhaPtr->imumix(i,1) );
807 ui2=complex( slhaPtr->umix(i,2), slhaPtr->imumix(i,2) );
808 vi1=complex( slhaPtr->vmix(i,1), slhaPtr->imvmix(i,1) );
809 vi2=complex( slhaPtr->vmix(i,2), slhaPtr->imvmix(i,2) );
812 for (
int j=1; j<=nChar; j++) {
815 complex uj1, uj2, vj1, vj2;
816 uj1=complex( slhaPtr->umix(j,1), slhaPtr->imumix(j,1) );
817 uj2=complex( slhaPtr->umix(j,2), slhaPtr->imumix(j,2) );
818 vj1=complex( slhaPtr->vmix(j,1), slhaPtr->imvmix(j,1) );
819 vj2=complex( slhaPtr->vmix(j,2), slhaPtr->imvmix(j,2) );
822 OLp[i][j] = -vi1*conj(vj1) - 0.5*vi2*conj(vj2)
823 + ( (i == j) ? sin2W : 0.0);
824 ORp[i][j] = -conj(ui1)*uj1 - 0.5*conj(ui2)*uj2
825 + ( (i == j) ? sin2W : 0.0);
829 cout <<
" OL' [" << i <<
"][" << j <<
"] = "
830 << scientific << setw(10) << OLp[i][j]
831 <<
" OR' [" << i <<
"][" << j <<
"] = "
832 << scientific << setw(10) << ORp[i][j] << endl;
837 for (
int l=1;l<=3;l++) {
841 double mul = particleDataPtr->m0(2*l);
842 double mdl = particleDataPtr->m0(2*l-1);
843 if (l == 1 || l == 2) { mul=0.0 ; mdl=0.0; }
846 if (slhaPtr->yd.exists() && slhaPtr->hmix.exists(3)) {
847 double yll=slhaPtr->yd(l,l);
848 double v1=slhaPtr->hmix(3)/sqrt(1+pow(tanb,2));
849 if (yll > 0.0) mdl = yll * v1 / sqrt(2.0) ;
851 if (slhaPtr->yu.exists() && slhaPtr->hmix.exists(3)) {
852 double yll=slhaPtr->yu(l,l);
853 double v2=slhaPtr->hmix(3)/sqrt(1.0+1.0/pow(tanb,2));
854 if (yll > 0.0) mul = yll * v2 / sqrt(2.0) ;
858 for (
int j=1;j<=6;j++) {
861 LsduX[j][l][i] = 0.0;
862 RsduX[j][l][i] = 0.0;
863 LsudX[j][l][i] = 0.0;
864 RsudX[j][l][i] = 0.0;
867 for (
int k=1;k<=3;k++) {
871 double muk = particleDataPtr->m0(2*k);
872 double mdk = particleDataPtr->m0(2*k-1);
873 if (k == 1) { muk=0.0 ; mdk=0.0; }
874 if (k == 2) { mdk=0.0 ; muk=0.0; }
877 if (slhaPtr->yd.exists() && slhaPtr->hmix.exists(3)) {
878 double ykk=slhaPtr->yd(k,k);
879 double v1=slhaPtr->hmix(3)/sqrt(1+pow(tanb,2));
880 if (ykk > 0.0) mdk = ykk * v1 / sqrt(2.0) ;
882 if (slhaPtr->yu.exists() && slhaPtr->hmix.exists(3)) {
883 double ykk=slhaPtr->yu(k,k);
884 double v2=slhaPtr->hmix(3)/sqrt(1.0+1.0/pow(tanb,2));
885 if (ykk > 0.0) muk = ykk * v2 / sqrt(2.0) ;
891 complex Vlk=VCKMgen(l,k);
892 complex Vkl=VCKMgen(k,l);
893 if (slhaPtr->vckm.exists()) {
894 Vlk=complex(slhaPtr->vckm(l,k),slhaPtr->imvckm(l,k));
895 Vkl=complex(slhaPtr->vckm(k,l),slhaPtr->imvckm(k,l));
899 complex Rdjk = complex(Rd(j,k), imRd(j,k) );
900 complex Rdjk3 = complex(Rd(j,k+3),imRd(j,k+3));
901 complex Rujk = complex(Ru(j,k), imRu(j,k) );
902 complex Rujk3 = complex(Ru(j,k+3),imRu(j,k+3));
906 LsduX[j][l][i] += (ui1*conj(Rdjk)
907 - mdk*ui2*conj(Rdjk3)/rt2/mW/cosb)*Vlk;
908 RsduX[j][l][i] -= mul*conj(vi2)*Vlk*conj(Rdjk)/rt2/mW/sinb;
911 LsudX[j][l][i] += (conj(vi1)*Rujk
912 - muk*conj(vi2)*Rujk3/rt2/mW/sinb)*Vkl;
913 RsudX[j][l][i] -= mdl*ui2*Vkl*Rujk/rt2/mW/cosb;
918 if (max(abs(LsduX[j][l][i]),abs(RsduX[j][l][i])) > 1e-6) {
920 cout <<
" LsduX[" << j <<
"][" << l <<
"][" << i <<
"] = "
921 << scientific << setw(10) << LsduX[j][l][i];
922 cout <<
" RsduX[" << j <<
"][" << l <<
"][" << i <<
"] = "
923 << scientific << setw(10) << RsduX[j][l][i] << endl;
925 if (max(abs(LsudX[j][l][i]),abs(RsudX[j][l][i])) > 1e-6) {
927 cout <<
" LsudX[" << j <<
"][" << l <<
"][" << i <<
"] = "
928 << scientific << setw(10) << LsudX[j][l][i];
929 cout <<
" RsudX[" << j <<
"][" << l <<
"][" << i <<
"] = "
930 << scientific << setw(10) << RsudX[j][l][i] << endl;
937 for (
int j=1;j<=6;j++) {
938 for (
int k=1;k<=3;k++) {
940 LslvX[j][k][i] = 0.0;
941 RslvX[j][k][i] = 0.0;
942 LsvlX[j][k][i] = 0.0;
943 RsvlX[j][k][i] = 0.0;
947 if (k == 3) ml = particleDataPtr->m0(15);
952 LslvX[j][k][i] += ui1- ml*ui2/rt2/mW/cosb;
953 RslvX[j][k][i] -= ml*conj(vi2)/rt2/mW/sinb;
957 LsvlX[j][k][i] += conj(vi1) - ml*conj(vi2)/rt2/mW/sinb;
962 if (max(abs(LslvX[j][k][i]),abs(RslvX[j][k][i])) > 1e-6) {
964 cout <<
" LslvX[" << j <<
"][" << k <<
"][" << i <<
"] = "
965 << scientific << setw(10) << LslvX[j][k][i];
966 cout <<
" RslvX[" << j <<
"][" << k <<
"][" << i <<
"] = "
967 << scientific << setw(10) << RslvX[j][k][i] << endl;
969 if (max(abs(LsvlX[j][k][i]),abs(RsvlX[j][k][i])) > 1e-6) {
971 cout <<
" LsvlX[" << j <<
"][" << k <<
"][" << i <<
"] = "
972 << scientific << setw(10) << LsvlX[j][k][i];
973 cout <<
" RsvlX[" << j <<
"][" << k <<
"][" << i <<
"] = "
974 << scientific << setw(10) << RsvlX[j][k][i] << endl;
983 LHtensor3Block<3> rvlle(slhaPtr->rvlamlle);
985 LHtensor3Block<3> rvlqd(slhaPtr->rvlamlqd);
987 LHtensor3Block<3> rvudd(slhaPtr->rvlamudd);
996 for(
int i=1;i<=3;i++){
997 for(
int j=i;j<=3;j++){
999 for(
int k=1;k<=3;k++){
1001 rvLLE[i][j][k] = 0.0;
1003 rvLLE[i][j][k] = rvlle(i,j,k);
1004 rvLLE[j][i][k] = -rvlle(i,j,k);
1013 for(
int i=1;i<=3;i++){
1014 for(
int j=1;j<=3;j++){
1015 for(
int k=1;k<=3;k++){
1016 rvLQD[i][j][k] = rvlqd(i,j,k);
1026 for(
int i=1;i<=3;i++){
1027 for(
int j=i;j<=3;j++){
1028 for(
int k=1;k<=3;k++){
1030 rvUDD[k][i][j] = 0.0;
1032 rvUDD[k][i][j] = rvudd(k,i,j);
1033 rvUDD[k][j][i] = -rvudd(k,i,j);
1041 for(
int i=1;i<=3;i++){
1042 for(
int j=1;j<=3;j++){
1043 for(
int k=1;k<=3;k++){
1045 cout<<
"LambdaLLE["<<i<<
"]["<<j<<
"]["<<k<<
"]="<<rvLLE[i][j][k]<<
" ";
1047 cout<<
"LambdaLQD["<<i<<
"]["<<j<<
"]["<<k<<
"]="<<rvLQD[i][j][k]<<
" ";
1049 cout<<
"LambdaUDD["<<i<<
"]["<<j<<
"]["<<k<<
"]="<<rvUDD[i][j][k]
1057 for(
int i=1;i<=6;i++){
1058 for(
int j=1;j<=3;j++){
1059 Rusq[i][j] = complex(Ru(i,j), imRu(i,j) );
1060 Rusq[i][j+3] = complex(Ru(i,j+3),imRu(i,j+3));
1061 Rdsq[i][j] = complex(Rd(i,j), imRd(i,j) );
1062 Rdsq[i][j+3] = complex(Rd(i,j+3),imRd(i,j+3));
1068 for(
int i=1;i<=6;i++){
1069 for(
int j=1;j<=6;j++){
1070 cout << real(Rusq[i][j])<<
" ";
1075 for(
int i=1;i<=6;i++){
1076 for(
int j=1;j<=6;j++){
1077 cout << real(Rdsq[i][j])<<
" ";
1091 int CoupSUSY::idNeut(
int idChi) {
1094 if (idChi == 1)
id = 1000022;
1095 else if (idChi == 2)
id = 1000023;
1096 else if (idChi == 3)
id = 1000025;
1097 else if (idChi == 4)
id = 1000035;
1098 else if (idChi == 5)
id = 1000045;
1106 int CoupSUSY::idChar(
int idChi) {
1109 if (idChi == 1)
id = 1000024;
1110 else if (idChi == -1)
id = -1000024;
1111 else if (idChi == 2)
id = 1000037;
1112 else if (idChi == -2)
id = -1000037;
1120 int CoupSUSY::idSup(
int iSup) {
1123 int sgn = ( iSup > 0 ) ? 1 : -1;
1125 if (iSup == 1)
id = 1000002;
1126 else if (iSup == 2)
id = 1000004;
1127 else if (iSup == 3)
id = 1000006;
1128 else if (iSup == 4)
id = 2000002;
1129 else if (iSup == 5)
id = 2000004;
1130 else if (iSup == 6)
id = 2000006;
1138 int CoupSUSY::idSdown(
int iSdown) {
1141 int sgn = ( iSdown > 0 ) ? 1 : -1;
1142 iSdown = abs(iSdown);
1143 if (iSdown == 1)
id = 1000001;
1144 else if (iSdown == 2)
id = 1000003;
1145 else if (iSdown == 3)
id = 1000005;
1146 else if (iSdown == 4)
id = 2000001;
1147 else if (iSdown == 5)
id = 2000003;
1148 else if (iSdown == 6)
id = 2000005;
1156 int CoupSUSY::idSlep(
int iSlep) {
1159 int sgn = ( iSlep > 0 ) ? 1 : -1;
1161 if (iSlep == 1)
id = 1000011;
1162 else if (iSlep == 2)
id = 1000013;
1163 else if (iSlep == 3)
id = 1000015;
1164 else if (iSlep == 4)
id = 2000011;
1165 else if (iSlep == 5)
id = 2000013;
1166 else if (iSlep == 6)
id = 2000015;
1174 int CoupSUSY::typeNeut(
int idPDG) {
1176 int idAbs = abs(idPDG);
1177 if(idAbs == 1000022) type = 1;
1178 else if(idAbs == 1000023) type = 2;
1179 else if(idAbs == 1000025) type = 3;
1180 else if(idAbs == 1000035) type = 4;
1181 else if(isNMSSM && idAbs == 1000045) type = 5;
1190 int CoupSUSY::typeChar(
int idPDG) {
1192 if(abs(idPDG) == 1000024) type = 1;
1193 else if (abs(idPDG) == 1000037)type = 2;