File indexing completed on 2025-04-19 09:10:07
0001 #ifndef MODEL_Main_Model_Base_H
0002 #define MODEL_Main_Model_Base_H
0003
0004 #include "ATOOLS/Phys/Flavour.H"
0005 #include "ATOOLS/Math/Matrix.H"
0006 #include "ATOOLS/Math/Function_Base.H"
0007 #include "ATOOLS/Math/MathTools.H"
0008 #include "ATOOLS/Math/MyComplex.H"
0009 #include "ATOOLS/Org/Getter_Function.H"
0010 #include "MODEL/Main/Coupling_Data.H"
0011 #include "PDF/Main/ISR_Handler.H"
0012 #include <map>
0013
0014 namespace MODEL {
0015
0016 class Single_Vertex;
0017
0018 typedef std::map<std::string,Complex> tscmap;
0019
0020 typedef std::vector<Single_Vertex *> Vertex_List;
0021 typedef std::map<ATOOLS::Flavour, Vertex_List> Vertex_Table;
0022 typedef std::multimap<std::string,Single_Vertex*> Vertex_Map;
0023 typedef std::pair<std::string,Single_Vertex*> VMap_Key;
0024 typedef std::pair<Vertex_Map::const_iterator,
0025 Vertex_Map::const_iterator> VMIterator_Pair;
0026
0027 typedef std::map<std::string,int> ScalarNumbersMap;
0028 typedef std::map<std::string,double> ScalarConstantsMap;
0029 typedef std::map<std::string,Complex> ComplexConstantsMap;
0030 typedef std::map<std::string,ATOOLS::Function_Base *> ScalarFunctionsMap;
0031 typedef std::map<std::string,ATOOLS::CMatrix> ComplexMatricesMap;
0032
0033 struct Model_Arguments {
0034 bool m_elementary;
0035 Model_Arguments(const bool &elementary):
0036 m_elementary(elementary)
0037 {}
0038 };
0039
0040 struct EWParameters {
0041 double m_sw2_r, m_cw2_r, m_aew_r, m_mw_r, m_mz_r,
0042 m_mt_r, m_mh0_r, m_cvev_r;
0043 };
0044
0045 struct ew_scheme {
0046 enum code {
0047 UserDefined = 0,
0048 alpha0 = 1,
0049 alphamZ = 2,
0050 Gmu = 3,
0051 alphamZsW = 4,
0052 alphamWsW = 5,
0053 GmumZsW = 6,
0054 GmumWsW = 7,
0055 FeynRules = 10,
0056 Undefined = 99
0057 };
0058 };
0059
0060 std::ostream &operator<<(std::ostream &str,const ew_scheme::code &c);
0061 std::istream &operator>>(std::istream &str,ew_scheme::code &c);
0062
0063 class Model_Base {
0064 public:
0065
0066 typedef ATOOLS::Getter_Function<Model_Base,Model_Arguments>
0067 Model_Getter_Function;
0068
0069 protected:
0070
0071 std::string m_name;
0072 bool m_elementary;
0073 bool m_hasnegativecouplingorders;
0074
0075 ScalarNumbersMap * p_numbers;
0076 ScalarConstantsMap * p_constants;
0077 ComplexConstantsMap * p_complexconstants;
0078 ScalarFunctionsMap * p_functions;
0079
0080 Vertex_Table m_vtable;
0081 Vertex_Map m_vmap;
0082 ATOOLS::Flavour_Vector m_fls;
0083
0084 std::vector<Single_Vertex> m_v, m_ov;
0085
0086 std::map<ATOOLS::Flavour,size_t> m_maxlegs;
0087
0088 tscmap m_cplmap;
0089
0090 const PDF::ISR_Handler_Map* p_isrhandlermap;
0091
0092 virtual void InitVertices() = 0;
0093
0094 void RotateVertices();
0095
0096 void CustomContainerInit();
0097
0098 virtual void ParticleInit() = 0;
0099 void ReadParticleData();
0100
0101 virtual void RegisterDefaults() const;
0102 void AddStandardContainers();
0103 void InitMEInfo();
0104
0105
0106 virtual bool ModelInit() = 0;
0107 void SetAlphaQED(const double& aqed_def);
0108 void SetAlphaQEDByScale(const double& scale2);
0109 void SetAlphaQEDByInput(const std::string& tag);
0110 void SetAlphaQCD(const PDF::ISR_Handler_Map& isr, const double& alphaS);
0111 void SetRunningFermionMasses();
0112 void SetRunningBosonMasses();
0113
0114 void ReadExplicitCKM(ATOOLS::CMatrix& CKM);
0115 void OutputCKM();
0116
0117 public:
0118 Model_Base(bool);
0119 virtual ~Model_Base();
0120
0121 bool ModelInit(const PDF::ISR_Handler_Map& isr) {
0122 p_isrhandlermap = &isr;
0123 return ModelInit();
0124 }
0125
0126 static void ShowSyntax(const size_t mode);
0127 void InitializeInteractionModel();
0128 void GetCouplings(Coupling_Map &cpls);
0129
0130 std::string Name() const { return m_name; }
0131
0132 inline tscmap *GetCouplings() { return &m_cplmap; }
0133
0134 inline size_t MaxLegs(const ATOOLS::Flavour &fl) const
0135 { std::map<ATOOLS::Flavour,size_t>::const_iterator
0136 it(m_maxlegs.find(fl)); return it==m_maxlegs.end()?0:it->second; }
0137
0138 virtual int ScalarNumber(const std::string) const;
0139 virtual double ScalarConstant(const std::string) const;
0140 virtual Complex ComplexConstant(const std::string) const;
0141 virtual ATOOLS::Function_Base * GetScalarFunction(const std::string);
0142 virtual double ScalarFunction(const std::string,double);
0143 virtual std::string MappedLorentzName(const std::string& label) const {return label;}
0144
0145 int MaxNumber() const;
0146
0147 const std::vector<Single_Vertex> &Vertices() const;
0148 const std::vector<Single_Vertex> &OriginalVertices() const;
0149
0150
0151
0152 const ScalarConstantsMap & ScalarConstants() const {return *p_constants; }
0153
0154 inline const Vertex_Table *VertexTable() const { return &m_vtable; }
0155
0156 virtual bool CheckFlavours(int nin, int nout, ATOOLS::Flavour* flavs);
0157
0158 inline ATOOLS::Flavour_Vector IncludedFlavours() const { return m_fls; }
0159
0160 inline VMIterator_Pair GetVertex(const std::string &key) const
0161 { return m_vmap.equal_range(key); }
0162
0163
0164
0165
0166
0167
0168
0169
0170 virtual size_t IndexOfOrderKey(const std::string&) const;
0171
0172 virtual void ResetVerticesWithEWParameters(const EWParameters&) {};
0173
0174 const PDF::ISR_Handler_Map& ISRHandlerMap() const { return *p_isrhandlermap; }
0175
0176 void CheckForNegativeCouplingOrders();
0177 inline bool HasNegativeCouplingOrders() const
0178 { return m_hasnegativecouplingorders; }
0179 };
0180
0181 extern Model_Base *s_model;
0182
0183 }
0184
0185 #endif
0186
0187