7 #include "Pythia8/SusyLesHouches.h"
8 #include "Pythia8/Streams.h"
20 int SusyLesHouches::readFile(
string slhaFileIn,
int verboseIn,
23 slhaFile = slhaFileIn;
25 const char* cstring = slhaFile.c_str();
26 igzstream file(cstring);
30 message(2,
"readFile",slhaFile+
" not found",0);
34 if (verboseSav >= 3) {
35 message(0,
"readFile",
"parsing "+slhaFile,0);
39 return readFile( file, verboseIn, useDecayIn );
42 int SusyLesHouches::readFile(istream& is,
int verboseIn,
47 verboseSav = verboseIn;
48 useDecay = useDecayIn;
54 vector<string> processedBlocks;
60 bool foundSlhaTag =
false;
61 bool xmlComment =
false;
62 bool decayPrinted =
false;
76 while ( getline(is, line) ) {
84 if (line.find(
"<leshouches") != string::npos
85 || line.find(
"<slha") != string::npos) {
92 if (line.find(
"-->") != string::npos) {
95 else if (xmlComment)
continue;
96 else if (line.find(
"<!--") != string::npos) {
100 if (line.find(
"<slha") != string::npos) {
104 if (! headerPrinted) listHeader();
107 if (line.find(
"</header>") != string::npos ||
108 line.find(
"<init") != string::npos) {
109 if (!foundSlhaTag)
return 101;
113 if (!lhefSlha)
continue;
117 if (line.find(
"#") == 0)
continue;
120 if (line.size() == 0)
continue;
121 if (line.size() == 1 && line.substr(0,1) ==
" ")
continue;
124 if (line.find(
"#") != string::npos) {
125 if (line.find(
"#") + 1 < line.length() ) {
126 int commentLength = line.length()-(line.find(
"#")+1);
127 comment = line.substr(line.find(
"#")+1,commentLength);
130 line.erase(line.find(
"#"),line.length()-line.find(
"#")-1);
134 while (line.find(
" =") != string::npos) line.erase( line.find(
" ="), 1);
135 while (line.find(
"= ") != string::npos) line.erase( line.find(
"= ")+1, 1);
136 while (line.find(
" ") != string::npos) line.erase( line.find(
" ")+1, 1);
139 if (line.find(
"block") <= 1) {
142 if (! headerPrinted) listHeader();
147 int nameEnd=blockIn.find(
" ",7);
148 blockName=blockIn.substr(nameBegin,nameEnd-nameBegin);
151 if (blockIn.find(
"qnumbers") != string::npos) {
153 int pdgBegin=blockIn.find(
" ",7)+1;
154 int pdgEnd=blockIn.find(
" ",pdgBegin);
155 string pdgString = blockIn.substr(pdgBegin,pdgEnd-pdgBegin);
156 istringstream linestream(pdgString);
158 LHblock<int> newQnumbers;
159 newQnumbers.set(0,linestream);
160 qnumbers.push_back(newQnumbers);
162 string defName, defAntiName, newName, newAntiName;
163 ostringstream idStream;
164 idStream << newQnumbers(0);
165 defName = idStream.str();
166 defAntiName =
"-"+defName;
168 newAntiName = defAntiName;
170 if (comment.length() >= 1) {
171 int firstCommentBeg(0), firstCommentEnd(0);
172 if ( comment.find(
" ") == 0) firstCommentBeg = 1;
173 if ( comment.find(
" ",firstCommentBeg+1) == string::npos)
174 firstCommentEnd = comment.length();
176 firstCommentEnd = comment.find(
" ",firstCommentBeg+1);
177 if (firstCommentEnd > firstCommentBeg)
178 newName = comment.substr(firstCommentBeg,
179 firstCommentEnd-firstCommentBeg);
181 int secondCommentBeg(firstCommentEnd+1), secondCommentEnd(0);
182 if (secondCommentBeg <
int(comment.length())) {
183 if ( comment.find(
" ",secondCommentBeg+1) == string::npos)
184 secondCommentEnd = comment.length();
186 secondCommentEnd = comment.find(
" ",secondCommentBeg+1);
187 if (secondCommentEnd > secondCommentBeg)
188 newAntiName = comment.substr(secondCommentBeg,
189 secondCommentEnd-secondCommentBeg);
193 if (newName != defName && newAntiName == defAntiName) newAntiName =
"";
194 qnumbersName.push_back(newName);
195 qnumbersAntiName.push_back(newAntiName);
196 if (pdgString != newName) {
197 message(0,
"readFile",
"storing QNUMBERS for id = "+pdgString+
" "
198 +newName+
" "+newAntiName,iLine);
200 message(0,
"readFile",
"storing QNUMBERS for id = "+pdgString,iLine);
210 for (
int i=0; i<int(processedBlocks.size()); ++i)
211 if (blockName == processedBlocks[i]) exists =
true;
213 message(0,
"readFile",
"skipping copy of block "+blockName,iLine);
217 processedBlocks.push_back(blockName);
223 LHgenericBlock gBlock;
224 genericBlocks[blockName]=gBlock;
228 if (blockIn.find(
"q=") != string::npos) {
229 int qbegin=blockIn.find(
"q=")+2;
230 istringstream qstream(blockIn.substr(qbegin,blockIn.length()));
235 if (blockName==
"hmix") hmix.setq(q);
236 if (blockName==
"yu") yu.setq(q);
237 if (blockName==
"yd") yd.setq(q);
238 if (blockName==
"ye") ye.setq(q);
239 if (blockName==
"au") au.setq(q);
240 if (blockName==
"ad") ad.setq(q);
241 if (blockName==
"ae") ae.setq(q);
242 if (blockName==
"msoft") msoft.setq(q);
243 if (blockName==
"gauge") gauge.setq(q);
245 if (blockName==
"vckm") vckm.setq(q);
246 if (blockName==
"upmns") upmns.setq(q);
247 if (blockName==
"msq2") msq2.setq(q);
248 if (blockName==
"msu2") msu2.setq(q);
249 if (blockName==
"msd2") msd2.setq(q);
250 if (blockName==
"msl2") msl2.setq(q);
251 if (blockName==
"mse2") mse2.setq(q);
252 if (blockName==
"tu") tu.setq(q);
253 if (blockName==
"td") td.setq(q);
254 if (blockName==
"te") te.setq(q);
255 if (blockName==
"rvlamlle") rvlamlle.setq(q);
256 if (blockName==
"rvlamlqd") rvlamlqd.setq(q);
257 if (blockName==
"rvlamudd") rvlamudd.setq(q);
258 if (blockName==
"rvtlle") rvtlle.setq(q);
259 if (blockName==
"rvtlqd") rvtlqd.setq(q);
260 if (blockName==
"rvtudd") rvtudd.setq(q);
261 if (blockName==
"rvkappa") rvkappa.setq(q);
262 if (blockName==
"rvd") rvd.setq(q);
263 if (blockName==
"rvm2lh1") rvm2lh1.setq(q);
264 if (blockName==
"rvsnvev") rvsnvev.setq(q);
265 if (blockName==
"imau") imau.setq(q);
266 if (blockName==
"imad") imad.setq(q);
267 if (blockName==
"imae") imae.setq(q);
268 if (blockName==
"imhmix") imhmix.setq(q);
269 if (blockName==
"immsoft") immsoft.setq(q);
270 if (blockName==
"imtu") imtu.setq(q);
271 if (blockName==
"imtd") imtd.setq(q);
272 if (blockName==
"imte") imte.setq(q);
273 if (blockName==
"imvckm") imvckm.setq(q);
274 if (blockName==
"imupmns") imupmns.setq(q);
275 if (blockName==
"immsq2") immsq2.setq(q);
276 if (blockName==
"immsu2") immsu2.setq(q);
277 if (blockName==
"immsd2") immsd2.setq(q);
278 if (blockName==
"immsl2") immsl2.setq(q);
279 if (blockName==
"immse2") immse2.setq(q);
280 if (blockName==
"nmssmrun") nmssmrun.setq(q);
290 else if (line.find(
"decay") <= 1) {
293 if (! headerPrinted) listHeader();
296 if (decay !=
"" && ! decayPrinted) {
297 if (verboseSav >= 2) message(0,
"readFile",
"reading WIDTH for "+nameNow
298 +
" (but no decay channels found)",0);
305 int nameEnd=decay.find(
" ",7);
306 nameNow=decay.substr(nameBegin,nameEnd-nameBegin);
309 istringstream dstream(nameNow);
315 message(0,
"readFile",
"ignoring DECAY table for "+nameNow
316 +
" (DECAY read-in switched off)",iLine);
321 string widthName=decay.substr(nameEnd+1,decay.length());
322 istringstream wstream(widthName);
326 decays.push_back(LHdecayTable(idNow,width));
327 decayIndices[idNow]=decays.size()-1;
330 string endComment=
"";
332 endComment=
"(forced width < 0 to zero)";
335 message(0,
"readFile",
"reading stable particle "+nameNow
339 decays[decayIndices[idNow]].setWidth(width);
341 decayPrinted =
false;
345 message(0,
"readFile",
"ignoring DECAY table for "+nameNow
346 +
" (read failed)",iLine);
354 message(0,
"readFile",
355 "PDG Code unreadable. Ignoring this DECAY block",iLine);
366 else if (line.find(
"</slha>") != string::npos) {
377 while (line.find(
"=") != string::npos) {
378 int firstEqual = line.find_first_of(
"=");
379 line.replace(firstEqual, 1,
" ");
388 istringstream linestream(line);
391 if (blockName ==
"qnumbers") {
392 int iEnd = qnumbers.size()-1;
393 if (iEnd >= 0) ifail = qnumbers[iEnd].set(linestream);
398 else if (blockName ==
"modsel") {
402 if (i == 12) {ifail=modsel12.set(0,linestream);}
403 else if (i == 21) {ifail=modsel21.set(0,linestream);}
404 else {ifail=modsel.set(i,linestream);};}
408 if (blockName ==
"minpar") ifail=minpar.set(linestream);
409 if (blockName ==
"sminputs") ifail=sminputs.set(linestream);
410 if (blockName ==
"extpar") ifail=extpar.set(linestream);
411 if (blockName ==
"qextpar") ifail=qextpar.set(linestream);
413 if (blockName ==
"vckmin") ifail=vckmin.set(linestream);
414 if (blockName ==
"upmnsin") ifail=upmnsin.set(linestream);
415 if (blockName ==
"msq2in") ifail=msq2in.set(linestream);
416 if (blockName ==
"msu2in") ifail=msu2in.set(linestream);
417 if (blockName ==
"msd2in") ifail=msd2in.set(linestream);
418 if (blockName ==
"msl2in") ifail=msl2in.set(linestream);
419 if (blockName ==
"mse2in") ifail=mse2in.set(linestream);
420 if (blockName ==
"tuin") ifail=tuin.set(linestream);
421 if (blockName ==
"tdin") ifail=tdin.set(linestream);
422 if (blockName ==
"tein") ifail=tein.set(linestream);
424 if (blockName ==
"rvlamllein") ifail=rvlamllein.set(linestream);
425 if (blockName ==
"rvlamlqdin") ifail=rvlamlqdin.set(linestream);
426 if (blockName ==
"rvlamuddin") ifail=rvlamuddin.set(linestream);
427 if (blockName ==
"rvtllein") ifail=rvtllein.set(linestream);
428 if (blockName ==
"rvtlqdin") ifail=rvtlqdin.set(linestream);
429 if (blockName ==
"rvtuddin") ifail=rvtuddin.set(linestream);
430 if (blockName ==
"rvkappain") ifail=rvkappain.set(linestream);
431 if (blockName ==
"rvdin") ifail=rvdin.set(linestream);
432 if (blockName ==
"rvm2lh1in") ifail=rvm2lh1in.set(linestream);
433 if (blockName ==
"rvsnvevin") ifail=rvsnvevin.set(linestream);
435 if (blockName ==
"imminpar") ifail=imminpar.set(linestream);
436 if (blockName ==
"imextpar") ifail=imextpar.set(linestream);
438 if (blockName ==
"immsq2in") ifail=immsq2in.set(linestream);
439 if (blockName ==
"immsu2in") ifail=immsu2in.set(linestream);
440 if (blockName ==
"immsd2in") ifail=immsd2in.set(linestream);
441 if (blockName ==
"immsl2in") ifail=immsl2in.set(linestream);
442 if (blockName ==
"immse2in") ifail=immse2in.set(linestream);
443 if (blockName ==
"imtuin") ifail=imtuin.set(linestream);
444 if (blockName ==
"imtdin") ifail=imtdin.set(linestream);
445 if (blockName ==
"imtein") ifail=imtein.set(linestream);
447 if (blockName ==
"spinfo" || blockName==
"dcinfo") {
450 linestream >> i >> entry;
451 string blockStr=
"RGE";
452 if (blockName==
"dcinfo") blockStr=
"DCY";
456 string warning=line.substr(line.find(
"3")+1,line.length());
457 message(1,
"readFile",
"(from "+blockStr+
" program): "+warning,0);
458 if (blockName ==
"spinfo") spinfo3.set(warning);
459 else dcinfo3.set(warning);
460 }
else if ( i == 4 ) {
461 string error=line.substr(line.find(
"4")+1,line.length());
462 message(2,
"readFile",
"(from "+blockStr+
" program): "+error,0);
463 if (blockName ==
"spinfo") spinfo4.set(error);
464 else dcinfo4.set(error);
467 for (
unsigned int j=0;j<entry.length();j++)
468 entry[j]=toupper(entry[j]);
469 ifail=(blockName==
"spinfo") ? spinfo.set(i,entry)
470 : dcinfo.set(i,entry);
478 if (blockName ==
"mass") ifail=mass.set(linestream);
481 if (blockName ==
"alpha") ifail=alpha.set(linestream,
false);
482 if (blockName ==
"stopmix") ifail=stopmix.set(linestream);
483 if (blockName ==
"sbotmix") ifail=sbotmix.set(linestream);
484 if (blockName ==
"staumix") ifail=staumix.set(linestream);
485 if (blockName ==
"nmix") ifail=nmix.set(linestream);
486 if (blockName ==
"umix") ifail=umix.set(linestream);
487 if (blockName ==
"vmix") ifail=vmix.set(linestream);
489 if (blockName ==
"usqmix") ifail=usqmix.set(linestream);
490 if (blockName ==
"dsqmix") ifail=dsqmix.set(linestream);
491 if (blockName ==
"selmix") ifail=selmix.set(linestream);
492 if (blockName ==
"snumix") ifail=snumix.set(linestream);
493 if (blockName ==
"snsmix") ifail=snsmix.set(linestream);
494 if (blockName ==
"snamix") ifail=snamix.set(linestream);
496 if (blockName ==
"rvnmix") ifail=rvnmix.set(linestream);
497 if (blockName ==
"rvumix") ifail=rvumix.set(linestream);
498 if (blockName ==
"rvvmix") ifail=rvvmix.set(linestream);
499 if (blockName ==
"rvhmix") ifail=rvhmix.set(linestream);
500 if (blockName ==
"rvamix") ifail=rvamix.set(linestream);
501 if (blockName ==
"rvlmix") ifail=rvlmix.set(linestream);
503 if (blockName ==
"cvhmix") ifail=cvhmix.set(linestream);
504 if (blockName ==
"imcvhmix") ifail=imcvhmix.set(linestream);
506 if (blockName ==
"imusqmix") ifail=imusqmix.set(linestream);
507 if (blockName ==
"imdsqmix") ifail=imdsqmix.set(linestream);
508 if (blockName ==
"imselmix") ifail=imselmix.set(linestream);
509 if (blockName ==
"imsnumix") ifail=imsnumix.set(linestream);
510 if (blockName ==
"imnmix") ifail=imnmix.set(linestream);
511 if (blockName ==
"imumix") ifail=imumix.set(linestream);
512 if (blockName ==
"imvmix") ifail=imvmix.set(linestream);
514 if (blockName ==
"nmhmix") ifail=nmhmix.set(linestream);
515 if (blockName ==
"nmamix") ifail=nmamix.set(linestream);
516 if (blockName ==
"nmnmix") ifail=nmnmix.set(linestream);
519 if (blockName ==
"gauge") ifail=gauge.set(linestream);
520 if (blockName ==
"yu") ifail=yu.set(linestream);
521 if (blockName ==
"yd") ifail=yd.set(linestream);
522 if (blockName ==
"ye") ifail=ye.set(linestream);
523 if (blockName ==
"au") ifail=au.set(linestream);
524 if (blockName ==
"ad") ifail=ad.set(linestream);
525 if (blockName ==
"ae") ifail=ae.set(linestream);
526 if (blockName ==
"hmix") ifail=hmix.set(linestream);
527 if (blockName ==
"msoft") ifail=msoft.set(linestream);
529 if (blockName ==
"vckm") ifail=vckm.set(linestream);
530 if (blockName ==
"upmns") ifail=upmns.set(linestream);
531 if (blockName ==
"msq2") ifail=msq2.set(linestream);
532 if (blockName ==
"msu2") ifail=msu2.set(linestream);
533 if (blockName ==
"msd2") ifail=msd2.set(linestream);
534 if (blockName ==
"msl2") ifail=msl2.set(linestream);
535 if (blockName ==
"mse2") ifail=mse2.set(linestream);
536 if (blockName ==
"tu") ifail=tu.set(linestream);
537 if (blockName ==
"td") ifail=td.set(linestream);
538 if (blockName ==
"te") ifail=te.set(linestream);
540 if (blockName ==
"rvlamlle") ifail=rvlamlle.set(linestream);
541 if (blockName ==
"rvlamlqd") ifail=rvlamlqd.set(linestream);
542 if (blockName ==
"rvlamudd") ifail=rvlamudd.set(linestream);
543 if (blockName ==
"rvtlle") ifail=rvtlle.set(linestream);
544 if (blockName ==
"rvtlqd") ifail=rvtlqd.set(linestream);
545 if (blockName ==
"rvtudd") ifail=rvtudd.set(linestream);
546 if (blockName ==
"rvkappa") ifail=rvkappa.set(linestream);
547 if (blockName ==
"rvd") ifail=rvd.set(linestream);
548 if (blockName ==
"rvm2lh1") ifail=rvm2lh1.set(linestream);
549 if (blockName ==
"rvsnvev") ifail=rvsnvev.set(linestream);
551 if (blockName ==
"imau") ifail=imau.set(linestream);
552 if (blockName ==
"imad") ifail=imad.set(linestream);
553 if (blockName ==
"imae") ifail=imae.set(linestream);
554 if (blockName ==
"imhmix") ifail=imhmix.set(linestream);
555 if (blockName ==
"immsoft") ifail=immsoft.set(linestream);
557 if (blockName ==
"imvckm") ifail=imvckm.set(linestream);
558 if (blockName ==
"imupmns") ifail=imupmns.set(linestream);
559 if (blockName ==
"immsq2") ifail=immsq2.set(linestream);
560 if (blockName ==
"immsu2") ifail=immsu2.set(linestream);
561 if (blockName ==
"immsd2") ifail=immsd2.set(linestream);
562 if (blockName ==
"immsl2") ifail=immsl2.set(linestream);
563 if (blockName ==
"immse2") ifail=immse2.set(linestream);
564 if (blockName ==
"imtu") ifail=imtu.set(linestream);
565 if (blockName ==
"imtd") ifail=imtd.set(linestream);
566 if (blockName ==
"imte") ifail=imte.set(linestream);
568 if (blockName ==
"nmssmrun") ifail=nmssmrun.set(linestream);
572 if (ifail == -2 && !genericBlocks[blockName].exists() ) {
573 message(0,
"readFile",
"storing non-SLHA(2) block: "+blockName,iLine);
576 message(1,
"readFile",
"read error or empty line",iLine);
579 message(0,
"readFile",blockName+
" existing entry overwritten",iLine);
585 if (line.size() >= 2) {
586 genericBlocks[blockName].set(line);
592 else if (decay !=
"") {
593 if (! decayPrinted) {
595 message(0,
"readFile",
"reading DECAY table for "+nameNow,0);
602 istringstream linestream(line);
604 if (! linestream) ok =
false;
605 if (ok) linestream >> nDa;
606 if (! linestream) ok =
false;
608 for (
int i=0; i<nDa; i++) {
610 linestream >> idThis;
615 idDa.push_back(idThis);
620 if (!ok || nDa < 2) {
621 message(1,
"readFile",
"read error or empty line",iLine);
625 decays[decayIndices[idNow]].addChannel(brat,nDa,idDa);
634 if ( lhefRead && !foundSlhaTag) {
637 else return iFailFile;
645 void SusyLesHouches::listHeader() {
646 if (verboseSav == 0)
return;
648 if (! headerPrinted) {
649 cout <<
" *----------------------- SusyLesHouches SUSY/BSM"
650 <<
" Interface ------------------------*\n";
651 message(0,
"",
"Last Change 12 Apr 2017 - P. Skands",0);
652 if (!filePrinted && slhaFile !=
"" && slhaFile !=
" ") {
653 message(0,
"",
"Parsing: "+slhaFile,0);
664 void SusyLesHouches::listFooter() {
665 if (verboseSav == 0)
return;
666 if (! footerPrinted) {
668 cout <<
" *-----------------------------------------------------"
669 <<
"-------------------------------*\n";
680 void SusyLesHouches::listSpectrum(
int ifail) {
683 if (verboseSav <= 0)
return;
686 if (! headerPrinted) listHeader();
691 message(0,
"",
" Spectrum Calculator was: "+spinfo(1)+
" version: "
693 if (lhefRead) message(0,
"",
" Read <slha> spectrum from: "+slhaFile);
694 else message(0,
"",
" Read SLHA spectrum from: "+slhaFile);
699 message(0,
"",
" Check revealed problems. Only using masses.");
704 cout <<
" | ~g m" << endl;
705 cout << setprecision(3) <<
" | 1000021 " << setw(10) <<
706 ( (mass(2000003) > 1e7) ? scientific : fixed) << mass(1000021) << endl;
710 cout <<
" | ~d m |~dL| |~sL| |~bL|"
711 <<
" |~dR| |~sR| |~bR|" << endl;
713 cout << setprecision(3) <<
" | 1000001 " << setw(10)
714 << ( (mass(1000001) > 1e7) ? scientific : fixed) << mass(1000001)
716 for (
int icur=1;icur<=6;icur++) cout << setw(6)
717 << sqrt(pow2(dsqmix(1,icur))+pow2(imdsqmix(1,icur))) <<
" ";
719 cout << endl <<
" | 1000003 " << setw(10)
720 << ( (mass(1000003) > 1e7) ? scientific : fixed) << mass(1000003)
722 for (
int icur=1;icur<=6;icur++) cout << setw(6)
723 << sqrt(pow2(dsqmix(2,icur))+pow2(imdsqmix(2,icur))) <<
" ";
725 cout << endl <<
" | 1000005 " << setw(10)
726 << ( (mass(1000005) > 1e7) ? scientific : fixed) << mass(1000005)
728 for (
int icur=1;icur<=6;icur++) cout << setw(6)
729 << sqrt(pow2(dsqmix(3,icur))+pow2(imdsqmix(3,icur))) <<
" ";
731 cout << endl <<
" | 2000001 " << setw(10)
732 << ( (mass(2000001) > 1e7) ? scientific : fixed) << mass(2000001)
734 for (
int icur=1;icur<=6;icur++) cout << setw(6)
735 << sqrt(pow2(dsqmix(4,icur))+pow2(imdsqmix(4,icur))) <<
" ";
737 cout << endl <<
" | 2000003 " << setw(10)
738 << ( (mass(2000003) > 1e7) ? scientific : fixed) << mass(2000003)
740 for (
int icur=1;icur<=6;icur++) cout << setw(6)
741 << sqrt(pow2(dsqmix(5,icur))+pow2(imdsqmix(5,icur))) <<
" ";
743 cout << endl <<
" | 2000005 " << setw(10)
744 << ( (mass(2000005) > 1e7) ? scientific : fixed) << mass(2000005)
746 for (
int icur=1;icur<=6;icur++) cout << setw(6)
747 << sqrt(pow2(dsqmix(6,icur))+pow2(imdsqmix(6,icur))) <<
" ";
753 cout <<
" | ~u m |~uL| |~cL| |~tL|"
754 <<
" |~uR| |~cR| |~tR|" << endl;
756 cout << setprecision(3) <<
" | 1000002 " << setw(10)
757 << ( (mass(1000002) > 1e7) ? scientific : fixed) << mass(1000002)
759 for (
int icur=1;icur<=6;icur++) cout <<setw(6)
760 << sqrt(pow2(usqmix(1,icur))+pow2(imusqmix(1,icur))) <<
" ";
762 cout << endl <<
" | 1000004 " << setw(10)
763 << ( (mass(1000004) > 1e7) ? scientific : fixed) << mass(1000004)
765 for (
int icur=1;icur<=6;icur++) cout << setw(6)
766 << sqrt(pow2(usqmix(2,icur))+pow2(imusqmix(2,icur))) <<
" ";
768 cout << endl <<
" | 1000006 " << setw(10)
769 << ( (mass(1000006) > 1e7) ? scientific : fixed) << mass(1000006)
771 for (
int icur=1;icur<=6;icur++) cout << setw(6)
772 << sqrt(pow2(usqmix(3,icur))+pow2(imusqmix(3,icur))) <<
" ";
774 cout << endl <<
" | 2000002 " << setw(10)
775 << ( (mass(2000002) > 1e7) ? scientific : fixed) << mass(2000002)
777 for (
int icur=1;icur<=6;icur++) cout << setw(6)
778 << sqrt(pow2(usqmix(4,icur))+pow2(imusqmix(4,icur))) <<
" ";
780 cout << endl <<
" | 2000004 " << setw(10)
781 << ( (mass(2000004) > 1e7) ? scientific : fixed) << mass(2000004)
783 for (
int icur=1;icur<=6;icur++) cout << setw(6)
784 << sqrt(pow2(usqmix(5,icur))+pow2(imusqmix(5,icur))) <<
" ";
786 cout << endl <<
" | 2000006 " << setw(10)
787 << ( (mass(2000006) > 1e7) ? scientific : fixed) << mass(2000006)
789 for (
int icur=1;icur<=6;icur++) cout << setw(6)
790 << sqrt(pow2(usqmix(6,icur))+pow2(imusqmix(6,icur))) <<
" ";
799 cout <<
" | ~e m |~eL| |~muL| |~tauL|"
800 <<
" |~eR| |~muR| |~tauR|" << endl;
802 cout << setprecision(3) <<
" | 1000011 " << setw(10)
803 << ( (mass(1000011) > 1e7) ? scientific : fixed) << mass(1000011)
805 for (
int icur=1;icur<=6;icur++) cout << setw(6)
806 << sqrt(pow2(selmix(1,icur))+pow2(imselmix(1,icur))) <<
" ";
808 cout << endl <<
" | 1000013 " << setw(10)
809 << ( (mass(1000013) > 1e7) ? scientific : fixed) << mass(1000013)
811 for (
int icur=1;icur<=6;icur++) cout << setw(6)
812 << sqrt(pow2(selmix(2,icur))+pow2(imselmix(2,icur))) <<
" ";
814 cout << endl <<
" | 1000015 " << setw(10)
815 << ( (mass(1000015) > 1e7) ? scientific : fixed) << mass(1000015)
817 for (
int icur=1;icur<=6;icur++) cout << setw(6)
818 << sqrt(pow2(selmix(3,icur))+pow2(imselmix(3,icur))) <<
" ";
820 cout << endl <<
" | 2000011 " << setw(10)
821 << ( (mass(2000011) > 1e7) ? scientific : fixed) << mass(2000011)
823 for (
int icur=1;icur<=6;icur++) cout << setw(6)
824 << sqrt(pow2(selmix(4,icur))+pow2(imselmix(4,icur))) <<
" ";
826 cout << endl <<
" | 2000013 " << setw(10)
827 << ( (mass(2000013) > 1e7) ? scientific : fixed) << mass(2000013)
829 for (
int icur=1;icur<=6;icur++) cout << setw(6)
830 << sqrt(pow2(selmix(5,icur))+pow2(imselmix(5,icur))) <<
" ";
832 cout << endl <<
" | 2000015 " << setw(10)
833 << ( (mass(2000015) > 1e7) ? scientific : fixed) << mass(2000015)
835 for (
int icur=1;icur<=6;icur++) cout << setw(6)
836 << sqrt(pow2(selmix(6,icur))+pow2(imselmix(6,icur)))<<
" ";
841 cout <<
" | H-/~e m H1- H2- ~eL ~muL"
842 <<
" ~tauL ~eR ~muR ~tauR" << endl;
844 cout << setprecision(3) <<
" | -37 " << setw(10) <<
845 ( (mass(37) > 1e7) ? scientific : fixed) << mass(37) << fixed <<
" ";
846 for (
int icur=1;icur<=8;icur++) cout << setw(6) << rvlmix(1,icur) <<
" ";
848 cout << endl <<
" | 1000011 " << setw(10)
849 << ( (mass(1000011) > 1e7) ? scientific : fixed) << mass(1000011)
851 for (
int icur=1;icur<=8;icur++) cout << setw(6) << rvlmix(2,icur) <<
" ";
853 cout << endl <<
" | 1000013 " << setw(10)
854 << ( (mass(1000013) > 1e7) ? scientific : fixed) << mass(1000013)
856 for (
int icur=1;icur<=8;icur++) cout << setw(6) << rvlmix(3,icur) <<
" ";
858 cout << endl <<
" | 1000015 " << setw(10)
859 << ( (mass(1000015) > 1e7) ? scientific : fixed) << mass(1000015)
861 for (
int icur=1;icur<=8;icur++) cout << setw(6) << rvlmix(4,icur) <<
" ";
863 cout << endl <<
" | 2000011 " << setw(10)
864 << ( (mass(2000011) > 1e7) ? scientific : fixed) << mass(2000011)
866 for (
int icur=1;icur<=8;icur++) cout << setw(6) << rvlmix(5,icur) <<
" ";
868 cout << endl <<
" | 2000013 " << setw(10)
869 << ( (mass(2000013) > 1e7) ? scientific : fixed) << mass(2000013)
871 for (
int icur=1;icur<=8;icur++) cout << setw(6) << rvlmix(6,icur) <<
" ";
873 cout << endl <<
" | 2000015 " << setw(10)
874 << ( (mass(2000015) > 1e7) ? scientific : fixed) << mass(2000015)
876 for (
int icur=1;icur<=8;icur++) cout << setw(6) << rvlmix(7,icur) <<
" ";
886 if (snumix.exists()) cout <<
" |~nu_e| |~nu_mu||~nu_tau|";
889 cout << setprecision(3) <<
" | 1000012 " << setw(10)
890 << ( (mass(1000012) > 1e7) ? scientific : fixed) << mass(1000012)
893 for (
int icur=1;icur<=3;icur++) cout << setw(7)
894 << sqrt(pow2(snumix(1,icur))+pow2(imsnumix(1,icur))) <<
" ";
896 cout << endl <<
" | 1000014 " << setw(10)
897 << ( (mass(1000014) > 1e7) ? scientific : fixed) << mass(1000014)
900 for (
int icur=1;icur<=3;icur++) cout << setw(7)
901 << sqrt(pow2(snumix(2,icur))+pow2(imsnumix(2,icur))) <<
" ";
903 cout << endl <<
" | 1000016 " << setw(10)
904 << ( (mass(1000016) > 1e7) ? scientific : fixed) << mass(1000016)
907 for (
int icur=1;icur<=3;icur++) cout << setw(7)
908 << sqrt(pow2(snumix(3,icur))+pow2(imsnumix(3,icur))) <<
" ";
913 cout <<
" | H0/~nu m";
914 if (snumix.exists()) cout <<
" H0_1 H0_2 ~nu_e ~nu_mu ~nu_tau";
917 cout << setprecision(3) <<
" | 25 " << setw(10)
918 << ( (mass(25) > 1e7) ? scientific : fixed) << mass(25)
920 if (rvhmix.exists())
for (
int icur=1;icur<=5;icur++)
921 cout << setw(6) << rvhmix(1,icur) <<
" ";
923 cout << endl <<
" | 35 " << setw(10)
924 << ( (mass(35) > 1e7) ? scientific : fixed) << mass(35)
926 if (rvhmix.exists())
for (
int icur=1;icur<=5;icur++)
927 cout << setw(6) << rvhmix(2,icur) <<
" ";
929 cout << endl <<
" | 1000012 " << setw(10)
930 << ( (mass(1000012) > 1e7) ? scientific : fixed) << mass(1000012)
932 if (rvhmix.exists())
for (
int icur=1;icur<=5;icur++)
933 cout << setw(6) << rvhmix(3,icur) <<
" ";
935 cout << endl <<
" | 1000014 " << setw(10)
936 << ( (mass(1000014) > 1e7) ? scientific : fixed) << mass(1000014)
938 if (rvhmix.exists())
for (
int icur=1;icur<=5;icur++)
939 cout << setw(6) << rvhmix(4,icur) <<
" ";
941 cout << endl <<
" | 1000016 " << setw(10)
942 << ( (mass(1000016) > 1e7) ? scientific : fixed) << mass(1000016)
944 if (rvhmix.exists())
for (
int icur=1;icur<=5;icur++)
945 cout << setw(6) << rvhmix(5,icur) <<
" ";
950 if (modsel(4) >= 1 && rvamix.exists()) {
952 cout <<
" | A0/~nu m A0_1 A0_2 ~nu_e ~nu_mu ~nu_tau"
955 cout << setprecision(3) <<
" | 36 " << setw(10)
956 << ( (mass(36) > 1e7) ? scientific : fixed) << mass(36)
958 for (
int icur=1;icur<=5;icur++) cout << setw(6) << rvamix(1,icur) <<
" ";
960 cout << endl <<
" | 1000017 " << setw(10)
961 << ( (mass(1000017) > 1e7) ? scientific : fixed) << mass(1000017)
963 for (
int icur=1;icur<=5;icur++) cout << setw(6) << rvamix(2,icur) <<
" ";
965 cout << endl <<
" | 1000018 " << setw(10)
966 << ( (mass(1000018) > 1e7) ? scientific : fixed) << mass(1000018)
968 for (
int icur=1;icur<=5;icur++) cout << setw(6) << rvamix(3,icur) <<
" ";
970 cout << endl <<
" | 1000019 " << setw(10)
971 << ( (mass(1000019) > 1e7) ? scientific : fixed) << mass(1000019)
973 for (
int icur=1;icur<=5;icur++) cout << setw(6) << rvamix(4,icur) <<
" ";
982 if (modsel(3) >= 1) {
983 cout <<
" | ~chi0 m |~B| |~W_3| |~H_1| |~H_2| |~S|"
986 cout << setprecision(3) <<
" | 1000022 " << setw(10)
987 << ( (mass(1000022) > 1e7) ? scientific : fixed) << mass(1000022)
989 for (
int icur=1;icur<=5;icur++)
990 cout <<setw(6)<< sqrt(pow2(nmnmix(1,icur))+pow2(imnmnmix(1,icur)))<<
" ";
992 cout << endl <<
" | 1000023 " << setw(10)
993 << ( (mass(1000023) > 1e7) ? scientific : fixed) << mass(1000023)
995 for (
int icur=1;icur<=5;icur++)
996 cout <<setw(6)<< sqrt(pow2(nmnmix(2,icur))+pow2(imnmnmix(2,icur)))<<
" ";
998 cout << endl <<
" | 1000025 " << setw(10)
999 << ( (mass(1000025) > 1e7) ? scientific : fixed) << mass(1000025)
1001 for (
int icur=1;icur<=5;icur++) cout << setw(6)
1002 << sqrt(pow2(nmnmix(3,icur))+pow2(imnmnmix(3,icur))) <<
" ";
1004 cout << endl <<
" | 1000035 " << setw(10)
1005 << ( (mass(1000035) > 1e7) ? scientific : fixed) << mass(1000035)
1007 for (
int icur=1;icur<=5;icur++) cout << setw(6)
1008 << sqrt(pow2(nmnmix(4,icur))+pow2(imnmnmix(4,icur))) <<
" ";
1010 cout << endl <<
" | 1000045 " << setw(10)
1011 << ( (mass(1000045) > 1e7) ? scientific : fixed) << mass(1000045)
1013 for (
int icur=1;icur<=5;icur++) cout << setw(6)
1014 << sqrt(pow2(nmnmix(5,icur))+pow2(imnmnmix(5,icur))) <<
" ";
1019 else if (modsel(4) < 1) {
1020 cout <<
" | ~chi0 m |~B| |~W_3| |~H_1| |~H_2|"
1023 cout << setprecision(3) <<
" | 1000022 " << setw(10)
1024 << ( (mass(1000022) > 1e7) ? scientific : fixed) << mass(1000022)
1026 for (
int icur=1;icur<=4;icur++)
1027 cout << setw(6) << sqrt(pow2(nmix(1,icur))+pow2(imnmix(1,icur))) <<
" ";
1029 cout << endl <<
" | 1000023 " << setw(10)
1030 << ( (mass(1000023) > 1e7) ? scientific : fixed) << mass(1000023)
1032 for (
int icur=1;icur<=4;icur++)
1033 cout << setw(6) << sqrt(pow2(nmix(2,icur))+pow2(imnmix(2,icur))) <<
" ";
1035 cout << endl <<
" | 1000025 " << setw(10)
1036 << ( (mass(1000025) > 1e7) ? scientific : fixed) << mass(1000025)
1038 for (
int icur=1;icur<=4;icur++)
1039 cout << setw(6) << sqrt(pow2(nmix(3,icur))+pow2(imnmix(3,icur))) <<
" ";
1041 cout << endl <<
" | 1000035 " << setw(10)
1042 << ( (mass(1000035) > 1e7) ? scientific : fixed) << mass(1000035)
1044 for (
int icur=1;icur<=4;icur++)
1045 cout << setw(6) << sqrt(pow2(nmix(4,icur))+pow2(imnmix(4,icur))) <<
" ";
1051 cout <<
" | nu/~chi0 m nu_e nu_mu nu_tau ~B"
1052 <<
" ~W_3 ~H_1 ~H_2" << endl;
1054 cout << setprecision(3) <<
" | 12 " << setw(10)
1055 << ( (mass(12) > 1e7) ? scientific : fixed) << mass(12)
1057 for (
int icur=1;icur<=7;icur++) cout << setw(6) << rvnmix(1,icur) <<
" ";
1059 cout << endl <<
" | 14 " << setw(10)
1060 << ( (mass(14) > 1e7) ? scientific : fixed) << mass(14)
1062 for (
int icur=1;icur<=7;icur++) cout << setw(6) << rvnmix(2,icur) <<
" ";
1064 cout << endl <<
" | 16 " << setw(10) <<
1065 ( (mass(16) > 1e7) ? scientific : fixed) << mass(16) << fixed <<
" ";
1066 for (
int icur=1;icur<=7;icur++) cout << setw(6) << rvnmix(3,icur) <<
" ";
1068 cout << endl <<
" | 1000022 " << setw(10)
1069 << ( (mass(1000022) > 1e7) ? scientific : fixed) << mass(1000022)
1071 for (
int icur=1;icur<=7;icur++) cout << setw(6) << rvnmix(4,icur) <<
" ";
1073 cout << endl <<
" | 1000023 " << setw(10)
1074 << ( (mass(1000023) > 1e7) ? scientific : fixed) << mass(1000023)
1076 for (
int icur=1;icur<=7;icur++) cout << setw(6) << rvnmix(5,icur) <<
" ";
1078 cout << endl <<
" | 1000025 " << setw(10)
1079 << ( (mass(1000025) > 1e7) ? scientific : fixed) << mass(1000025)
1081 for (
int icur=1;icur<=7;icur++) cout << setw(6) << rvnmix(6,icur) <<
" ";
1083 cout << endl <<
" | 1000035 " << setw(10)
1084 << ( (mass(1000035) > 1e7) ? scientific : fixed) << mass(1000035)
1086 for (
int icur=1;icur<=7;icur++) cout << setw(6) << rvnmix(7,icur) <<
" ";
1094 if (modsel(4) < 1) {
1095 cout <<
" | ~chi+ m U: |~W| |~H| ; V: |~W| |~H|"
1098 cout << setprecision(3) <<
" | 1000024 " << setw(10)
1099 << ((mass(1000024) > 1e7) ? scientific : fixed) << mass(1000024)
1101 for (
int icur=1;icur<=2;icur++)
1102 cout << setw(6) << sqrt(pow2(umix(1,icur))+pow2(imumix(1,icur))) <<
" ";
1104 for (
int icur=1;icur<=2;icur++)
1105 cout << setw(6) << sqrt(pow2(vmix(1,icur))+pow2(imvmix(1,icur))) <<
" ";
1107 cout << endl <<
" | 1000037 " << setw(10)
1108 << ((mass(1000037) > 1e7) ? scientific : fixed) << mass(1000037)
1110 for (
int icur=1;icur<=2;icur++)
1111 cout << setw(6) << sqrt(pow2(umix(2,icur))+pow2(imumix(2,icur))) <<
" ";
1113 for (
int icur=1;icur<=2;icur++)
1114 cout << setw(6) << sqrt(pow2(vmix(2,icur))+pow2(imvmix(2,icur))) <<
" ";
1119 cout <<
" | e+/~chi+ m U: eL+ muL+ tauL+ ~W+"
1120 <<
" ~H1+ | V: eR+ muR+ tauR+ ~W+ ~H2+" << endl;
1122 cout << setprecision(3) <<
" | -11 " << setw(10)
1123 << ((mass(11) > 1e7) ? scientific : fixed) << mass(11)
1125 for (
int icur=1;icur<=5;icur++) cout << setw(6) << rvumix(1,icur) <<
" ";
1127 for (
int icur=1;icur<=5;icur++) cout << setw(6) << rvvmix(1,icur) <<
" ";
1129 cout << endl <<
" | -13 " << setw(10)
1130 << ((mass(13) > 1e7) ? scientific : fixed) << mass(13)
1132 for (
int icur=1;icur<=5;icur++) cout << setw(6) << rvumix(2,icur) <<
" ";
1134 for (
int icur=1;icur<=5;icur++) cout << setw(6) << rvvmix(2,icur) <<
" ";
1136 cout << endl <<
" | -15 " << setw(10)
1137 << ((mass(15) > 1e7) ? scientific : fixed) << mass(15)
1139 for (
int icur=1;icur<=5;icur++) cout << setw(6) << rvumix(3,icur) <<
" ";
1141 for (
int icur=1;icur<=5;icur++) cout << setw(6) << rvvmix(3,icur) <<
" ";
1143 cout << endl <<
" | 1000024 " << setw(10)
1144 << ((mass(1000024) > 1e7) ? scientific : fixed) << mass(1000024)
1146 for (
int icur=1;icur<=5;icur++) cout << setw(6) << rvumix(4,icur) <<
" ";
1148 for (
int icur=1;icur<=5;icur++) cout << setw(6) << rvvmix(4,icur) <<
" ";
1150 cout << endl <<
" | 1000037 " << setw(10)
1151 << ((mass(1000037) > 1e7) ? scientific : fixed) << mass(1000037)
1153 for (
int icur=1;icur<=5;icur++) cout << setw(6) << rvumix(5,icur) <<
" ";
1155 for (
int icur=1;icur<=5;icur++) cout << setw(6) << rvvmix(5,icur) <<
" ";
1163 if (modsel(3) >= 1) {
1165 if (nmhmix.exists()) cout <<
" H_10 H_20 S0";
1168 cout << setprecision(3) <<
" | 25 " << setw(10)
1169 << ( (mass(25) > 1e7) ? scientific : fixed) << mass(25)
1171 if (nmhmix.exists())
for (
int icur=1;icur<=3;icur++)
1172 cout << setw(6) << nmhmix(1,icur) <<
" ";
1174 cout << endl <<
" | 35 " << setw(10)
1175 << ( (mass(35) > 1e7) ? scientific : fixed) << mass(35)
1177 if (nmhmix.exists())
for (
int icur=1;icur<=3;icur++)
1178 cout << setw(6) << nmhmix(2,icur) <<
" ";
1180 cout << endl <<
" | 45 " << setw(10)
1181 << ( (mass(45) > 1e7) ? scientific : fixed) << mass(45)
1183 if (nmhmix.exists())
for (
int icur=1;icur<=3;icur++)
1184 cout << setw(6) << nmhmix(3,icur) <<
" ";
1186 cout << endl <<
" |"<<endl;
1188 if (nmamix.exists()) cout <<
" H_10 H_20 S0";
1191 cout << setprecision(3) <<
" | 36 " << setw(10)
1192 << ( (mass(36) > 1e7) ? scientific : fixed) << mass(36)
1194 if (nmamix.exists())
for (
int icur=1;icur<=3;icur++)
1195 cout << setw(6) << nmamix(1,icur) <<
" ";
1197 cout << endl <<
" | 46 " << setw(10)
1198 << ( (mass(46) > 1e7) ? scientific : fixed) << mass(46)
1200 if (nmamix.exists())
for (
int icur=1;icur<=3;icur++)
1201 cout << setw(6) << nmamix(2,icur) <<
" ";
1203 cout << endl <<
" |"<<endl;
1204 cout <<
" | H+ m"<< endl;
1206 cout << setprecision(3) <<
" | 37 " << setw(10)
1207 << ( (mass(37) > 1e7) ? scientific : fixed) << mass(37)<<endl;
1209 cout << endl<<
" |"<<endl;
1212 else if (modsel(4) < 1) {
1213 cout <<
" | Higgs m"<<endl;
1214 cout << setprecision(3) <<
" | 25 " << setw(10)
1215 << ( (mass(25) > 1e7) ? scientific : fixed) << mass(25)<<endl;
1216 cout << setprecision(3) <<
" | 35 " << setw(10)
1217 << ( (mass(35) > 1e7) ? scientific : fixed) << mass(35)<<endl;
1218 cout << setprecision(3) <<
" | 36 " << setw(10)
1219 << ( (mass(36) > 1e7) ? scientific : fixed) << mass(36)<<endl;
1220 cout << setprecision(3) <<
" | 37 " << setw(10)
1221 << ( (mass(37) > 1e7) ? scientific : fixed) << mass(37)<<endl;
1223 cout <<
" | alpha ";
1224 if (alpha.exists()) cout << setw(8) << alpha();
1225 else cout <<
" absent";
1226 cout << endl<<
" |"<<endl;
1229 if (hmix.exists()) {
1230 cout <<
" | Hmix "<<endl;
1232 if (hmix.exists(1)) cout << setw(8) << hmix(1)
1233 <<
" (DRbar running value at Q = " << hmix.q() <<
" GeV)";
1234 else cout <<
" absent";
1235 cout <<
"\n | tan(beta) ";
1236 if (hmix.exists(2)) cout << setw(8) << hmix(2)
1237 <<
" (DRbar running value at Q = " << hmix.q() <<
" GeV)";
1238 else cout <<
" absent";
1240 if (hmix.exists(3)) cout << setw(8) << hmix(3)
1241 <<
" (DRbar running value at Q = " << hmix.q() <<
" GeV)";
1242 else cout <<
" absent";
1244 if (hmix.exists(4)) cout << setw(9)
1245 << ((abs(hmix(4)) > 1e5) ? scientific : fixed) << hmix(4)
1246 <<
" (DRbar running value at Q = " << fixed << hmix.q() <<
" GeV)";
1247 else cout <<
" absent";
1253 if (gauge.exists()) {
1254 cout <<
" | Gauge " << endl;
1256 if (gauge.exists(1)) cout << setw(8) << gauge(1)
1257 <<
" (DRbar running value at Q = " << hmix.q() <<
" GeV)";
1258 else cout <<
" absent";
1260 if (gauge.exists(2)) cout << setw(8) << gauge(2)
1261 <<
" (DRbar running value at Q = " << hmix.q() <<
" GeV)";
1262 else cout <<
" absent";
1264 if (gauge.exists(3)) cout << setw(8) << gauge(3)
1265 <<
" (DRbar running value at Q = " << hmix.q() <<
" GeV)";
1266 else cout <<
" absent";
1271 footerPrinted=
false;
1280 int SusyLesHouches::checkSpectrum() {
1282 if (! headerPrinted) listHeader();
1284 bool foundModsel = modsel.exists();
1285 if (! foundModsel) {
1286 if (mass.exists())
return 1;
1291 if (!modsel.exists(1)) {
1292 message(1,
"checkSpectrum",
"MODSEL(1) undefined. Assuming = 0",0);
1296 if (!modsel.exists(3)) modsel.set(3,0);
1297 if (!modsel.exists(4)) modsel.set(4,0);
1298 if (!modsel.exists(5)) modsel.set(5,0);
1299 if (!modsel.exists(6)) modsel.set(6,0);
1300 if (!modsel.exists(11)) modsel.set(11,1);
1305 if (!minpar.exists()) {
1306 message(1,
"checkSpectrum",
"MINPAR not found",0);
1308 if (!sminputs.exists()) {
1309 message(1,
"checkSpectrum",
"SMINPUTS not found",0);
1311 if (!mass.exists()) {
1312 message(1,
"checkSpectrum",
"MASS not found",0);
1314 if (!gauge.exists()) {
1315 message(1,
"checkSpectrum",
"GAUGE not found",0);
1319 if (modsel(3) == 0 && modsel(4) == 0 && modsel(5) == 0 && modsel(6) == 0) {
1321 if (!staumix.exists() && !selmix.exists()) {
1322 message(1,
"checkSpectrum",
"STAUMIX or SELMIX not found",0);
1324 if (!sbotmix.exists() && !dsqmix.exists()) {
1325 message(1,
"checkSpectrum",
"SBOTMIX or DSQMIX not found",0);
1327 if (!stopmix.exists() && !usqmix.exists()) {
1328 message(1,
"checkSpectrum",
"STOPMIX or USQMIX not found",0);
1330 if (!nmix.exists()) {
1331 message(1,
"checkSpectrum",
"NMIX not found",0);
1333 if (!umix.exists()) {
1334 message(1,
"checkSpectrum",
"UMIX not found",0);
1336 if (!vmix.exists()) {
1337 message(1,
"checkSpectrum",
"VMIX not found",0);
1339 if (modsel(3) == 0 && !alpha.exists()) {
1340 message(1,
"checkSpectrum",
"ALPHA not found",0);
1342 if (!hmix.exists()) {
1343 message(1,
"checkSpectrum",
"HMIX not found",0);
1345 if (!msoft.exists()) {
1346 message(1,
"checkSpectrum",
"MSOFT not found",0);
1351 else if (modsel(4) != 0) {
1353 if (!rvnmix.exists()) {
1354 if (nmix.exists()) {
1355 message(1,
"checkSpectrum",
1356 "MODSEL 4 != 0 but NMIX given instead of RVNMIX",0);
1357 for (
int i=1; i<=4; i++) {
1358 if (i<=3) rvnmix.set(i,i,1.0);
1359 for (
int j=1; j<=4; j++)
1360 rvnmix.set(i+3,j+3,nmix(i,j));
1363 message(1,
"checkSpectrum",
"MODSEL 4 != 0 but RVNMIX not found",0);
1367 if (!rvumix.exists()) {
1368 if (umix.exists()) {
1369 message(1,
"checkSpectrum",
1370 "MODSEL 4 != 0 but UMIX given instead of RVUMIX",0);
1371 for (
int i=1; i<=3; i++) rvumix.set(i,i,1.0);
1372 for (
int i=1; i<=2; i++) {
1373 for (
int j=1; j<=2; j++)
1374 rvumix.set(i+3,j+3,umix(i,j));
1377 message(1,
"checkSpectrum",
"MODSEL 4 != 0 but RVUMIX not found",0);
1381 if (!rvvmix.exists()) {
1382 if (vmix.exists()) {
1383 message(1,
"checkSpectrum",
1384 "MODSEL 4 != 0 but VMIX given instead of RVVMIX",0);
1385 for (
int i=1; i<=3; i++) rvvmix.set(i,i,1.0);
1386 for (
int i=1; i<=2; i++) {
1387 for (
int j=1; j<=2; j++)
1388 rvvmix.set(i+3,j+3,vmix(i,j));
1391 message(1,
"checkSpectrum",
"MODSEL 4 != 0 but RVVMIX not found",0);
1395 if (!rvhmix.exists()) {
1396 if (alpha.exists()) {
1397 message(1,
"checkSpectrum",
1398 "MODSEL 4 != 0 but ALPHA given instead of RVHMIX",0);
1399 rvhmix.set(1,1,cos(alpha()));
1400 rvhmix.set(1,2,sin(alpha()));
1401 rvhmix.set(2,1,-sin(alpha()));
1402 rvhmix.set(2,2,cos(alpha()));
1403 rvhmix.set(3,3,1.0);
1404 rvhmix.set(4,4,1.0);
1405 rvhmix.set(5,5,1.0);
1407 message(1,
"checkSpectrum",
"MODSEL 4 != 0 but RVHMIX not found",0);
1411 if (!rvamix.exists()) {
1412 message(1,
"checkSpectrum",
"MODSEL 4 != 0 but RVAMIX not found",0);
1414 if (!rvlmix.exists()) {
1415 if (selmix.exists()) {
1416 message(1,
"checkSpectrum",
1417 "MODSEL 4 != 0 but SELMIX given instead of RVLMIX",0);
1418 for (
int i=1; i<=6; i++) {
1419 for (
int j=6; j<=6; j++)
1420 rvlmix.set(i+1,j+2,selmix(i,j));
1422 }
if (staumix.exists()) {
1423 message(1,
"checkSpectrum",
1424 "MODSEL 4 != 0 but STAUMIX given instead of RVLMIX",0);
1425 rvlmix.set(2,3,1.0);
1426 rvlmix.set(3,4,1.0);
1427 rvlmix.set(4,5,staumix(1,1));
1428 rvlmix.set(4,8,staumix(1,2));
1429 rvlmix.set(5,6,1.0);
1430 rvlmix.set(6,7,1.0);
1431 rvlmix.set(7,5,staumix(2,1));
1432 rvlmix.set(7,8,staumix(2,2));
1434 message(1,
"checkSpectrum",
"MODSEL 4 != 0 but RVLMIX not found",0);
1438 if (!usqmix.exists()) {
1439 if (stopmix.exists()) {
1440 message(1,
"checkSpectrum",
1441 "MODSEL 4 != 0 but STOPMIX given instead of USQMIX",0);
1442 usqmix.set(1,1, 1.0);
1443 usqmix.set(2,2, 1.0);
1444 usqmix.set(4,4, 1.0);
1445 usqmix.set(5,5, 1.0);
1446 usqmix.set(3,3, stopmix(1,1));
1447 usqmix.set(3,6, stopmix(1,2));
1448 usqmix.set(6,3, stopmix(2,1));
1449 usqmix.set(6,6, stopmix(2,2));
1451 message(1,
"checkSpectrum",
"MODSEL 4 != 0 but USQMIX not found",0);
1455 if (!dsqmix.exists()) {
1456 if (sbotmix.exists()) {
1457 message(1,
"checkSpectrum",
1458 "MODSEL 4 != 0 but SBOTMIX given instead of DSQMIX",0);
1459 dsqmix.set(1,1, 1.0);
1460 dsqmix.set(2,2, 1.0);
1461 dsqmix.set(4,4, 1.0);
1462 dsqmix.set(5,5, 1.0);
1463 dsqmix.set(3,3, sbotmix(1,1));
1464 dsqmix.set(3,6, sbotmix(1,2));
1465 dsqmix.set(6,3, sbotmix(2,1));
1466 dsqmix.set(6,6, sbotmix(2,2));
1468 message(1,
"checkSpectrum",
"MODSEL 4 != 0 but DSQMIX not found",0);
1475 else if (modsel(6) != 0) {
1477 if (modsel(6) != 2) {
1478 if (!usqmix.exists()) {
1479 message(1,
"checkSpectrum",
"quark FLV on but USQMIX not found",0);
1482 if (!dsqmix.exists()) {
1483 message(1,
"checkSpectrum",
"quark FLV on but DSQMIX not found",0);
1488 if (modsel(6) != 1) {
1489 if (!upmns.exists()) {
1490 message(1,
"checkSpectrum",
"lepton FLV on but UPMNSIN not found",0);
1493 if (!selmix.exists()) {
1494 message(1,
"checkSpectrum",
"lepton FLV on but SELMIX not found",0);
1497 if (!snumix.exists() && !snsmix.exists()) {
1498 message(1,
"checkSpectrum",
"lepton FLV on but SNUMIX not found",0);
1505 if (modsel(5) != 0) {
1506 if (!cvhmix.exists()) {
1507 message(1,
"checkSpectrum",
"MODSEL 5 != 0 but CVHMIX not found",0);
1513 if (modsel(6) != 0) {
1515 if (modsel(6) != 2) {
1516 if (!vckmin.exists()) {
1517 message(1,
"checkSpectrum",
"quark FLV on but VCKMIN not found",0);
1520 if (!msq2in.exists()) {
1521 message(0,
"checkSpectrum",
"note: quark FLV on but MSQ2IN not found",0);
1524 if (!msu2in.exists()) {
1525 message(0,
"checkSpectrum",
"note: quark FLV on but MSU2IN not found",0);
1528 if (!msd2in.exists()) {
1529 message(0,
"checkSpectrum",
"note: quark FLV on but MSD2IN not found",0);
1532 if (!tuin.exists()) {
1533 message(0,
"checkSpectrum",
"note: quark FLV on but TUIN not found",0);
1536 if (!tdin.exists()) {
1537 message(0,
"checkSpectrum",
"note: quark FLV on but TDIN not found",0);
1542 if (modsel(6) != 1) {
1543 if (!msl2in.exists()) {
1544 message(0,
"checkSpectrum",
1545 "note: lepton FLV on but MSL2IN not found",0);
1548 if (!mse2in.exists()) {
1549 message(0,
"checkSpectrum",
1550 "note: lepton FLV on but MSE2IN not found",0);
1553 if (!tein.exists()) {
1554 message(0,
"checkSpectrum",
1555 "note: lepton FLV on but TEIN not found",0);
1565 if (stopmix.exists() && ! usqmix.exists() ) {
1567 usqmix.set(1,1, 1.0);
1568 usqmix.set(2,2, 1.0);
1569 usqmix.set(4,4, 1.0);
1570 usqmix.set(5,5, 1.0);
1572 usqmix.set(3,3, stopmix(1,1));
1573 usqmix.set(3,6, stopmix(1,2));
1574 usqmix.set(6,3, stopmix(2,1));
1575 usqmix.set(6,6, stopmix(2,2));
1577 if (sbotmix.exists() && ! dsqmix.exists() ) {
1579 dsqmix.set(1,1, 1.0);
1580 dsqmix.set(2,2, 1.0);
1581 dsqmix.set(4,4, 1.0);
1582 dsqmix.set(5,5, 1.0);
1584 dsqmix.set(3,3, sbotmix(1,1));
1585 dsqmix.set(3,6, sbotmix(1,2));
1586 dsqmix.set(6,3, sbotmix(2,1));
1587 dsqmix.set(6,6, sbotmix(2,2));
1589 if (staumix.exists() && ! selmix.exists() ) {
1591 selmix.set(1,1, 1.0);
1592 selmix.set(2,2, 1.0);
1593 selmix.set(4,4, 1.0);
1594 selmix.set(5,5, 1.0);
1596 selmix.set(3,3, staumix(1,1));
1597 selmix.set(3,6, staumix(1,2));
1598 selmix.set(6,3, staumix(2,1));
1599 selmix.set(6,6, staumix(2,2));
1601 if (! snumix.exists() && ! snsmix.exists()) {
1603 snumix.set(1,1, 1.0);
1604 snumix.set(2,2, 1.0);
1605 snumix.set(3,3, 1.0);
1611 if (mass.exists()) {
1613 if (abs(mass(25)) > abs(mass(35))
1614 || (modsel(3) == 1 && abs(mass(35)) > abs(mass(45))) )
1615 message(0,
"checkSpectrum",
"Note: Higgs sector is not mass-ordered",0);
1617 if (modsel(3) == 1 && abs(mass(36)) > abs(mass(46)))
1618 message(0,
"checkSpectrum",
1619 "Note: CP-odd Higgs sector is not mass-ordered",0);
1621 if (abs(mass(1000022)) > abs(mass(1000023))
1622 || abs(mass(1000023)) > abs(mass(1000025))
1623 || abs(mass(1000025)) > abs(mass(1000035))
1624 || (modsel(3) == 1 && abs(mass(1000035)) > abs(mass(1000045))) )
1625 message(0,
"checkSpectrum",
"Note: Neutralino sector is not mass-ordered"
1628 if (abs(mass(1000024)) > abs(mass(1000037)))
1629 message(0,
"checkSpectrum",
"Note: Chargino sector is not mass-ordered",0);
1633 if (nmix.exists()) {
1634 for (
int i=1;i<=4;i++) {
1637 for (
int j=1;j<=4;j++) {
1638 cn1 += pow(nmix(i,j),2);
1639 cn2 += pow(nmix(j,i),2);
1640 if (imnmix.exists()) {
1641 cn1 += pow(imnmix(i,j),2);
1642 cn2 += pow(imnmix(j,i),2);
1645 if (abs(1.0-cn1) > 1e-3 || abs(1.0-cn2) > 1e-3) {
1647 message(2,
"checkSpectrum",
"NMIX is not unitary (wrong format?)",0);
1654 if (vmix.exists() && umix.exists()) {
1657 for (
int i=1;i<=2;i++) {
1662 for (
int j=1;j<=2;j++) {
1663 cu1 += pow(umix(i,j),2);
1664 cu2 += pow(umix(j,i),2);
1665 cv1 += pow(vmix(i,j),2);
1666 cv2 += pow(vmix(j,i),2);
1667 if (imumix.exists()) {
1668 cu1 += pow(imumix(i,j),2);
1669 cu2 += pow(imumix(j,i),2);
1671 if (imvmix.exists()) {
1672 cv1 += pow(imvmix(i,j),2);
1673 cv2 += pow(imvmix(j,i),2);
1676 if (abs(1.0-cu1) > 1e-3 || abs(1.0-cu2) > 1e-3) {
1677 cu1 += pow(umix(1,1),2);
1678 cu2 += pow(umix(1,1),2);
1679 if (abs(1.0-cu1) > 1e-3 || abs(1.0-cu2) > 1e-3) {
1681 message(2,
"checkSpectrum",
"UMIX is not unitary (wrong format?)",0);
1685 message(1,
"checkSpectrum",
"UMIX is not unitary (repaired)",0);
1686 umix.set(2,2,umix(1,1));
1689 if (abs(1.0-cv1) > 1e-3 || abs(1.0-cv2) > 1e-3) {
1690 cv1 += pow(vmix(1,1),2);
1691 cv2 += pow(vmix(1,1),2);
1692 if (abs(1.0-cv1) > 1e-3 || abs(1.0-cv2) > 1e-3) {
1694 message(2,
"checkSpectrum",
"VMIX is not unitary (wrong format?)",0);
1698 message(1,
"checkSpectrum",
"VMIX is not unitary (repaired)",0);
1699 vmix.set(2,2,vmix(1,1));
1707 if (stopmix.exists() && sbotmix.exists()) {
1708 for (
int i=1;i<=2;i++) {
1713 for (
int j=1;j<=2;j++) {
1714 ct1 += pow(stopmix(i,j),2);
1715 ct2 += pow(stopmix(j,i),2);
1716 cb1 += pow(sbotmix(i,j),2);
1717 cb2 += pow(sbotmix(j,i),2);
1719 if (abs(1.0-ct1) > 1e-3 || abs(1.0-ct2) > 1e-3) {
1721 message(2,
"checkSpectrum",
"STOPMIX is not unitary (wrong format?)",0);
1724 if (abs(1.0-cb1) > 1e-3 || abs(1.0-cb2) > 1e-3) {
1726 message(2,
"checkSpectrum",
"SBOTMIX is not unitary (wrong format?)",0);
1733 if (staumix.exists()) {
1734 for (
int i=1;i<=2;i++) {
1737 for (
int j=1;j<=2;j++) {
1738 ct1 += pow(staumix(i,j),2);
1739 ct2 += pow(staumix(j,i),2);
1741 if (abs(1.0-ct1) > 1e-3 || abs(1.0-ct2) > 1e-3) {
1743 message(2,
"checkSpectrum",
"STAUMIX is not unitary (wrong format?)",0);
1750 if (dsqmix.exists()) {
1751 for (
int i=1;i<=6;i++) {
1754 for (
int j=1;j<=6;j++) {
1755 sr += pow(dsqmix(i,j),2);
1756 sc += pow(dsqmix(j,i),2);
1757 if (imdsqmix.exists()) {
1758 sr += pow(imdsqmix(i,j),2);
1759 sc += pow(imdsqmix(j,i),2);
1762 if (abs(1.0-sr) > 1e-3 || abs(1.0-sc) > 1e-3) {
1764 message(2,
"checkSpectrum",
"DSQMIX is not unitary (wrong format?)",0);
1771 if (usqmix.exists()) {
1772 for (
int i=1;i<=6;i++) {
1775 for (
int j=1;j<=6;j++) {
1776 sr += pow(usqmix(i,j),2);
1777 sc += pow(usqmix(j,i),2);
1778 if (imusqmix.exists()) {
1779 sr += pow(imusqmix(i,j),2);
1780 sc += pow(imusqmix(j,i),2);
1783 if (abs(1.0-sr) > 1e-3 || abs(1.0-sc) > 1e-3) {
1785 message(2,
"checkSpectrum",
"USQMIX is not unitary (wrong format?)",0);
1792 if (selmix.exists()) {
1793 for (
int i=1;i<=6;i++) {
1796 for (
int j=1;j<=6;j++) {
1797 sr += pow(selmix(i,j),2);
1798 sc += pow(selmix(j,i),2);
1799 if (imselmix.exists()) {
1800 sr += pow(imselmix(i,j),2);
1801 sc += pow(imselmix(j,i),2);
1804 if (abs(1.0-sr) > 1e-3 || abs(1.0-sc) > 1e-3) {
1806 message(2,
"checkSpectrum",
"SELMIX is not unitary (wrong format?)",0);
1811 if (modsel(3) == 1) {
1813 if ( nmnmix.exists() ) {
1814 for (
int i=1;i<=5;i++) {
1817 for (
int j=1;j<=5;j++) {
1818 cn1 += pow(nmnmix(i,j),2);
1819 cn2 += pow(nmnmix(j,i),2);
1820 if (imnmnmix.exists()) {
1821 cn1 += pow(imnmnmix(i,j),2);
1822 cn2 += pow(imnmnmix(j,i),2);
1825 if (abs(1.0-cn1) > 1e-3 || abs(1.0-cn2) > 1e-3) {
1827 message(2,
"checkSpectrum",
"NMNMIX is not unitary (wrong format?)",0);
1834 message(1,
"checkSpectrum",
"MODSEL 3 = 1 (NMSSM) but no NMNMIX found",0);
1837 if ( nmamix.exists() ) {
1838 for (
int i=1;i<=2;i++) {
1840 for (
int j=1;j<=3;j++) {
1841 cn1 += pow(nmamix(i,j),2);
1843 if (abs(1.0-cn1) > 1e-3) {
1845 message(2,
"checkSpectrum",
"NMAMIX is not unitary (wrong format?)",0);
1851 message(1,
"checkSpectrum",
"MODSEL 3 = 1 (NMSSM) but no NMAMIX found",0);
1854 if ( nmhmix.exists() ) {
1855 for (
int i=1;i<=3;i++) {
1858 for (
int j=1;j<=3;j++) {
1859 cn1 += pow(nmhmix(i,j),2);
1860 cn2 += pow(nmhmix(j,i),2);
1862 if (abs(1.0-cn1) > 1e-3 || abs(1.0-cn2) > 1e-3) {
1864 message(2,
"checkSpectrum",
"NMHMIX is not unitary (wrong format?)",0);
1870 message(1,
"checkSpectrum",
"MODSEL 3 = 1 (NMSSM) but no NMHMIX found",0);
1873 if (! nmssmrun.exists() ) {
1875 message(2,
"checkSpectrum",
"MODSEL 3 = 1 (NMSSM) but no NMSSMRUN found",
1881 if (slhaRead && ! spinfo.exists(1)) spinfo.set(1,
"unknown");
1882 if (slhaRead && ! spinfo.exists(2)) spinfo.set(2,
"unknown");
1883 if (! slhaRead && ! spinfo.exists(1)) {
1884 spinfo.set(1,
"DEFAULT");
1885 spinfo.set(2,
"n/a");
1890 message(0,
"checkSpectrum",
"one or more serious problems were found");
1903 void SusyLesHouches::message(
int level,
string place,
string themessage,
1905 if (verboseSav == 0)
return;
1907 ostream* outstream = &cout;
1912 if (place !=
"") *outstream <<
" | (SLHA::"+place+
") ";
1913 else *outstream <<
" | ";
1914 if (level == 1) *outstream <<
"Warning: ";
1915 if (level == 2) { *outstream <<
"ERROR: "; }
1916 if (line != 0) *outstream <<
"line " << line <<
" - ";
1917 *outstream << themessage << endl;
1919 footerPrinted=
false;