PYTHIA  8.311
SusyLesHouches.h
1 // SusyLesHouches.h is a part of the PYTHIA event generator.
2 // Copyright (C) 2024 Torbjorn Sjostrand.
3 // Main authors of this file: N. Desai, P. Skands
4 // PYTHIA is licenced under the GNU GPL v2 or later, see COPYING for details.
5 // Please respect the MCnet Guidelines, see GUIDELINES for details.
6 
7 // Header file for SUSY Les Houches Accord functionality
8 // This part of the SLHA interface basically contains the Pythia-independent
9 // SLHA read/write and processing utilities, which would be common to any
10 // SLHA interface.
11 // (The Pythia-specific components reside in the SLHAinterface class.)
12 
13 #ifndef Pythia8_SLHA_H
14 #define Pythia8_SLHA_H
15 
16 #include "Pythia8/PythiaStdlib.h"
17 
18 namespace Pythia8 {
19 
20 //==========================================================================
21 
22 //************************* SLHA AUX CLASSES *****************************//
23 
24  //class LHblock: the generic SLHA block (see below for matrices)
25  //Explicit typing required, e.g. block<double> minpar;
26  template <class T> class LHblock {
27 
28  public:
29 
30  //Constructor.
31  LHblock() : idnow(0), qDRbar(), i(), val() {} ;
32 
33  //Does block exist?
34  bool exists() { return int(entry.size()) == 0 ? false : true ; };
35  //Clear block
36  void clear() { entry.clear(); };
37 
38  //set: set block entry values.
39  //Possible return values from set:
40  // 0: normal return. Entry did not previously exist and has been created.
41  // 1: normal return. Entry did previously exist and has been overwritten.
42  //-1: failure.
43  int set(int iIn,T valIn) {
44  int alreadyexisting=exists(iIn)?1:0;
45  entry[iIn]=valIn;
46  return alreadyexisting;
47  };
48  // Read index and value from SLHA data line
49  int set(istringstream& linestream, bool indexed=true) {
50  i = 0;
51  if (indexed) linestream >> i >> val;
52  else linestream >> val;
53  return linestream ? set(i,val) : -1;
54  };
55  // With i already given, read value from remaining SLHA data line
56  int set(int iIn,istringstream& linestream) {
57  linestream >> val;
58  return linestream ? set(iIn,val) : -1;
59  };
60  // Shorthand for entry[0]. Used e.g. for block ALPHA.
61  void set(T valIn) { entry[0]=valIn; };
62 
63  // Does entry i already exist in this block?
64  bool exists(int iIn) {return entry.find(iIn) != entry.end()
65  ? true : false;};
66 
67  // Indexing with (). Output only.
68  T operator()() {return exists(0) ? entry[0] : T();}
69  T operator()(int iIn) {return exists(iIn) ? entry[iIn] : T();}
70 
71  // Size of map.
72  int size() {return int(entry.size());};
73 
74  // First and next key code.
75  int first() { idnow = entry.begin()->first; return idnow; };
76  int next() {
77  typename map<int,T>::iterator itnow;
78  itnow = ++entry.find(idnow);
79  if ( itnow == entry.end() ) itnow=entry.begin();
80  return idnow = itnow->first;
81  };
82 
83  // Simple print utility.
84  void list() {
85  bool finished=false;
86  int ibegin=first();
87  i=ibegin;
88  while (!finished) {
89  cout << " "<< i << " " << entry[i] <<endl;
90  i=next();
91  if (i == ibegin) finished=true;
92  };
93  };
94 
95  // Special for DRbar running blocks.
96  void setq(double qIn) { qDRbar=qIn; }
97  double q() { return qDRbar; }
98 
99  protected:
100  map<int,T> entry;
101 
102  private:
103  int idnow;
104  double qDRbar;
105  //Auxiliary vars
106  int i;
107  T val;
108  };
109 
110  // Derived class for generic blocks containing vectors of strings.
111  class LHgenericBlock : public LHblock<string> {
112 
113  public:
114 
115  //Constructor.
117 
118  // Read index and value from SLHA data line
119  int set(string lineIn) {
120  entry[entry.size()] = lineIn;
121  return 0;
122  };
123 
124  };
125 
126  // class LHmatrixBlock: the generic SLHA matrix
127  // Explicit sizing required, e.g.LHmatrixBlock<4> nmix;
128  // Note, indexing from 1 is intentional, zeroth column/row not used.
129  template <int size> class LHmatrixBlock {
130  public:
131  //Constructor. Set uninitialized and explicitly zero.
132  LHmatrixBlock() : entry(), qDRbar(), val() {
133  initialized=false;
134  for (i=1;i<=size;i++) {
135  for (j=1;j<=size;j++) {
136  entry[i][j]=0.0;
137  };
138  };
139  };
140 
141  // Copy constructor.
142  LHmatrixBlock(const LHmatrixBlock& m) : val(m.val) {
143  for (i=1;i<=size;i++) for (j=1;j<=size;j++) entry[i][j] = m(i,j);
144  qDRbar = m.qDRbar;
145  initialized = m.initialized; }
146 
147  // Assignment.
149  if (this != &m) {
150  for (i=1;i<=size;i++) for (j=1;j<=size;j++) entry[i][j] = m(i,j);
151  qDRbar = m.qDRbar;
152  initialized = m.initialized;
153  }
154  return *this; };
155 
156  // Does this matrix contain any entries?
157  bool exists() { return initialized; };
158  // Clear initialized flag
159  void clear() { initialized=false; };
160 
161  // Set matrix entry
162  int set(int iIn,int jIn, double valIn) {
163  if (iIn>0 && jIn>0 && iIn<=size && jIn<=size) {
164  entry[iIn][jIn]=valIn;
165  initialized=true;
166  return 0;
167  } else {
168  return -1;
169  };
170  };
171 
172  // Set entry from linestream (used during file read)
173  int set(istringstream& linestream) {
174  linestream >> i >> j >> val;
175  return linestream ? set(i,j,val) : -1;
176  };
177 
178  // () Overloading: Get entry
179  double operator()(int iIn, int jIn) const {
180  return (iIn <= size && jIn <= size && iIn > 0 && jIn > 0) ?
181  entry[iIn][jIn] : 0.0;
182  };
183 
184  // Set and get scale for DRbar running LHblocks.
185  void setq(double qIn) { qDRbar=qIn; }
186  double q() { return qDRbar; }
187 
188  // Simple print utility, to be elaborated on.
189  void list() {
190  for (i=1;i<=size;i++) {
191  cout << " "<<i << " " ;
192  for (j=1;j<=size;j++) cout << entry[i][j] << " ";
193  cout << endl;
194  };
195  };
196 
197  private:
198  bool initialized;
199  double entry[size+1][size+1];
200  double qDRbar;
201  //Auxiliary vars
202  int i,j;
203  double val;
204  };
205 
206  // class tensorBlock: the generic SLHA tensor
207  // Explicit sizing required, e.g. tensorBlock<3> rvlam;
208  template <int size> class LHtensor3Block {
209  public:
210  //Constructor. Set uninitialized and explicitly zero.
211  LHtensor3Block() : entry(), qDRbar(), val() {
212  initialized=false;
213  for (i=1;i<=size;i++) {
214  for (j=1;j<=size;j++) {
215  for (k=1;k<=size;k++) {
216  entry[i][j][k]=0.0;
217  };
218  };
219  };
220  };
221 
222  // Copy constructor.
223  LHtensor3Block(const LHtensor3Block& m) : val(m.val) {
224  for (i=0;i<=size;i++) for (j=0;j<=size;j++) for (k=0;k<=size;k++)
225  entry[i][j][k] = m(i,j,k);
226  qDRbar = m.qDRbar;
227  initialized = m.initialized; };
228 
229  // Assignment.
231  if (this != &m) {
232  for (i=0;i<=size;i++) for (j=0;j<=size;j++) for (k=0;k<=size;k++)
233  entry[i][j][k] = m(i,j,k);
234  qDRbar = m.qDRbar;
235  initialized = m.initialized;
236  }
237  return *this; };
238 
239  // Does this matrix contain any entries?
240  bool exists() { return initialized; };
241  // Clear initialized flag
242  void clear() { initialized=false; };
243 
244  // Set matrix entry
245  int set(int iIn,int jIn, int kIn, double valIn) {
246  if (iIn>0 && jIn>0 && kIn>0 && iIn<=size && jIn<=size && kIn<=size) {
247  entry[iIn][jIn][kIn]=valIn;
248  initialized=true;
249  return 0;
250  } else {
251  return -1;
252  };
253  };
254 
255  // Set entry from linestream (used during file read)
256  int set(istringstream& linestream) {
257  linestream >> i >> j >> k >> val;
258  return linestream ? set(i,j,k,val) : -1;
259  };
260 
261  // () Overloading: Get entry
262  double operator()(int iIn, int jIn, int kIn) const {
263  return (iIn <= size && jIn <= size && kIn <= size && iIn > 0
264  && jIn > 0 && kIn > 0) ? entry[iIn][jIn][kIn] : 0.0;
265  };
266 
267  // Set and get scale for DRbar running LHblocks.
268  void setq(double qIn) { qDRbar=qIn; }
269  double q() { return qDRbar; }
270 
271  // Simple print utility, to be elaborated on.
272  void list() {
273  for (i=1;i<=size;i++) {
274  for (j=1;j<=size;j++) {
275  cout << " "<<i << " "<<j << " " ;
276  for (k=1;k<=size;k++) {
277  cout << entry[i][j][k] << " ";
278  cout << endl;
279  };
280  };
281  };
282  };
283 
284  private:
285  bool initialized;
286  double entry[size+1][size+1][size+1];
287  double qDRbar;
288  //Auxiliary vars
289  int i,j,k;
290  double val;
291  };
292 
293  //*************************** DECAY TABLES ***************************//
294 
296  public:
297 
298  LHdecayChannel() : brat(0.0) {};
299  LHdecayChannel(double bratIn, int nDaIn, vector<int> idDaIn,
300  string cIn="") : brat() { setChannel(bratIn,nDaIn,idDaIn,cIn);
301  }
302 
303  // Functions to set decay channel information
304  void setChannel(double bratIn, int nDaIn, vector<int> idDaIn,
305  string cIn="") {
306  brat = bratIn;
307  for (int i=0; i<=nDaIn; i++) {
308  if (i < int(idDaIn.size())) idDa.push_back(idDaIn[i]);
309  comment = cIn;
310  }
311  }
312  void setBrat(double bratIn) {brat=bratIn;}
313  void setIdDa(vector<int> idDaIn) {idDa = idDaIn;}
314 
315  // Functions to get decay channel information
316  double getBrat() {return brat;}
317  int getNDa() {return int(idDa.size());}
318  vector<int> getIdDa() {return idDa;}
319  string getComment() {return comment;}
320 
321  private:
322  double brat;
323  vector<int> idDa;
324  string comment;
325 
326  };
327 
328  class LHdecayTable {
329  public:
330 
331  LHdecayTable() : id(0), width(0.0) {};
332  LHdecayTable(int idIn) : id(idIn), width(0.0) {};
333  LHdecayTable(int idIn, double widthIn) : id(idIn), width(widthIn) {};
334 
335  // Functions to get PDG code (id) and width
336  int getId() {return id;}
337  double getWidth() {return width;}
338 
339  // Functions to set PDG code (id) and width
340  void setId(int idIn) {id = idIn;}
341  void setWidth(double widthIn) {width=widthIn;}
342 
343  // Function to reset size and width (width -> 0 by default)
344  void reset(double widthIn=0.0) {table.resize(0); width=widthIn;}
345 
346  // Function to add another decay channel
347  void addChannel(LHdecayChannel channelIn) {table.push_back(channelIn);}
348  void addChannel(double bratIn, int nDaIn, vector<int> idDaIn,
349  string cIn="") {
350  LHdecayChannel newChannel(bratIn, nDaIn, idDaIn, cIn);
351  table.push_back(newChannel);
352  }
353 
354  // Function to return number of decay channels
355  int size() {return int(table.size());}
356 
357  // Function to return a branching ratio
358  double getBrat(int iChannel) {
359  if (iChannel >= 0 && iChannel < int(table.size())) {
360  return table[iChannel].getBrat();
361  } else {
362  return 0.0;
363  }
364  }
365  // Function to return daughter PDG codes
366  vector<int> getIdDa(int iChannel) {
367  if (iChannel >= 0 && iChannel < int(table.size())) {
368  return table[iChannel].getIdDa();
369  } else {
370  vector<int> dum;
371  return dum;
372  }
373  }
374  // Function to return a decay channel
375  LHdecayChannel getChannel(int iChannel) {
376  if (iChannel >= 0 && iChannel < int(table.size())) {
377  return table[iChannel];
378  } else {
379  LHdecayChannel dum;
380  return dum;
381  }
382  }
383 
384  private:
385  int id;
386  double width;
387  vector<LHdecayChannel> table;
388 
389  };
390 
391 //==========================================================================
392 
394 
395 public:
396 
397  // Constructor, with and without filename.
398  SusyLesHouches(int verboseIn=1) : verboseSav(verboseIn),
399  headerPrinted(false), footerPrinted(false), filePrinted(false),
400  slhaRead(false), lhefRead(false), lhefSlha(false), useDecay(true) {};
401  SusyLesHouches(string filename, int verboseIn=1) : verboseSav(verboseIn),
402  headerPrinted(false), footerPrinted(false), filePrinted(false),
403  slhaRead(true), lhefRead(false), lhefSlha(false), useDecay(true) {
404  readFile(filename);};
405 
406  //***************************** SLHA FILE I/O *****************************//
407  // Read and write SLHA files
408  int readFile(string slhaFileIn="slha.spc",int verboseIn=1,
409  bool useDecayIn=true);
410  int readFile(istream& ,int verboseIn=1,
411  bool useDecayIn=true);
412 
413  //Output utilities
414  void listHeader(); // print Header
415  void listFooter(); // print Footer
416  void listSpectrum(int ifail=0); // print Spectrum
417 
418  // Check spectrum and decays
419  int checkSpectrum();
420 
421  // File Name (can be either SLHA or LHEF)
422  string slhaFile;
423 
424  // Class for SLHA data entry
425  class Entry {
426 
427  public:
428  //Constructor.
429  Entry() : isIntP(false), isDoubleP(false),
430  isStringP(false), n(0), d(0.0), s(""), commentP("") {}
431 
432  // Generic functions to inquire whether an int, double, or string
433  bool isInt(){return isIntP;}
434  bool isDouble(){return isDoubleP;}
435  bool isString(){return isStringP;}
436 
437  // = Overloading: Set entry to int, double, or string
438  Entry& operator=(double& val) {
439  d=val;isIntP=false;isDoubleP=true;isStringP=false;
440  return *this;
441  };
442  Entry& operator=(int& val) {
443  n=val;isIntP=true;isDoubleP=false;isStringP=false;
444  return *this;
445  };
446  Entry& operator=(string& val) {
447  s=val;isIntP=false;isDoubleP=false;isStringP=true;
448  return *this;
449  };
450 
451  // Set and Get comment
452  void setComment(string comment) {commentP=comment;}
453  void getComment(string& comment) {comment=commentP;}
454 
455  // Generic functions to get value
456  bool get(int& val) {val=n; return isIntP;}
457  bool get(double& val) {val=d; return isDoubleP;}
458  bool get(string& val) {val=s; return isStringP;}
459 
460  private:
461  bool isIntP, isDoubleP, isStringP;
462  int n;
463  double d;
464  string s;
465  string commentP;
466 
467  };
468 
469  //*************************** THE SLHA1 BLOCKS ***************************//
470  //Blocks for model definition:
471  LHblock<int> modsel;
472  LHblock<int> modsel21;
473  LHblock<double> modsel12;
474  LHblock<double> minpar;
475  LHblock<double> extpar;
476  LHblock<double> sminputs;
477  //Blocks for RGE program specific output
479  LHblock<string> spinfo3;
480  LHblock<string> spinfo4;
481  //Blocks for DCY program specific output
483  LHblock<string> dcinfo3;
484  LHblock<string> dcinfo4;
485  //Blocks for mass and coupling spectrum
487  LHmatrixBlock<4> nmix;
488  LHmatrixBlock<2> umix;
489  LHmatrixBlock<2> vmix;
490  LHmatrixBlock<2> stopmix;
491  LHmatrixBlock<2> sbotmix;
492  LHmatrixBlock<2> staumix;
493  LHblock<double> alpha;
494  LHblock<double> hmix;
495  LHblock<double> gauge;
496  LHblock<double> msoft;
497  LHmatrixBlock<3> au;
498  LHmatrixBlock<3> ad;
499  LHmatrixBlock<3> ae;
500  LHmatrixBlock<3> yu;
501  LHmatrixBlock<3> yd;
502  LHmatrixBlock<3> ye;
503 
504  //************************ THE SLHA1 DECAY TABLES ************************//
505  vector<LHdecayTable> decays;
506  map<int,int> decayIndices;
507 
508  //********************* THE BSM-SLHA QNUMBERS BLOCKS *********************//
509  vector< LHblock<double> > qnumbers; // Zero'th entry is PDG code
510  vector< string > qnumbersName;
511  vector< string > qnumbersAntiName;
512 
513  //*************************** THE SLHA2 BLOCKS ***************************//
514  //Additions to SLHA1
515  LHblock<double> qextpar;
516 
517  //FLV Input
518  LHblock<double> vckmin; // The input CKM Wolfenstein parms.
519  LHblock<double> upmnsin; // The input PMNS PDG parms.
520  LHmatrixBlock<3> msq2in; // The input upper off-diagonal msq2
521  LHmatrixBlock<3> msu2in; // The input upper off-diagonal msu2
522  LHmatrixBlock<3> msd2in; // The input upper off-diagonal msd2
523  LHmatrixBlock<3> msl2in; // The input upper off-diagonal msl2
524  LHmatrixBlock<3> mse2in; // The input upper off-diagonal mse2
525  LHmatrixBlock<3> tuin; // The input upper off-diagonal TU
526  LHmatrixBlock<3> tdin; // The input upper off-diagonal TD
527  LHmatrixBlock<3> tein; // The input upper off-diagonal TE
528  //FLV Output
529  LHmatrixBlock<3> vckm; // The output DRbar running Re{VCKM} at Q
530  LHmatrixBlock<3> upmns; // The output DRbar running Re{UPMNS} at Q
531  LHmatrixBlock<3> msq2; // The output DRbar running msq2 at Q
532  LHmatrixBlock<3> msu2; // The output DRbar running msu2 at Q
533  LHmatrixBlock<3> msd2; // The output DRbar running msd2 at Q
534  LHmatrixBlock<3> msl2; // The output DRbar running msl2 at Q
535  LHmatrixBlock<3> mse2; // The output DRbar running mse2 at Q
536  LHmatrixBlock<3> tu; // The output DRbar running TU at Q
537  LHmatrixBlock<3> td; // The output DRbar running TD at Q
538  LHmatrixBlock<3> te; // The output DRbar running TE at Q
539  LHmatrixBlock<6> usqmix; // The Re{} up squark mixing matrix
540  LHmatrixBlock<6> dsqmix; // The Re{} down squark mixing matrix
541  LHmatrixBlock<6> selmix; // The Re{} selectron mixing matrix
542  LHmatrixBlock<3> snumix; // The Re{} sneutrino mixing matrix
543  LHmatrixBlock<3> snsmix; // The scalar sneutrino mixing matrix
544  LHmatrixBlock<3> snamix; // The pseudoscalar neutrino mixing matrix
545 
546  //RPV Input
547  LHtensor3Block<3> rvlamllein; // The input LNV lambda couplings
548  LHtensor3Block<3> rvlamlqdin; // The input LNV lambda' couplings
549  LHtensor3Block<3> rvlamuddin; // The input BNV lambda'' couplings
550  LHtensor3Block<3> rvtllein; // The input LNV T couplings
551  LHtensor3Block<3> rvtlqdin; // The input LNV T' couplings
552  LHtensor3Block<3> rvtuddin; // The input BNV T'' couplings
553  LHblock<double> rvkappain; // The input LNV kappa couplings
554  LHblock<double> rvdin; // The input LNV D terms
555  LHblock<double> rvm2lh1in; // The input LNV m2LH1 couplings
556  LHblock<double> rvsnvevin; // The input LNV sneutrino vevs
557  //RPV Output
558  LHtensor3Block<3> rvlamlle; // The output LNV lambda couplings
559  LHtensor3Block<3> rvlamlqd; // The output LNV lambda' couplings
560  LHtensor3Block<3> rvlamudd; // The output BNV lambda'' couplings
561  LHtensor3Block<3> rvtlle; // The output LNV T couplings
562  LHtensor3Block<3> rvtlqd; // The output LNV T' couplings
563  LHtensor3Block<3> rvtudd; // The output BNV T'' couplings
564  LHblock<double> rvkappa; // The output LNV kappa couplings
565  LHblock<double> rvd; // The output LNV D terms
566  LHblock<double> rvm2lh1; // The output LNV m2LH1 couplings
567  LHblock<double> rvsnvev; // The output LNV sneutrino vevs
568  LHmatrixBlock<7> rvnmix; // The RPV neutralino mixing matrix
569  LHmatrixBlock<5> rvumix; // The RPV chargino L mixing matrix
570  LHmatrixBlock<5> rvvmix; // The RPV chargino R mixing matrix
571  LHmatrixBlock<5> rvhmix; // The RPV neutral scalar mixing matrix
572  LHmatrixBlock<5> rvamix; // The RPV neutral pseudoscalar mixing matrix
573  LHmatrixBlock<8> rvlmix; // The RPV charged fermion mixing matrix
574 
575  //CPV Input
577  LHblock<double> imextpar;
578  //CPV Output
579  LHmatrixBlock<4> cvhmix; // The CPV Higgs mixing matrix
580  LHmatrixBlock<4> imcvhmix; // Optional: imaginary components
581  LHmatrixBlock<3> imau,imad,imae; // Im{} of AU, AD, AE
583  LHblock<double> immsoft;
584 
585  //CPV + FLV Input
586  LHmatrixBlock<3> immsq2in; // The Im{} input upper off-diagonal msq2
587  LHmatrixBlock<3> immsu2in; // The Im{} input upper off-diagonal msu2
588  LHmatrixBlock<3> immsd2in; // The Im{} input upper off-diagonal msd2
589  LHmatrixBlock<3> immsl2in; // The Im{} input upper off-diagonal msl2
590  LHmatrixBlock<3> immse2in; // The Im{} input upper off-diagonal mse2
591  LHmatrixBlock<3> imtuin,imtdin,imtein; // The Im{} input upper off-diagonal T
592  //CPV + FLV Output
593  LHmatrixBlock<3> imvckm; // The output DRbar running Im{VCKM} at Q
594  LHmatrixBlock<3> imupmns; // The output DRbar running Im{UPMNS} at Q
595  LHmatrixBlock<3> immsq2; // The output DRbar running msq2 at Q
596  LHmatrixBlock<3> immsu2; // The output DRbar running msu2 at Q
597  LHmatrixBlock<3> immsd2; // The output DRbar running msd2 at Q
598  LHmatrixBlock<3> immsl2; // The output DRbar running msl2 at Q
599  LHmatrixBlock<3> immse2; // The output DRbar running mse2 at Q
600  LHmatrixBlock<3> imtu,imtd,imte; // Im{} of TU, TD, TE
601  LHmatrixBlock<6> imusqmix;// The Im{} up squark mixing matrix
602  LHmatrixBlock<6> imdsqmix; // The Im{} down squark mixing matrix
603  LHmatrixBlock<6> imselmix; // The Im{} selectron mixing matrix
604  LHmatrixBlock<3> imsnumix; // The Im{} sneutrino mixing matrix
605  LHmatrixBlock<4> imnmix; // The Im{} neutralino mixing matrix
606  LHmatrixBlock<4> imumix; // The Im{} chargino L mixing matrix
607  LHmatrixBlock<4> imvmix; // The Im{} chargino R mixing matrix
608 
609  //NMSSM Input
610  // All input is in EXTPAR
611  //NMSSM Output
612  LHblock<double> nmssmrun; // The LHblock of NMSSM running parameters
613  LHmatrixBlock<3> nmhmix; // The NMSSM scalar Higgs mixing
614  LHmatrixBlock<3> nmamix; // The NMSSM pseudoscalar Higgs mixing
615  LHmatrixBlock<5> nmnmix; // The NMSSM neutralino mixing
616  LHmatrixBlock<5> imnmnmix; // Im{} (for future use)
617 
618  //*************************** SET BLOCK VALUE ****************************//
619  template <class T> int set(string,T);
620  template <class T> int set(string,int,T);
621  template <class T> int set(string,int,int,T);
622  template <class T> int set(string,int,int,int,T);
623 
624  //********************* GENERIC/USER-DEFINED BLOCKS **********************//
625  // bool getEntry(name, indices, value)
626  // = true if LHblock and entry exists (value returned in value,
627  // typecast by user in call)
628  // = false otherwise
629  map<string, LHgenericBlock> genericBlocks;
630  template <class T> bool getEntry(string, T&);
631  template <class T> bool getEntry(string, int, T&);
632  template <class T> bool getEntry(string, int, int, T&);
633  template <class T> bool getEntry(string, int, int, int, T&);
634  template <class T> bool getEntry(string, vector<int>, T&);
635 
636  // Access/change verbose setting
637  int verbose() {return verboseSav;}
638  void verbose(int verboseIn) {verboseSav = verboseIn;}
639 
640  // Output of messages from SLHA interface
641  void message(int, string,string ,int line=0);
642 
643  //***************************** SLHA PRIVATE *****************************//
644 private:
645  //SLHA I/O
646  int verboseSav;
647  bool headerPrinted, footerPrinted, filePrinted;
648  bool slhaRead, lhefRead, lhefSlha, useDecay;
649 
650 };
651 
652 //--------------------------------------------------------------------------
653 
654 // utilities to set generic blocks
655 
656 template <class T> int SusyLesHouches::set(string blockName, T val) {
657 
658  // Make sure everything is interpreted as lower case (for safety)
659  toLowerRep(blockName);
660 
661  // Add new generic block if not already existing
662  if (genericBlocks.find(blockName) == genericBlocks.end()) {
663  LHgenericBlock gBlock;
664  genericBlocks[blockName]=gBlock;
665  }
666 
667  // Convert input value to string
668  ostringstream lineStream;
669  lineStream << val;
670  return genericBlocks[blockName].set(lineStream.str());
671 
672 }
673 
674 template <class T> int SusyLesHouches::set(string blockName, int indx, T val) {
675 
676  // Make sure everything is interpreted as lower case (for safety)
677  toLowerRep(blockName);
678 
679  // Add new generic block if not already existing
680  if (genericBlocks.find(blockName) == genericBlocks.end()) {
681  LHgenericBlock gBlock;
682  genericBlocks[blockName]=gBlock;
683  }
684 
685  // Convert input value to string
686  ostringstream lineStream;
687  lineStream << indx<<" "<<val;
688  return genericBlocks[blockName].set(lineStream.str());
689 
690 }
691 
692 template <class T> int SusyLesHouches::set(string blockName, int indx,
693  int jndx, T val) {
694 
695  // Make sure everything is interpreted as lower case (for safety)
696  toLowerRep(blockName);
697 
698  // Add new generic block if not already existing
699  if (genericBlocks.find(blockName) == genericBlocks.end()) {
700  LHgenericBlock gBlock;
701  genericBlocks[blockName]=gBlock;
702  }
703 
704  // Convert input value to string
705  ostringstream lineStream;
706  lineStream << indx<<" "<<jndx<<" "<<val;
707  return genericBlocks[blockName].set(lineStream.str());
708 
709 }
710 
711 template <class T> int SusyLesHouches::set(string blockName, int indx,
712  int jndx, int kndx, T val) {
713 
714  // Make sure everything is interpreted as lower case (for safety)
715  toLowerRep(blockName);
716 
717  // Add new generic block if not already existing
718  if (genericBlocks.find(blockName) == genericBlocks.end()) {
719  LHgenericBlock gBlock;
720  genericBlocks[blockName]=gBlock;
721  }
722 
723  // Convert input value to string
724  ostringstream lineStream;
725  lineStream << indx<<" "<<jndx<<" "<<kndx<<" "<<val;
726  return genericBlocks[blockName].set(lineStream.str());
727 
728 }
729 
730 // utilities to read generic blocks
731 
732 template <class T> bool SusyLesHouches::getEntry(string blockName, T& val) {
733 
734  // Make sure everything is interpret as lower case (for safety)
735  toLowerRep(blockName);
736 
737  // Safety checks
738  if (genericBlocks.find(blockName) == genericBlocks.end()) {
739  message(1,"getEntry","attempting to extract entry from non-existent block "
740  +blockName);
741  return false;
742  }
743  if (genericBlocks[blockName].size() == 0) {
744  message(1,"getEntry","attempting to extract entry from zero-size block "
745  +blockName);
746  return false;
747  }
748  if (genericBlocks[blockName].size() >= 2) {
749  message(1,"getEntry","attempting to extract un-indexed entry "
750  "from multi-entry block "+blockName);
751  return false;
752  }
753  // Attempt to extract value as class T
754  LHgenericBlock block = genericBlocks[blockName];
755  istringstream linestream(block(0));
756  linestream >> val;
757  if ( !linestream ) {
758  message(1,"getEntry","problem extracting un-indexed entry "
759  "from block "+blockName);
760  return false;
761  }
762  // If made it all the way here, value was successfully extracted.
763  // Return true.
764  return true;
765 }
766 
767 template <class T> bool SusyLesHouches::getEntry(string blockName, int indx,
768  T& val) {
769 
770  // Make sure everything is interpret as lower case (for safety)
771  toLowerRep(blockName);
772 
773  // Safety checks
774  if (genericBlocks.find(blockName) == genericBlocks.end()) {
775  message(1,"getEntry","attempting to extract entry from non-existent block "
776  +blockName);
777  return false;
778  }
779  if (genericBlocks[blockName].size() == 0) {
780  message(1,"getEntry","attempting to extract entry from zero-size block "
781  +blockName);
782  return false;
783  }
784  // Attempt to extract indexed value as class T
785  LHgenericBlock block = genericBlocks[blockName];
786  // Loop over block contents, search for indexed entry with index i
787  for (int jEntry = 0; jEntry < block.size(); jEntry++) {
788  istringstream linestream(block(jEntry));
789  // Buffer line according to format selected by T
790  int indxNow;
791  T valNow;
792  linestream >> indxNow >> valNow;
793  // If index found and value was readable, return true
794  if (linestream && indxNow == indx) {
795  val = valNow;
796  return true;
797  }
798  }
799  // If index not found or unreadable, return false
800  message(1,"getEntry","problem extracting indexed entry from block "
801  +blockName);
802  return false;
803 }
804 
805 template <class T> bool SusyLesHouches::getEntry(string blockName, int indx,
806  int jndx, T& val) {
807 
808  // Make sure everything is interpret as lower case (for safety)
809  toLowerRep(blockName);
810 
811  // Safety checks
812  if (genericBlocks.find(blockName) == genericBlocks.end()) {
813  message(1,"getEntry","attempting to extract entry from non-existent block "
814  +blockName);
815  return false;
816  }
817  if (genericBlocks[blockName].size() == 0) {
818  message(1,"getEntry","attempting to extract entry from zero-size block "
819  +blockName);
820  return false;
821  }
822  // Attempt to extract matrix-indexed value as class T
823  LHgenericBlock block = genericBlocks[blockName];
824  // Loop over block contents, search for indexed entry with indices i, j
825  for (int jEntry = 0; jEntry < block.size(); jEntry++) {
826  istringstream linestream(block(jEntry));
827  // Buffer line according to format selected by T
828  int indxNow, jndxNow;
829  T valNow;
830  linestream >> indxNow >> jndxNow >> valNow;
831  // If index found and value was readable, return true
832  if (linestream && indxNow == indx && jndxNow == jndx) {
833  val = valNow;
834  return true;
835  }
836  }
837  // If index not found or unreadable, return false
838  message(1,"getEntry","problem extracting matrix-indexed entry from block "
839  +blockName);
840  return false;
841 }
842 
843 template <class T> bool SusyLesHouches::getEntry(string blockName, int indx,
844  int jndx, int kndx, T& val) {
845 
846  // Make sure everything is interpret as lower case (for safety)
847  toLowerRep(blockName);
848 
849  // Safety checks
850  if (genericBlocks.find(blockName) == genericBlocks.end()) {
851  message(1,"getEntry","attempting to extract entry from non-existent block "
852  +blockName);
853  return false;
854  }
855  if (genericBlocks[blockName].size() == 0) {
856  message(1,"getEntry","attempting to extract entry from zero-size block "
857  +blockName);
858  return false;
859  }
860  // Attempt to extract tensor-indexed value as class T
861  LHgenericBlock block = genericBlocks[blockName];
862  // Loop over block contents, search for indexed entry with indices i, j, k
863  for (int jEntry = 0; jEntry < block.size(); jEntry++) {
864  istringstream linestream(block(jEntry));
865  // Buffer line according to format selected by T
866  int indxNow, jndxNow, kndxNow;
867  T valNow;
868  linestream >> indxNow >> jndxNow >> kndxNow >> valNow;
869  // If index found and value was readable, return true
870  if (linestream && indxNow == indx && jndxNow == jndx && kndxNow == kndx) {
871  val = valNow;
872  return true;
873  }
874  }
875  // If index not found or unreadable, return false
876  message(1,"getEntry","problem extracting tensor-indexed entry from block "
877  +blockName);
878  return false;
879  }
880 
881 //==========================================================================
882 
883 } // end of namespace Pythia8
884 
885 #endif // Pythia8_SLHA_H
LHtensor3Block(const LHtensor3Block &m)
Copy constructor.
Definition: SusyLesHouches.h:223
LHmatrixBlock< 3 > td
The output DRbar running TU at Q.
Definition: SusyLesHouches.h:537
LHmatrixBlock< 3 > immse2in
The Im{} input upper off-diagonal msl2.
Definition: SusyLesHouches.h:590
LHblock< double > vckmin
FLV Input.
Definition: SusyLesHouches.h:518
string slhaFile
File Name (can be either SLHA or LHEF)
Definition: SusyLesHouches.h:422
LHmatrixBlock< 3 > imsnumix
The Im{} selectron mixing matrix.
Definition: SusyLesHouches.h:604
LHmatrixBlock< 3 > msq2
The output DRbar running Re{UPMNS} at Q.
Definition: SusyLesHouches.h:531
LHmatrixBlock< 3 > immsl2in
The Im{} input upper off-diagonal msd2.
Definition: SusyLesHouches.h:589
LHmatrixBlock< 3 > tdin
The input upper off-diagonal TU.
Definition: SusyLesHouches.h:526
int getId()
Functions to get PDG code (id) and width.
Definition: SusyLesHouches.h:336
void list()
Simple print utility, to be elaborated on.
Definition: SusyLesHouches.h:272
bool exists()
Does this matrix contain any entries?
Definition: SusyLesHouches.h:240
Definition: SusyLesHouches.h:208
LHtensor3Block< 3 > rvtlqdin
The input LNV T couplings.
Definition: SusyLesHouches.h:551
LHmatrixBlock< 5 > rvumix
The RPV neutralino mixing matrix.
Definition: SusyLesHouches.h:569
LHtensor3Block< 3 > rvtlqd
The output LNV T couplings.
Definition: SusyLesHouches.h:562
Entry()
Constructor.
Definition: SusyLesHouches.h:429
LHmatrixBlock< 3 > msu2in
The input upper off-diagonal msq2.
Definition: SusyLesHouches.h:521
LHtensor3Block< 3 > rvlamllein
The pseudoscalar neutrino mixing matrix.
Definition: SusyLesHouches.h:547
bool exists(int iIn)
Does entry i already exist in this block?
Definition: SusyLesHouches.h:64
LHtensor3Block< 3 > rvlamuddin
The input LNV lambda&#39; couplings.
Definition: SusyLesHouches.h:549
LHmatrixBlock< 3 > immsq2in
CPV + FLV Input.
Definition: SusyLesHouches.h:586
LHblock< double > imhmix
Im{} of AU, AD, AE.
Definition: SusyLesHouches.h:582
int size()
Size of map.
Definition: SusyLesHouches.h:72
LHmatrixBlock< 5 > rvamix
The RPV neutral scalar mixing matrix.
Definition: SusyLesHouches.h:572
LHmatrixBlock< 3 > immse2
The output DRbar running msl2 at Q.
Definition: SusyLesHouches.h:599
Derived class for generic blocks containing vectors of strings.
Definition: SusyLesHouches.h:111
void toLowerRep(string &name, bool trim=true)
Variant of above, with in-place replacement.
Definition: PythiaStdlib.h:206
void setComment(string comment)
Set and Get comment.
Definition: SusyLesHouches.h:452
int first()
First and next key code.
Definition: SusyLesHouches.h:75
LHmatrixBlock< 3 > immsq2
The output DRbar running Im{UPMNS} at Q.
Definition: SusyLesHouches.h:595
int size()
Function to return number of decay channels.
Definition: SusyLesHouches.h:355
LHmatrixBlock< 7 > rvnmix
The output LNV sneutrino vevs.
Definition: SusyLesHouches.h:568
LHmatrixBlock< 8 > rvlmix
The RPV neutral pseudoscalar mixing matrix.
Definition: SusyLesHouches.h:573
LHmatrixBlock< 5 > imnmnmix
The NMSSM neutralino mixing.
Definition: SusyLesHouches.h:616
Definition: SusyLesHouches.h:129
LHblock< double > rvkappa
The output BNV T&#39;&#39; couplings.
Definition: SusyLesHouches.h:564
double operator()(int iIn, int jIn) const
() Overloading: Get entry
Definition: SusyLesHouches.h:179
LHblock< double > rvd
The output LNV kappa couplings.
Definition: SusyLesHouches.h:565
LHblock()
Constructor.
Definition: SusyLesHouches.h:31
double getBrat(int iChannel)
Function to return a branching ratio.
Definition: SusyLesHouches.h:358
LHblock< double > rvdin
The input LNV kappa couplings.
Definition: SusyLesHouches.h:554
LHgenericBlock()
Constructor.
Definition: SusyLesHouches.h:116
LHmatrixBlock< 4 > imnmix
The Im{} sneutrino mixing matrix.
Definition: SusyLesHouches.h:605
int set(string lineIn)
Read index and value from SLHA data line.
Definition: SusyLesHouches.h:119
LHtensor3Block< 3 > rvtudd
The output LNV T&#39; couplings.
Definition: SusyLesHouches.h:563
void setq(double qIn)
Special for DRbar running blocks.
Definition: SusyLesHouches.h:96
vector< string > qnumbersName
Zero&#39;th entry is PDG code.
Definition: SusyLesHouches.h:510
int verbose()
Access/change verbose setting.
Definition: SusyLesHouches.h:637
LHmatrixBlock< 3 > upmns
The output DRbar running Re{VCKM} at Q.
Definition: SusyLesHouches.h:530
LHmatrixBlock< 3 > msl2
The output DRbar running msd2 at Q.
Definition: SusyLesHouches.h:534
LHmatrixBlock< 3 > immsd2in
The Im{} input upper off-diagonal msu2.
Definition: SusyLesHouches.h:588
Entry & operator=(double &val)
= Overloading: Set entry to int, double, or string
Definition: SusyLesHouches.h:438
LHtensor3Block< 3 > rvlamudd
The output LNV lambda&#39; couplings.
Definition: SusyLesHouches.h:560
LHblock< double > rvm2lh1
The output LNV D terms.
Definition: SusyLesHouches.h:566
LHmatrixBlock()
Constructor. Set uninitialized and explicitly zero.
Definition: SusyLesHouches.h:132
LHmatrixBlock< 3 > immsl2
The output DRbar running msd2 at Q.
Definition: SusyLesHouches.h:598
T operator()()
Indexing with (). Output only.
Definition: SusyLesHouches.h:68
vector< int > getIdDa(int iChannel)
Function to return daughter PDG codes.
Definition: SusyLesHouches.h:366
void reset(double widthIn=0.0)
Function to reset size and width (width -> 0 by default)
Definition: SusyLesHouches.h:344
void setq(double qIn)
Set and get scale for DRbar running LHblocks.
Definition: SusyLesHouches.h:268
LHblock< double > rvm2lh1in
The input LNV D terms.
Definition: SusyLesHouches.h:555
bool exists()
Does this matrix contain any entries?
Definition: SusyLesHouches.h:157
LHblock< double > rvsnvevin
The input LNV m2LH1 couplings.
Definition: SusyLesHouches.h:556
LHmatrixBlock< 3 > imau
Optional: imaginary components.
Definition: SusyLesHouches.h:581
LHtensor3Block< 3 > rvtllein
The input BNV lambda&#39;&#39; couplings.
Definition: SusyLesHouches.h:550
vector< LHblock< double > > qnumbers
********************* THE BSM-SLHA QNUMBERS BLOCKS *********************//
Definition: SusyLesHouches.h:509
LHmatrixBlock< 3 > msu2
The output DRbar running msq2 at Q.
Definition: SusyLesHouches.h:532
LHmatrixBlock< 3 > mse2
The output DRbar running msl2 at Q.
Definition: SusyLesHouches.h:535
LHtensor3Block & operator=(const LHtensor3Block &m)
Assignment.
Definition: SusyLesHouches.h:230
SusyLesHouches(int verboseIn=1)
Constructor, with and without filename.
Definition: SusyLesHouches.h:398
LHmatrixBlock< 3 > mse2in
The input upper off-diagonal msl2.
Definition: SusyLesHouches.h:524
LHblock< double > upmnsin
The input CKM Wolfenstein parms.
Definition: SusyLesHouches.h:519
LHmatrixBlock< 4 > imumix
The Im{} neutralino mixing matrix.
Definition: SusyLesHouches.h:606
*************************** DECAY TABLES ***************************//
Definition: SusyLesHouches.h:295
Definition: SusyLesHouches.h:393
LHmatrixBlock< 6 > imdsqmix
The Im{} up squark mixing matrix.
Definition: SusyLesHouches.h:602
LHmatrixBlock & operator=(const LHmatrixBlock &m)
Assignment.
Definition: SusyLesHouches.h:148
Definition: SusyLesHouches.h:328
double operator()(int iIn, int jIn, int kIn) const
() Overloading: Get entry
Definition: SusyLesHouches.h:262
LHmatrixBlock< 3 > nmamix
The NMSSM scalar Higgs mixing.
Definition: SusyLesHouches.h:614
void clear()
Clear block.
Definition: SusyLesHouches.h:36
void clear()
Clear initialized flag.
Definition: SusyLesHouches.h:159
void table(const Hist &h1, const Hist &h2, ostream &os=cout, bool printOverUnder=false, bool xMidBin=true)
Print a table out of two histograms with same x axis.
Definition: Basics.cc:1581
LHmatrixBlock< 4 > imvmix
The Im{} chargino L mixing matrix.
Definition: SusyLesHouches.h:607
LHblock< double > nmssmrun
The Im{} chargino R mixing matrix.
Definition: SusyLesHouches.h:612
void list()
Simple print utility.
Definition: SusyLesHouches.h:84
LHmatrixBlock< 3 > immsd2
The output DRbar running msu2 at Q.
Definition: SusyLesHouches.h:597
LHmatrixBlock< 5 > nmnmix
The NMSSM pseudoscalar Higgs mixing.
Definition: SusyLesHouches.h:615
LHmatrixBlock< 6 > selmix
The Re{} down squark mixing matrix.
Definition: SusyLesHouches.h:541
LHtensor3Block< 3 > rvlamlqdin
The input LNV lambda couplings.
Definition: SusyLesHouches.h:548
LHmatrixBlock< 4 > cvhmix
CPV Output.
Definition: SusyLesHouches.h:579
LHmatrixBlock< 3 > vckm
FLV Output.
Definition: SusyLesHouches.h:529
LHmatrixBlock< 3 > te
The output DRbar running TD at Q.
Definition: SusyLesHouches.h:538
bool exists()
Does block exist?
Definition: SusyLesHouches.h:34
LHmatrixBlock< 3 > imvckm
CPV + FLV Output.
Definition: SusyLesHouches.h:593
LHmatrixBlock< 3 > snsmix
The Re{} sneutrino mixing matrix.
Definition: SusyLesHouches.h:543
LHmatrixBlock< 3 > msq2in
The input PMNS PDG parms.
Definition: SusyLesHouches.h:520
void addChannel(LHdecayChannel channelIn)
Function to add another decay channel.
Definition: SusyLesHouches.h:347
LHmatrixBlock< 3 > immsu2in
The Im{} input upper off-diagonal msq2.
Definition: SusyLesHouches.h:587
LHmatrixBlock< 3 > immsu2
The output DRbar running msq2 at Q.
Definition: SusyLesHouches.h:596
LHtensor3Block< 3 > rvlamlle
RPV Output.
Definition: SusyLesHouches.h:558
int set(string, T)
Im{} (for future use)
Definition: SusyLesHouches.h:656
LHblock< double > mass
Blocks for mass and coupling spectrum.
Definition: SusyLesHouches.h:486
LHtensor3Block< 3 > rvtuddin
The input LNV T&#39; couplings.
Definition: SusyLesHouches.h:552
LHmatrixBlock< 3 > tein
The input upper off-diagonal TD.
Definition: SusyLesHouches.h:527
LHmatrixBlock< 6 > dsqmix
The Re{} up squark mixing matrix.
Definition: SusyLesHouches.h:540
LHmatrixBlock< 5 > rvhmix
The RPV chargino R mixing matrix.
Definition: SusyLesHouches.h:571
LHmatrixBlock< 3 > imtuin
The Im{} input upper off-diagonal mse2.
Definition: SusyLesHouches.h:591
LHblock< double > imminpar
The RPV charged fermion mixing matrix.
Definition: SusyLesHouches.h:576
Header for classes to set beam momentum and interaction vertex spread.
Definition: Analysis.h:20
double m(const Vec4 &v1)
Invariant mass and its square.
Definition: Basics.cc:576
LHmatrixBlock< 3 > imtu
The output DRbar running mse2 at Q.
Definition: SusyLesHouches.h:600
LHmatrixBlock< 3 > nmhmix
The LHblock of NMSSM running parameters.
Definition: SusyLesHouches.h:613
************************* SLHA AUX CLASSES *****************************//
Definition: SusyLesHouches.h:26
LHmatrixBlock< 3 > msd2in
The input upper off-diagonal msu2.
Definition: SusyLesHouches.h:522
LHblock< string > dcinfo
Blocks for DCY program specific output.
Definition: SusyLesHouches.h:482
LHmatrixBlock< 3 > imupmns
The output DRbar running Im{VCKM} at Q.
Definition: SusyLesHouches.h:594
void clear()
Clear initialized flag.
Definition: SusyLesHouches.h:242
LHtensor3Block()
Constructor. Set uninitialized and explicitly zero.
Definition: SusyLesHouches.h:211
double getBrat()
Functions to get decay channel information.
Definition: SusyLesHouches.h:316
LHmatrixBlock< 4 > imcvhmix
The CPV Higgs mixing matrix.
Definition: SusyLesHouches.h:580
LHtensor3Block< 3 > rvlamlqd
The output LNV lambda couplings.
Definition: SusyLesHouches.h:559
LHblock< double > rvkappain
The input BNV T&#39;&#39; couplings.
Definition: SusyLesHouches.h:553
LHblock< double > rvsnvev
The output LNV m2LH1 couplings.
Definition: SusyLesHouches.h:567
LHdecayChannel getChannel(int iChannel)
Function to return a decay channel.
Definition: SusyLesHouches.h:375
LHmatrixBlock< 3 > snumix
The Re{} selectron mixing matrix.
Definition: SusyLesHouches.h:542
LHmatrixBlock< 5 > rvvmix
The RPV chargino L mixing matrix.
Definition: SusyLesHouches.h:570
vector< LHdecayTable > decays
************************ THE SLHA1 DECAY TABLES ************************//
Definition: SusyLesHouches.h:505
LHtensor3Block< 3 > rvtlle
The output BNV lambda&#39;&#39; couplings.
Definition: SusyLesHouches.h:561
LHblock< string > spinfo
Blocks for RGE program specific output.
Definition: SusyLesHouches.h:478
void setId(int idIn)
Functions to set PDG code (id) and width.
Definition: SusyLesHouches.h:340
LHmatrixBlock< 6 > imselmix
The Im{} down squark mixing matrix.
Definition: SusyLesHouches.h:603
LHmatrixBlock< 3 > tuin
The input upper off-diagonal mse2.
Definition: SusyLesHouches.h:525
LHmatrixBlock< 3 > msl2in
The input upper off-diagonal msd2.
Definition: SusyLesHouches.h:523
void list()
Simple print utility, to be elaborated on.
Definition: SusyLesHouches.h:189
bool isInt()
Generic functions to inquire whether an int, double, or string.
Definition: SusyLesHouches.h:433
LHmatrixBlock(const LHmatrixBlock &m)
Copy constructor.
Definition: SusyLesHouches.h:142
LHmatrixBlock< 3 > msd2
The output DRbar running msu2 at Q.
Definition: SusyLesHouches.h:533
void setq(double qIn)
Set and get scale for DRbar running LHblocks.
Definition: SusyLesHouches.h:185
Class for SLHA data entry.
Definition: SusyLesHouches.h:425
LHmatrixBlock< 6 > usqmix
The output DRbar running TE at Q.
Definition: SusyLesHouches.h:539
LHmatrixBlock< 6 > imusqmix
Im{} of TU, TD, TE.
Definition: SusyLesHouches.h:601
void setChannel(double bratIn, int nDaIn, vector< int > idDaIn, string cIn="")
Functions to set decay channel information.
Definition: SusyLesHouches.h:304
LHmatrixBlock< 3 > snamix
The scalar sneutrino mixing matrix.
Definition: SusyLesHouches.h:544
LHmatrixBlock< 3 > tu
The output DRbar running mse2 at Q.
Definition: SusyLesHouches.h:536