File indexing completed on 2024-04-06 12:13:30
0001
0002
0003
0004
0005 #include "GeneratorInterface/ExhumeInterface/interface/Higgs.h"
0006 #include "GeneratorInterface/ExhumeInterface/interface/hdecay.h"
0007
0008
0009
0010 extern "C" {
0011 extern struct {
0012 int mdcy[3][500], mdme[2][8000];
0013 double brat[8000];
0014 int kfdp[5][8000];
0015 } pydat3_;
0016 }
0017 #define pydat3 pydat3_
0018
0019
0020 Exhume::Higgs::Higgs(const edm::ParameterSet& pset) : CrossSection(pset) {
0021 std::cout << std::endl << " = Higgs Subprocess Selected =" << std::endl;
0022
0023 One = 1.0;
0024 BR = &One;
0025 HiggsMass2 = HiggsMass * HiggsMass;
0026 HiggsWidth = HiggsWidth_();
0027 TotWidth = HiggsWidth;
0028
0029 SetC();
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045 FsfTop = 0.25 / (TopMass * TopMass);
0046 FsfBottom = 0.25 / (BottomMass * BottomMass);
0047
0048
0049 NLOConst = M_PI + 5.5 / M_PI;
0050
0051 Name = "Higgs";
0052 Partons.resize(1);
0053 Partons[0].id = 25;
0054 }
0055
0056 inline void Exhume::Higgs::SetC() {
0057 double Hm2pGam2 = HiggsMass2 + HiggsWidth * HiggsWidth;
0058 double SqrtHm2pGam2 = sqrt(Hm2pGam2);
0059 double HmpSqrtHm2pGam2 = HiggsMass + SqrtHm2pGam2;
0060
0061 C = (2.0 / HiggsMass) * M_PI * SqrtHm2pGam2 * (HiggsWidth * HiggsWidth + HiggsMass * HmpSqrtHm2pGam2) /
0062 (2.0 * pow(HiggsMass, 4.5) * HiggsWidth * sqrt(2 * HmpSqrtHm2pGam2));
0063
0064 C = sqrt(1.0 / C);
0065
0066 GGHConst = sqrt((*BR)) * 0.25 * I * LambdaW / M_PI;
0067 }
0068
0069 void Exhume::Higgs::SetHiggsMass(const double& HM_) {
0070 HiggsMass = HM_;
0071 HiggsMass2 = HiggsMass * HiggsMass;
0072 HiggsWidth = HiggsWidth_();
0073 TotWidth = HiggsWidth;
0074 HiggsWidth = TotWidth * (*BR);
0075
0076 SetC();
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087 return;
0088 }
0089
0090 double Exhume::Higgs::SubProcess() {
0091 AlphaS_ = AlphaS(SqrtsHat);
0092
0093 double ModAmp = abs(GluGlu2HiggsAmp() * Propagator() * C);
0094
0095 return ((1.0 + AlphaS_ * NLOConst) * (Gev2fb * ModAmp * ModAmp * M_PI * InvsHat2));
0096 }
0097
0098 double Exhume::Higgs::HiggsWidth_() {
0099
0100
0101
0102 flag_.ihiggs = 0;
0103 flag_.nnlo = 0;
0104 flag_.ipole = 1;
0105 oldfash_.nfgg = 5;
0106 onshell_.ionsh = 0;
0107 onshell_.ionwz = 0;
0108 param_.gf = 1.16639e-5;
0109 param_.alph = AlphaEw;
0110 param_.amtau = 1.7771;
0111 param_.ammuon = MuonMass;
0112 param_.amz = ZMass;
0113 param_.amw = WMass;
0114 ckmpar_.vus = 0.2205;
0115 ckmpar_.vcb = 0.04;
0116 ckmpar_.vub = 0.08 * ckmpar_.vcb;
0117 masses_.ams = StrangeMass;
0118 masses_.amc = 1.42;
0119 masses_.amb = BottomMass;
0120 masses_.amt = TopMass;
0121 strange_.amsb = masses_.ams;
0122 als_.amc0 = masses_.amc;
0123 als_.amb0 = masses_.amb;
0124 als_.amt0 = masses_.amt;
0125 double acc = 1.0e-8;
0126 int nloop = 2;
0127 double alsmz = 0.118;
0128
0129 als_.xlambda = xitla_(&nloop, &alsmz, &acc);
0130 als_.n0 = 5;
0131 alsini_(&acc);
0132 wzwdth_.gamw = 2.08;
0133 wzwdth_.gamz = 2.49;
0134
0135 int nber = 18;
0136 bernini_(&nber);
0137 hmass_.amsm = HiggsMass;
0138 double GfAmt = param_.gf * masses_.amt;
0139 double Mw_Mt2 = (param_.amw * param_.amw) / (masses_.amt * masses_.amt);
0140 double one_Mw_Mt2 = 1.0 - Mw_Mt2;
0141 wzwdth_.gamt0 = GfAmt * GfAmt * GfAmt * 0.125 / sqrt(2.0) / M_PI * one_Mw_Mt2 * one_Mw_Mt2 * (1 + 2 * Mw_Mt2);
0142 wzwdth_.gamt1 = wzwdth_.gamt0;
0143
0144
0145 hdec_();
0146
0147
0148
0149 return (widthsm_.smwdth);
0150 }
0151
0152 void Exhume::Higgs::SetPartons() {
0153 Partons[0].p = CentralVector;
0154
0155 return;
0156 }
0157
0158 inline double Exhume::Higgs::SubParameterWeight() { return (1.0); }
0159
0160 inline double Exhume::Higgs::SubParameterRange() { return (1.0); }
0161
0162 void Exhume::Higgs::MaximiseSubParameters() { return; }
0163
0164 void Exhume::Higgs::SetSubParameters() { return; }
0165
0166 void Exhume::Higgs::SetHiggsDecay(const int& id_) {
0167 pydat3.mdme[0][209] = 0;
0168 pydat3.mdme[0][210] = 0;
0169 pydat3.mdme[0][211] = 0;
0170 pydat3.mdme[0][212] = 0;
0171 pydat3.mdme[0][213] = 0;
0172 pydat3.mdme[0][214] = 0;
0173 pydat3.mdme[0][215] = 0;
0174 pydat3.mdme[0][216] = 0;
0175 pydat3.mdme[0][217] = 0;
0176 pydat3.mdme[0][218] = 0;
0177 pydat3.mdme[0][219] = 0;
0178 pydat3.mdme[0][220] = 0;
0179 pydat3.mdme[0][221] = 0;
0180 pydat3.mdme[0][222] = 0;
0181 pydat3.mdme[0][223] = 0;
0182 pydat3.mdme[0][224] = 0;
0183 pydat3.mdme[0][225] = 0;
0184
0185
0186
0187 switch (id_) {
0188 case 3:
0189
0190 pydat3.mdme[0][211] = 1;
0191 BR = &widthsm_.smbrs;
0192 break;
0193 case 4:
0194
0195 pydat3.mdme[0][212] = 1;
0196 BR = &widthsm_.smbrc;
0197 break;
0198 case 5:
0199
0200 pydat3.mdme[0][213] = 1;
0201 BR = &widthsm_.smbrb;
0202 break;
0203 case 6:
0204
0205 pydat3.mdme[0][214] = 1;
0206 BR = &widthsm_.smbrt;
0207 break;
0208 case 13:
0209
0210 pydat3.mdme[0][218] = 1;
0211 BR = &widthsm_.smbrm;
0212 break;
0213 case 15:
0214
0215 pydat3.mdme[0][219] = 1;
0216 BR = &widthsm_.smbrl;
0217 break;
0218 case 21:
0219
0220 pydat3.mdme[0][221] = 1;
0221 BR = &widthsm_.smbrg;
0222 break;
0223 case 22:
0224
0225 pydat3.mdme[0][222] = 1;
0226 BR = &widthsm_.smbrga;
0227 break;
0228 case 23:
0229
0230 pydat3.mdme[0][224] = 1;
0231 BR = &widthsm_.smbrz;
0232 break;
0233 case 24:
0234
0235 pydat3.mdme[0][225] = 1;
0236 BR = &widthsm_.smbrw;
0237 break;
0238
0239 default:
0240 std::cout << " Unrecognised PDG code for Higgs Decay" << std::endl;
0241 for (int alldecay = 209; alldecay < 226; alldecay++) {
0242 pydat3.mdme[0][alldecay] = 1;
0243 }
0244 BR = &One;
0245 break;
0246 }
0247
0248
0249
0250 SetC();
0251
0252
0253
0254
0255
0256
0257
0258
0259
0260
0261
0262
0263
0264 return;
0265 }
0266