Page MenuHomeHEPForge

ScannerSTwoHDM.cpp
No OneTemporary

ScannerSTwoHDM.cpp

#include "ScannerSTwoHDM.h"
using namespace std;
string TwoHDM::filepath="ScannerScore/ScannerSModels/2HDM/TwoHDM.potential";
int TwoHDM::nHzero=3; //Number of neutral scalars
int TwoHDM::nHplus=1; //Number of singly charged scalars
int TwoHDM::whichanalyses=3; //which Higgs bounds analysis
int TwoHDM::whichinput=1; //which type of input you will provide (1=hadronic)
TwoHDM::TwoHDM():MassBeta(2){
//CONSTRUCTOR
alphaSM=-atan(1);
bsgamma_max=4.1;
bsgamma_min=3.;
Ecm2=2000.;
Ecm7=7000.;
Ecm8=8000.;
#ifdef HBMODE
HiggsBoundsAnalysis.rewrite_values(nHzero,nHplus,whichanalyses,whichinput); //sets the values needed to initialize HiggsBounds (will be initialized in UserInitCalcs)
#endif
//Loading numerical tables for cross-sections
LoadAll2HDMTables();
///////////////////////////////
//Initialise arrays to zero
//Higgs couplings to vector bosons
for(int i=0;i<nHzero;++i){
Rhvv[i]=0;
for(int j=0;j<nHzero;++j)
Rhhv[i][j]=0;
for(int t=0;t<4;++t)
for(int f=0;f<3;++f)
Rhf[i][f]=0;
}
for(int i=0;i!=8;++i){
mass_bounds[i]=false;
L_bounds[i]=false;
phi_bounds[i]=true;
}
phi_bounds[2]=false;
phi_bounds[6]=false;
}
void TwoHDM::readfile(std::istream & in){
//This function is called from the overloaded operator >> when a TwoHDM input file is provided.
//On the base class, Potential::readfile simply calls openinput() on "in".
//Since TwoHDM files only contain the relevante variables, "this" readfile opens an auxiliary file in the same format has Potential::readfile
//and then replaces the relevante variables bty the values in "in".
ifstream modelfile;
OpenModelFile(modelfile,filepath);
openinput(modelfile);
mass_bounds[0]=getvariable(in,Cp.Mass.Vecmin[0],Cp.Mass.Vecmax[0],">mH");
mass_bounds[1]=getvariable(in,Cp.Mass.Vecmin[1],Cp.Mass.Vecmax[1],">mh");
mass_bounds[2]=getvariable(in,Cp.Mass.Vecmin[2],Cp.Mass.Vecmax[2],">mA");
mass_bounds[3]=getvariable(in,Cp.Mass.Vecmin[3],Cp.Mass.Vecmax[3],">mH+");
mass_bounds[4]=getvariable(in,Cp.Mass.Vecmin[4],Cp.Mass.Vecmax[4],">mH+");
//check if there were bounds imposed on the dependent couplings
L_bounds[0]=getvariable(in,Cp.L.Vecmin[0],Cp.L.Vecmax[0],">m11^2");
L_bounds[1]=getvariable(in,Cp.L.Vecmin[1],Cp.L.Vecmax[1],">m22^2");
L_bounds[7]=getvariable(in,Cp.L.Vecmin[7],Cp.L.Vecmax[7],">m12^2");
L_bounds[3]=getvariable(in,Cp.L.Vecmin[3],Cp.L.Vecmax[3],">lambda1");
L_bounds[4]=getvariable(in,Cp.L.Vecmin[4],Cp.L.Vecmax[4],">lambda2");
L_bounds[5]=getvariable(in,Cp.L.Vecmin[5],Cp.L.Vecmax[5],">lambda3");
L_bounds[6]=getvariable(in,Cp.L.Vecmin[6],Cp.L.Vecmax[6],">lambda4");
L_bounds[2]=getvariable(in,Cp.L.Vecmin[2],Cp.L.Vecmax[2],">lambda5");
bool alpha_bounds=getvariable(in,MixingPars.Vecmin[0],MixingPars.Vecmax[0],">alpha");
bool tanbeta_bounds=getvariable(in,PhiPar.Vecmin[0],PhiPar.Vecmax[0],">tanbeta");
getvariable(in,Type2HDM,">2HDM_type:");
//check of all independent parameters were defined in the input file
for(int i=0;i!=5;++i)
if(!mass_bounds[i]){
cerr<<"ScannerS ERROR: Unable to find a necessary parameter in the 2HDM input file. This model ALWAYS requires you define the range for mH, mh, mA, mH+, tanbeta and m12^2. These are independent parameters that will be randomly generated."<<endl;
exit(EXIT_FAILURE);
}
if((!L_bounds[7]) || (!tanbeta_bounds)){
cerr<<"ScannerS ERROR: Unable to find a necessary parameter in the 2HDM input file. This model ALWAYS requires you define the range for mH, mh, mA, mH+, tanbeta and m12^2. These are independent parameters that will be randomly generated."<<endl;
exit(EXIT_FAILURE);
}
//inert model
if(PhiPar.Vecmin[0]==0 && PhiPar.Vecmax[0]==0){
if(alpha_bounds){
cerr<<"ScannerS ERROR: While using the inert model (tanbeta==0) there are no mixing directions so alpha is not defined."<<endl;
exit(EXIT_FAILURE);
}
if(Cp.L.Vecmin[7]!=0 || Cp.L.Vecmax[7]!=0){
cerr<<"ScannerS ERROR: In the inert model (tanbeta==0), m12^2 must also be equal to 0."<<endl;
exit(EXIT_FAILURE);
}
if((!L_bounds[4]) || (!L_bounds[5])){
cerr<<"ScannerS ERROR: Unable to find a necessary parameter in the 2HDM input file. In the inert model (tanbeta==0) you must define lamdba2 and lamdba3. These are independent parameters that will be randomly generated."<<endl;
exit(EXIT_FAILURE);
}
//In the inert model there is no mixing so if tanbeta==0, there is no alpha
MixingPars.Vec.resize(0);
MixingPars.Vecmin.resize(0);
MixingPars.Vecmax.resize(0);
}
//non-inert models
else{
if(!alpha_bounds){
cerr<<"ScannerS ERROR: Unable to find a necessary parameter in the 2HDM input file. Non-inert models require you to define the mixing angle alpha. This is an independent parameter that will be randomly generated."<<endl;
exit(EXIT_FAILURE);
}
if(Cp.Mass.Vecmax[1]>Cp.Mass.Vecmin[0]){
std::clog<<endl<<"ScannerS Warning: the mass range for the light Higgs (mh) is superior or overlaps that of the heavy Higgs (mH)."<<endl;
std::clog<<"-> Resetting internal alpha to generate physical alpha in [-Pi/2:Pi/2] to cover all possible cases and so that ordering is consistent with input file. "<<endl;
std::clog<<"-> Do you wish to continue? [Y/N]"<<endl;;
string choice;
do{
cin>>choice;
if(choice=="N"){
std::clog<<"Scan aborted by the user!"<<endl;
exit(EXIT_FAILURE);
}
else if(choice!="Y")
std::clog<<"Please type exacly Y or N."<<endl;
}while(choice!="Y");
//resetting alpha ranges to [0;2Pi] if the user wished to continue the run
MixingPars.Vecmin[0]=0;
MixingPars.Vecmax[0]=2*acos(-1);
}
}
}
std::string TwoHDM::name(){
//returns the name of the type of potential used.
string name("2HDM");
return name;
}
void TwoHDM::PrintHeader(){
std::clog<<endl<<"***********************************************"<<endl;
std::clog<<"*********** ScannerS version 1.0.3 ************"<<endl;
std::clog<<"***********************************************" <<endl;
std::clog<<endl<<"---------- SUMMARY INFO FOR THIS RUN ---------- "<<endl;
std::clog<<endl<<"Potential Type: 2HDM"<<endl;
std::clog<<endl<<"V(Phi1,Phi2) = L0Phi1'Phi1 + L1Phi2'Phi2 + L7(Phi1'Phi2+Phi2'Phi1) + (L3/2)(Phi1'Phi1)² + (L4/2)(Phi2'Phi2)² + L5Phi1'Phi1Phi2'Phi2 + L5Phi2'Phi1Phi1'Phi2 + (L2/2)((Phi1'Phi2)²+(Phi2'Phi1)²)"<<endl;
std::clog<<endl<< "The expanded potential is:"<<endl;
std::clog<<endl<<(*this)<<endl;
std::clog<<endl<<"The ranges of parameters to be scanned are:"<<endl;
std::clog<<endl<<"Ranges for vacuum expectation values:"<<endl;
for(size_t i=0;i!=Phi.size();++i){
if(phi_bounds[i])
std::clog<<"phi"<<i<<" in ["<<Phi.vgetmin(i)<<":"<<Phi.vgetmax(i)<<"]"<< endl;
}
std::clog<<endl<<"Ranges for couplings:"<< endl;
for(size_t i=0;i!=Cp.L.size();++i){
if(L_bounds[i])
std::clog<<"L"<<i<<" in ["<<Cp.L.vgetmin(i)<<":"<<Cp.L.vgetmax(i)<<"]"<< endl;
}
std::clog<<endl<<"Ranges for physical state masses:"<< endl;
for(size_t i=0;i!=Cp.Mass.size();++i){
if(mass_bounds[i])
std::clog<<"m"<<i<<" in ["<<Cp.Mass.vgetmin(i)<<":"<<Cp.Mass.vgetmax(i)<<"]"<<endl;
}
std::clog<<endl<<"Range for alpha (mixing parameterization):"<<endl;
std::clog<<"alpha in ["<<MixingPars.Vecmin[0]<<":"<<MixingPars.Vecmax[0]<<"]"<<endl;
std::clog<<endl<<"Range for tanbeta (v2/v6 parameterization):"<<endl;
std::clog<<"tanbeta in ["<<PhiPar.Vecmin[0]<<":"<<PhiPar.Vecmax[0]<<"]"<<endl;
std::clog<<endl;
std::clog<<"The seed you are using for the random number generator is: "<<r.getseed()<< endl<< endl;
}
bool TwoHDM::CheckBounds(){
//unlike Potential::CheckBounds(), this only checks dependent parameters for which the range was explicity declared in the 2HDM input file. if they were not declared in input file (and were loaded of 2HDM.potential by default) L_bounds will be false and the parameters will not be checked
//The only dependend parameters (noticing that in this class we use paramerizations for both the mixing and the VeV angle)
for(size_t i=0;i!=7;++i)
if(L_bounds[i] && (Cp.L[i]<Cp.L.vgetmin(i) || Cp.L[i]>Cp.L.vgetmax(i))){
#ifdef VERBOSE
std::clog<<endl<<"---> ScannerS: Point rejected by TwoHDM::CheckBounds()."<<endl;
#endif
return false;
}
return true;
}
bool TwoHDM::Test_bs_gamma(){
////1.2 flavour Physics observables
MassBeta[0]=mHcharged; //This is mHcharged
MassBeta[1]=beta; //This is beta
if(Type2HDM==1)
bsgamma=TableSuperisoBsgammaType1(MassBeta); ////Call superiso table to test B-> X_s gamma
if(Type2HDM==2)
bsgamma=TableSuperisoBsgammaType2(MassBeta); ////Call superiso table to test B-> X_s gamma
if(Type2HDM==3)
bsgamma=TableSuperisoBsgammaType3(MassBeta); ////Call superiso table to test B-> X_s gamma
if(Type2HDM==4)
bsgamma=TableSuperisoBsgammaType4(MassBeta); ////Call superiso table to test B-> X_s gamma
if(bsgamma*1e4>bsgamma_max || bsgamma*1e4 <bsgamma_min)
return false;
return true;
}
#ifdef HBMODE
void TwoHDM::PrepareHiggsBoundsInput(){
//Call of Hdecay to compute all branching ratios
CreateInputFileHdecay2HDM(Type2HDM,tanbeta,alpha,mHlight,mHheavy,mA,mHcharged,Cp.L[7]);
HdecayCalc2HDM(HdecayA,HdecayHlight,HdecayHheavy,HdecayHcharged,HdecayTop);
//Defining Higgs couplings to fermions. indices are:
// Rhf[Type][iHiggs][ifermion]: Type=0,1,2,3 (I, II, III, IV); iHiggs=0,1,2 (h,A,H), ifermion= 0,1,2 (up-type quarks, d-type quarks and fermions)
double cosalpha=cos(alpha);
double sinalpha=sin(alpha);
double cosbeta=cos(beta);
double sinbeta=sin(beta);
if(Type2HDM==1){ //Type I
Rhf[0][0]=cosalpha/sinbeta;
Rhf[0][1]=cosalpha/sinbeta;
Rhf[0][2]=cosalpha/sinbeta;
Rhf[1][0]=1./tanbeta;
Rhf[1][1]=-1./tanbeta;
Rhf[1][2]=-1./tanbeta;
Rhf[2][0]=sinalpha/sinbeta;
Rhf[2][1]=sinalpha/sinbeta;
Rhf[2][2]=sinalpha/sinbeta;
}
if(Type2HDM==2){ //Type II
Rhf[0][0]=cosalpha/sinbeta;
Rhf[0][1]=-sinalpha/cosbeta;
Rhf[0][2]=-sinalpha/cosbeta;
Rhf[1][0]=1./tanbeta;
Rhf[1][1]=tanbeta;
Rhf[1][2]=tanbeta;
Rhf[2][0]=sinalpha/sinbeta;
Rhf[2][1]=cosalpha/cosbeta;
Rhf[2][2]=cosalpha/cosbeta;
}
if(Type2HDM==3){ //Lepton Specific
Rhf[0][0]=cosalpha/sinbeta;
Rhf[0][1]=cosalpha/sinbeta;
Rhf[0][2]=-sinalpha/cosbeta;
Rhf[1][0]=1./tanbeta;
Rhf[1][1]=-1./tanbeta;
Rhf[1][2]=tanbeta;
Rhf[2][0]=sinalpha/sinbeta;
Rhf[2][1]=sinalpha/sinbeta;
Rhf[2][2]=cosalpha/cosbeta;
}
if(Type2HDM==4){ //Flipped
Rhf[0][0]=cosalpha/sinbeta;
Rhf[0][1]=-sinalpha/cosbeta;
Rhf[0][2]=cosalpha/sinbeta;
Rhf[1][0]=1./tanbeta;
Rhf[1][1]=tanbeta;
Rhf[1][2]=-1./tanbeta;
Rhf[2][0]=sinalpha/sinbeta;
Rhf[2][1]=cosalpha/cosbeta;
Rhf[2][2]=sinalpha/sinbeta;
}
//Taking Squares now
for (int i=0;i<4;++i)
for (int j=0;j<nHzero;++j)
for (int k=0;k<3;++k)
Rhf[j][k]*=Rhf[j][k];
/////////////////////////////////////////////////////////
//Passing couplings, masses and decay properties to HB //
/////////////////////////////////////////////////////////
//Light Higgs - h
HiggsBoundsAnalysis.Mh[0]=mHlight;
HiggsBoundsAnalysis.CP[0]=1;
Rhvv[0]=pow(sin(beta-alpha),2); //hVV coupling
Rhhv[0][1] = pow(cos(beta-alpha),2); // AhV coupling
Rhhv[1][0] = Rhhv[0][1];
//Branching ratios and total width
HiggsBoundsAnalysis.BR_hjss[0] = HdecayHlight["BR(h -> s sbar)"];
HiggsBoundsAnalysis.BR_hjcc[0] = HdecayHlight["BR(h -> c cbar)"];
HiggsBoundsAnalysis.BR_hjbb[0] = HdecayHlight["BR(h -> b bbar)"];
HiggsBoundsAnalysis.BR_hjmumu[0] = HdecayHlight["BR(h -> mu+ mu-)"];
HiggsBoundsAnalysis.BR_hjtautau[0] = HdecayHlight["BR(h -> tau+ tau-)"];
HiggsBoundsAnalysis.BR_hjWW[0] = HdecayHlight["BR(h -> W+ W-)"];
HiggsBoundsAnalysis.BR_hjZZ[0] = HdecayHlight["BR(h -> Z Z)"];
HiggsBoundsAnalysis.BR_hjZga[0]= HdecayHlight["BR(h -> Z gamma)"];
HiggsBoundsAnalysis.BR_hjgaga[0] = HdecayHlight["BR(h -> gamma gamma)"];
HiggsBoundsAnalysis.BR_hjgg[0] = HdecayHlight["BR(h -> g g)"];
HiggsBoundsAnalysis.BR_hjhihi[0][1] = HdecayHlight["BR(h -> A A)"];
HiggsBoundsAnalysis.MhGammaTot[0] = HdecayHlight["Width"];
//Pseudo scalar - A
HiggsBoundsAnalysis.Mh[1]=mA;
HiggsBoundsAnalysis.CP[1]=-1;
Rhhv[1][2] = Rhvv[0]; // AHV coupling = pow(sin(beta-alpha),2)
Rhhv[2][1] = Rhvv[0];
//Branching ratios and total width
HiggsBoundsAnalysis.BR_hjss[1] = HdecayA["BR(A -> s sbar)"];
HiggsBoundsAnalysis.BR_hjcc[1] = HdecayA["BR(A -> c cbar)"];
HiggsBoundsAnalysis.BR_hjbb[1] = HdecayA["BR(A -> b bbar)"];
HiggsBoundsAnalysis.BR_hjmumu[1] = HdecayA["BR(A -> mu+ mu-)"];
HiggsBoundsAnalysis.BR_hjtautau[1] = HdecayA["BR(A -> tau+ tau-)"];
HiggsBoundsAnalysis.BR_hjWW[1] = HdecayA["BR(A -> W+ W-)"];
HiggsBoundsAnalysis.BR_hjZZ[1] = HdecayA["BR(A -> Z Z)"];
HiggsBoundsAnalysis.BR_hjZga[1]= HdecayA["BR(A -> Z gamma)"];
HiggsBoundsAnalysis.BR_hjgaga[1] = HdecayA["BR(A -> gamma gamma)"];
HiggsBoundsAnalysis.BR_hjgg[1] = HdecayA["BR(A -> g g)"];
HiggsBoundsAnalysis.MhGammaTot[1] = HdecayA["Width"];
//Heavy Higgs - H
HiggsBoundsAnalysis.Mh[2]=mHheavy;
HiggsBoundsAnalysis.CP[2]=1;
Rhvv[2] = Rhhv[0][1]; //HVV coupling = pow(cos(beta-alpha),2)
//Branching ratios and total width
HiggsBoundsAnalysis.BR_hjss[2] = HdecayHheavy["BR(H -> s sbar)"];
HiggsBoundsAnalysis.BR_hjcc[2] = HdecayHheavy["BR(H -> c cbar)"];
HiggsBoundsAnalysis.BR_hjbb[2] = HdecayHheavy["BR(H -> b bbar)"];
HiggsBoundsAnalysis.BR_hjmumu[2] = HdecayHheavy["BR(H -> mu+ mu-)"];
HiggsBoundsAnalysis.BR_hjtautau[2] = HdecayHheavy["BR(H -> tau+ tau-)"];
HiggsBoundsAnalysis.BR_hjWW[2] = HdecayHheavy["BR(H -> W+ W-)"];
HiggsBoundsAnalysis.BR_hjZZ[2] = HdecayHheavy["BR(H -> Z Z)"];
HiggsBoundsAnalysis.BR_hjZga[2]= HdecayHheavy["BR(H -> Z gamma)"];
HiggsBoundsAnalysis.BR_hjgaga[2] = HdecayHheavy["BR(H -> gamma gamma)"];
HiggsBoundsAnalysis.BR_hjgg[2] = HdecayHheavy["BR(H -> g g)"];
HiggsBoundsAnalysis.BR_hjhihi[2][0] = HdecayHlight["BR(H -> h h)"];
HiggsBoundsAnalysis.BR_hjhihi[2][1] = HdecayHlight["BR(H -> A A)"];
HiggsBoundsAnalysis.MhGammaTot[2] = HdecayHheavy["Width"];
//Charged Higgs - H^+
HiggsBoundsAnalysis.MHplus[0] = mHcharged;
HiggsBoundsAnalysis.BR_tWpb[0] = HdecayTop["BR(t -> b W+)"];
HiggsBoundsAnalysis.BR_tHpjb[0] = HdecayTop["BR(t -> b H+)"];
HiggsBoundsAnalysis.BR_Hpjcs[0] = HdecayHcharged["BR(H+ -> c sbar)"];
HiggsBoundsAnalysis.BR_Hpjcb[0] = HdecayHcharged["BR(H+ -> c bbar)"];
HiggsBoundsAnalysis.BR_Hptaunu[0] = HdecayHcharged["BR(H+ -> tau+ nu_tau)"];
HiggsBoundsAnalysis.MHplusGammaTot[0] = HdecayHcharged["Width"];
//Neutral Higgs hadronic input
for(size_t i=0;i<nHzero;++i){
//LEP
HiggsBoundsAnalysis.CS_lep_hjZ_ratio[i]=Rhvv[i];
HiggsBoundsAnalysis.CS_lep_bbhj_ratio[i]=Rhf[i][1];
HiggsBoundsAnalysis.CS_lep_tautauhj_ratio[i]=Rhf[i][2];
for (size_t j=0; j<nHzero;++j)
HiggsBoundsAnalysis.CS_lep_hjhi_ratio[i][j]=Rhhv[i][j];
//Tevatron
HiggsBoundsAnalysis.CS_tev_hj_ratio[i]=InternalTableSusHiPPbar(Ecm2,HiggsBoundsAnalysis.Mh[i],alpha,tanbeta,i,Type2HDM)/InternalTableSusHiPPbar(Ecm2,HiggsBoundsAnalysis.Mh[i],alphaSM,1,0,Type2HDM);
HiggsBoundsAnalysis.CS_tev_hjb_ratio[i]=Rhf[i][1];
HiggsBoundsAnalysis.CS_tev_hjW_ratio[i]=Rhvv[i];
HiggsBoundsAnalysis.CS_tev_hjZ_ratio[i]=Rhvv[i];
HiggsBoundsAnalysis.CS_tev_vbf_ratio[i]=Rhvv[i];
HiggsBoundsAnalysis.CS_tev_tthj_ratio[i]=Rhf[i][0];
//LHC7
HiggsBoundsAnalysis.CS_lhc7_hj_ratio[i]=InternalTableSusHiPP(Ecm7,HiggsBoundsAnalysis.Mh[i],alpha,tanbeta,i,Type2HDM)/InternalTableSusHiPP(Ecm7,HiggsBoundsAnalysis.Mh[i],alphaSM,1,0,Type2HDM);
HiggsBoundsAnalysis.CS_lhc7_hjb_ratio[i]=Rhf[i][1];
HiggsBoundsAnalysis.CS_lhc7_hjW_ratio[i]=Rhvv[i];
HiggsBoundsAnalysis.CS_lhc7_hjZ_ratio[i]=Rhvv[i];
HiggsBoundsAnalysis.CS_lhc7_vbf_ratio[i]=Rhvv[i];
HiggsBoundsAnalysis.CS_lhc7_tthj_ratio[i]=Rhf[i][0];
//LHC8
HiggsBoundsAnalysis.CS_lhc8_hj_ratio[i]=InternalTableSusHiPP(Ecm8,HiggsBoundsAnalysis.Mh[i],alpha,tanbeta,i,Type2HDM)/InternalTableSusHiPP(Ecm8,HiggsBoundsAnalysis.Mh[i],alphaSM,1,0,Type2HDM);
HiggsBoundsAnalysis.CS_lhc8_hjb_ratio[i]=Rhf[i][1];
HiggsBoundsAnalysis.CS_lhc8_hjW_ratio[i]=Rhvv[i];
HiggsBoundsAnalysis.CS_lhc8_hjZ_ratio[i]=Rhvv[i];
HiggsBoundsAnalysis.CS_lhc8_vbf_ratio[i]=Rhvv[i];
HiggsBoundsAnalysis.CS_lhc8_tthj_ratio[i]=Rhf[i][0];
}
//Charged Higgs hadronic input
HiggsBoundsAnalysis.CS_lep_HpjHmi_ratio[0] = 1;
}
#endif
bool TwoHDM::TestZbbarbLEP(){
return tanbeta>Interp(mHcharged,CKMfitterZbbar);
}
//WARNING: This routine assumes the two scalars that get vevs in the decompositions of the two doublets are phi[2] and phi[6]!
void TwoHDM::PhysicalStates2HDM(){
//This routines returns the masses of the scalars in the 2HDM as well as the alpha mixing angle for the 2 CP even Higgs bosons and the beta angle between the vevs.
// INPUT:
// Mass - internal (vector like) array of masses
// Mixing - internal (matrix like) mixing matrix
// Phi - internal (vector like) array of field values
// OUTPUT:
// mHheavy - Mass of the heavy CP even Higgs
// mHlight - Mass of the light CP even Higgs
// mHc - Mass of the charged Higgs
// mA - Mass of the CP odd Higgs
// alpha - mixing angle for the 2 CP even Higgs bosons
// beta - angle between the vevs
mA=Cp.Mass[2]; //Mass of the pseudo scalar (numbering checked in VERBOSE mode)
mHcharged=Cp.Mass[3]; //Mass of the charged Higgs (numbering checked in VERBOSE mode. Note Mass[4] is the same because it corresponds to the imaginary part).
//Note that
// --
// | phi[2]=Mixing[0][2].H1+Mixing[1][2].H2
// | phi[6]=Mixing[0][6].H1+Mixing[1][6].H2
// --
double reflection=Mmixing[0][2]*Mmixing[1][6]-Mmixing[1][2]*Mmixing[0][6];
alpha=acos(reflection*Mmixing[0][2]);
if(-Mmixing[1][2]<0)//Deciding quadrant using the sign of the sine
alpha=2*Pi-alpha;
//Reduction to the quadrants in [-Pi/2;Pi/2]
if(0.5*Pi<alpha && alpha <=1.5*Pi)
alpha=alpha-Pi;
else if(1.5*Pi<alpha && alpha <=2*Pi)
alpha-=2*Pi;
//Mass ordering
if(Cp.Mass[0]<Cp.Mass[1]){
if(alpha>0)
alpha=alpha-0.5*Pi;
else
alpha=alpha+0.5*Pi;
mHheavy=Cp.Mass[1];
mHlight=Cp.Mass[0];
}
else{
mHheavy=Cp.Mass[0];
mHlight=Cp.Mass[1];
}
//Computing beta from VEVs
tanbeta=Phi[6]/Phi[2];
beta=atan(tanbeta);
}
//Debug function to calculate Ls from expressions obtained reliably with mathematica-
void CalcLs(vector<double> & lambda,double mHlight,double mHheavy,double mA,double mHcharged,double alpha,double beta, double m12sq){
double v=246;
double mHheavy2=mHheavy*mHheavy,mHlight2=mHlight*mHlight,mA2=mA*mA,mHcharged2=mHcharged*mHcharged;
lambda[0]= (mHheavy2 + mHlight2 + (mHheavy2 - mHlight2)*cos(2*alpha) - 2*m12sq*tan(beta))/(2*cos(beta)*cos(beta)*v*v);
lambda[1]=(mHheavy2+mHlight2 + (-mHheavy2 + mHlight2)*cos(2*alpha)-2*m12sq/tan(beta))/(2*sin(beta)*sin(beta)*v*v);
lambda[2]=(-m12sq + (mHheavy2 - mHlight2)*cos(alpha)*sin(alpha) + mHcharged2*sin(2*beta))/(v*v*cos(beta)*sin(beta));
lambda[3] = (mA2 - 2*mHcharged2 + m12sq/sin(beta)/cos(beta))/v/v;
lambda[4] = (-mA2 + m12sq/sin(beta)/cos(beta))/v/v;
return;
}
//WARNING: This routine assumes the two scalars that get vevs in the decompositions of the two doublets are phi[2] and phi[6]!
void PhysicalStates2HDM(MassRef & Mass, MmixingRef & Mixing,PhiRef & Phi,double & mHheavy, double & mhlight, double & mHc, double & mA, double & alpha,double & beta){
//This routines returns the masses of the scalars in the 2HDM as well as the alpha mixing angle for the 2 CP even Higgs bosons and the beta angle between the vevs.
/// INPUT:
// Mass - internal (vector like) array of masses
// Mixing - internal (matrix like) mixing matrix
// Phi - internal (vector like) array of field values
/// OUTPUT:
// mHheavy - Mass of the heavy CP even Higgs
// mhlight - Mass of the light CP even Higgs
// mHc - Mass of the charged Higgs
// mA - Mass of the CP odd Higgs
// alpha - mixing angle for the 2 CP even Higgs bosons
// beta - angle between the vevs
mA=Mass[2]; //Mass of the pseudo scalar (numbering checked in VERBOSE mode)
mHc=Mass[3]; //Mass of the charged Higgs (numbering checked in VERBOSE mode. Note Mass[4] is the same because it corresponds to the imaginary part).
//Note that
// --
// | phi[2]=Mixing[0][2].H1+Mixing[1][2].H2
// | phi[6]=Mixing[0][6].H1+Mixing[1][6].H2
// --
double reflection=Mixing[0][2]*Mixing[1][6]-Mixing[1][2]*Mixing[0][6];
alpha=acos(reflection*Mixing[0][2]);
/*std::clog<<"reflection="<<reflection<<endl;
std::clog<<"rotation matrix"<<endl;
std::clog<<"| "<<reflection*Mixing[0][2]<<"\t"<<Mixing[1][2]<<" |"<<endl;
std::clog<<"| "<<reflection*Mixing[0][6]<<"\t"<<Mixing[1][6]<<" |"<<endl;
std::clog<<"mup="<<Mass[0]<<endl;
std::clog<<"mdown="<<Mass[1]<<endl;*/
if(-Mixing[1][2]<0)//Deciding quadrant using the sign of the sine
alpha=2*Pi-alpha;
//std::clog<<"alpha correct quadrant 1="<<alpha/acos(-1)<<endl;
//Reduction to the quadrants in [-Pi/2;Pi/2]
if(0.5*Pi<alpha && alpha <=1.5*Pi)
alpha=Pi-alpha;
else if(1.5*Pi<alpha && alpha <=2*Pi)
alpha-=2*Pi;
//std::clog<<"alpha/Pi correct quadrant 2="<<alpha/acos(-1)<<endl;
//Mass ordering
if(Mass[0]<Mass[1]){
if(alpha>0)
alpha=alpha-0.5*Pi;
else
alpha=alpha+0.5*Pi;
mHheavy=Mass[1];
mhlight=Mass[0];
}
else{
mHheavy=Mass[0];
mhlight=Mass[1];
}
//Computing beta from VEVs
beta=atan(Phi[6]/Phi[2]);
}
//Function to load tables...
void LoadAll2HDMTables(void){
//Superiso tables load!
TableSuperisoBsgammaType1.create_from_file("ScannerScore/data/SuperisoBsgamma2HDMType1.dat");
TableSuperisoBsgammaType2.create_from_file("ScannerScore/data/SuperisoBsgamma2HDMType2.dat");
TableSuperisoBsgammaType3.create_from_file("ScannerScore/data/SuperisoBsgamma2HDMType3.dat");
TableSuperisoBsgammaType4.create_from_file("ScannerScore/data/SuperisoBsgamma2HDMType4.dat");
//SushiTablesLoad!
//CP even Higgses
//PP
TableSusHiFuncBB_mrange30_330Ecm7_14pp.create_from_file("ScannerScore/data/TableSusHiFuncBB_mrange30_330Ecm7_14pp.dat");
TableSusHiFuncBB_mrange330_360Ecm7_14pp.create_from_file("ScannerScore/data/TableSusHiFuncBB_mrange330_360Ecm7_14pp.dat");
TableSusHiFuncBB_mrange360_1000Ecm7_14pp.create_from_file("ScannerScore/data/TableSusHiFuncBB_mrange360_1000Ecm7_14pp.dat");
TableSusHiFuncTB_mrange30_330Ecm7_14pp.create_from_file("ScannerScore/data/TableSusHiFuncTB_mrange30_330Ecm7_14pp.dat");
TableSusHiFuncTB_mrange330_360Ecm7_14pp.create_from_file("ScannerScore/data/TableSusHiFuncTB_mrange330_360Ecm7_14pp.dat");
TableSusHiFuncTB_mrange360_1000Ecm7_14pp.create_from_file("ScannerScore/data/TableSusHiFuncTB_mrange360_1000Ecm7_14pp.dat");
TableSusHiFuncTT_mrange30_330Ecm7_14pp.create_from_file("ScannerScore/data/TableSusHiFuncTT_mrange30_330Ecm7_14pp.dat");
TableSusHiFuncTT_mrange330_360Ecm7_14pp.create_from_file("ScannerScore/data/TableSusHiFuncTT_mrange330_360Ecm7_14pp.dat");
TableSusHiFuncTT_mrange360_1000Ecm7_14pp.create_from_file("ScannerScore/data/TableSusHiFuncTT_mrange360_1000Ecm7_14pp.dat");
//PPbar
TableSusHiFuncBB_mrange30_330Ecm0_5_2ppbar.create_from_file("ScannerScore/data/TableSusHiFuncBB_mrange30_330Ecm0.5_2ppbar.dat");
TableSusHiFuncBB_mrange330_360Ecm0_5_2ppbar.create_from_file("ScannerScore/data/TableSusHiFuncBB_mrange330_360Ecm0.5_2ppbar.dat");
TableSusHiFuncBB_mrange360_450Ecm0_5_1ppbar.create_from_file("ScannerScore/data/TableSusHiFuncBB_mrange360_450Ecm0.5_1ppbar.dat");
TableSusHiFuncBB_mrange360_950Ecm1_1_5ppbar.create_from_file("ScannerScore/data/TableSusHiFuncBB_mrange360_950Ecm1_1.5ppbar.dat");
TableSusHiFuncBB_mrange360_1000Ecm1_5_2ppbar.create_from_file("ScannerScore/data/TableSusHiFuncBB_mrange360_1000Ecm1.5_2ppbar.dat");
TableSusHiFuncTB_mrange30_330Ecm0_5_2ppbar.create_from_file("ScannerScore/data/TableSusHiFuncTB_mrange30_330Ecm0.5_2ppbar.dat");
TableSusHiFuncTB_mrange330_360Ecm0_5_2ppbar.create_from_file("ScannerScore/data/TableSusHiFuncTB_mrange330_360Ecm0.5_2ppbar.dat");
TableSusHiFuncTB_mrange360_450Ecm0_5_1ppbar.create_from_file("ScannerScore/data/TableSusHiFuncTB_mrange360_450Ecm0.5_1ppbar.dat");
TableSusHiFuncTB_mrange360_950Ecm1_1_5ppbar.create_from_file("ScannerScore/data/TableSusHiFuncTB_mrange360_950Ecm1_1.5ppbar.dat");
TableSusHiFuncTB_mrange360_1000Ecm1_5_2ppbar.create_from_file("ScannerScore/data/TableSusHiFuncTB_mrange360_1000Ecm1.5_2ppbar.dat");
TableSusHiFuncTT_mrange30_330Ecm0_5_2ppbar.create_from_file("ScannerScore/data/TableSusHiFuncTT_mrange30_330Ecm0.5_2ppbar.dat");
TableSusHiFuncTT_mrange330_360Ecm0_5_2ppbar.create_from_file("ScannerScore/data/TableSusHiFuncTT_mrange330_360Ecm0.5_2ppbar.dat");
TableSusHiFuncTT_mrange360_450Ecm0_5_1ppbar.create_from_file("ScannerScore/data/TableSusHiFuncTT_mrange360_450Ecm0.5_1ppbar.dat");
TableSusHiFuncTT_mrange360_950Ecm1_1_5ppbar.create_from_file("ScannerScore/data/TableSusHiFuncTT_mrange360_950Ecm1_1.5ppbar.dat");
TableSusHiFuncTT_mrange360_1000Ecm1_5_2ppbar.create_from_file("ScannerScore/data/TableSusHiFuncTT_mrange360_1000Ecm1.5_2ppbar.dat");
//CP odd Higgs
//PP
TableSusHiAFuncBB_mrange30_330Ecm7_14pp.create_from_file("ScannerScore/data/TableSusHiAFuncBB_mrange30_330Ecm7_14pp.dat");
TableSusHiAFuncBB_mrange330_360Ecm7_14pp.create_from_file("ScannerScore/data/TableSusHiAFuncBB_mrange330_360Ecm7_14pp.dat");
TableSusHiAFuncBB_mrange360_1000Ecm7_14pp.create_from_file("ScannerScore/data/TableSusHiAFuncBB_mrange360_1000Ecm7_14pp.dat");
TableSusHiAFuncTB_mrange30_330Ecm7_14pp.create_from_file("ScannerScore/data/TableSusHiAFuncTB_mrange30_330Ecm7_14pp.dat");
TableSusHiAFuncTB_mrange330_360Ecm7_14pp.create_from_file("ScannerScore/data/TableSusHiAFuncTB_mrange330_360Ecm7_14pp.dat");
TableSusHiAFuncTB_mrange360_1000Ecm7_14pp.create_from_file("ScannerScore/data/TableSusHiAFuncTB_mrange360_1000Ecm7_14pp.dat");
TableSusHiAFuncTT_mrange30_330Ecm7_14pp.create_from_file("ScannerScore/data/TableSusHiAFuncTT_mrange30_330Ecm7_14pp.dat");
TableSusHiAFuncTT_mrange330_360Ecm7_14pp.create_from_file("ScannerScore/data/TableSusHiAFuncTT_mrange330_360Ecm7_14pp.dat");
TableSusHiAFuncTT_mrange360_1000Ecm7_14pp.create_from_file("ScannerScore/data/TableSusHiAFuncTT_mrange360_1000Ecm7_14pp.dat");
//PPbar
TableSusHiAFuncBB_mrange30_330Ecm0_5_2ppbar.create_from_file("ScannerScore/data/TableSusHiAFuncBB_mrange30_330Ecm0.5_2ppbar.dat");
TableSusHiAFuncBB_mrange330_360Ecm0_5_2ppbar.create_from_file("ScannerScore/data/TableSusHiAFuncBB_mrange330_360Ecm0.5_2ppbar.dat");
TableSusHiAFuncBB_mrange360_450Ecm0_5_1ppbar.create_from_file("ScannerScore/data/TableSusHiAFuncBB_mrange360_450Ecm0.5_1ppbar.dat");
TableSusHiAFuncBB_mrange360_950Ecm1_1_5ppbar.create_from_file("ScannerScore/data/TableSusHiAFuncBB_mrange360_950Ecm1_1.5ppbar.dat");
TableSusHiAFuncBB_mrange360_1000Ecm1_5_2ppbar.create_from_file("ScannerScore/data/TableSusHiAFuncBB_mrange360_1000Ecm1.5_2ppbar.dat");
TableSusHiAFuncTB_mrange30_330Ecm0_5_2ppbar.create_from_file("ScannerScore/data/TableSusHiAFuncTB_mrange30_330Ecm0.5_2ppbar.dat");
TableSusHiAFuncTB_mrange330_360Ecm0_5_2ppbar.create_from_file("ScannerScore/data/TableSusHiAFuncTB_mrange330_360Ecm0.5_2ppbar.dat");
TableSusHiAFuncTB_mrange360_450Ecm0_5_1ppbar.create_from_file("ScannerScore/data/TableSusHiAFuncTB_mrange360_450Ecm0.5_1ppbar.dat");
TableSusHiAFuncTB_mrange360_950Ecm1_1_5ppbar.create_from_file("ScannerScore/data/TableSusHiAFuncTB_mrange360_950Ecm1_1.5ppbar.dat");
TableSusHiAFuncTB_mrange360_1000Ecm1_5_2ppbar.create_from_file("ScannerScore/data/TableSusHiAFuncTB_mrange360_1000Ecm1.5_2ppbar.dat");
TableSusHiAFuncTT_mrange30_330Ecm0_5_2ppbar.create_from_file("ScannerScore/data/TableSusHiAFuncTT_mrange30_330Ecm0.5_2ppbar.dat");
TableSusHiAFuncTT_mrange330_360Ecm0_5_2ppbar.create_from_file("ScannerScore/data/TableSusHiAFuncTT_mrange330_360Ecm0.5_2ppbar.dat");
TableSusHiAFuncTT_mrange360_450Ecm0_5_1ppbar.create_from_file("ScannerScore/data/TableSusHiAFuncTT_mrange360_450Ecm0.5_1ppbar.dat");
TableSusHiAFuncTT_mrange360_950Ecm1_1_5ppbar.create_from_file("ScannerScore/data/TableSusHiAFuncTT_mrange360_950Ecm1_1.5ppbar.dat");
TableSusHiAFuncTT_mrange360_1000Ecm1_5_2ppbar.create_from_file("ScannerScore/data/TableSusHiAFuncTT_mrange360_1000Ecm1.5_2ppbar.dat");
}
// SuperisoTables for B->X_s gamma to be available for User
TableData TableSuperisoBsgammaType1;
TableData TableSuperisoBsgammaType2;
TableData TableSuperisoBsgammaType3;
TableData TableSuperisoBsgammaType4;
// SushiTables to be available for User
//// CP even Higgs
//PP collider
TableData TableSusHiFuncBB_mrange30_330Ecm7_14pp;
TableData TableSusHiFuncBB_mrange330_360Ecm7_14pp;
TableData TableSusHiFuncBB_mrange360_1000Ecm7_14pp;
TableData TableSusHiFuncTB_mrange30_330Ecm7_14pp;
TableData TableSusHiFuncTB_mrange330_360Ecm7_14pp;
TableData TableSusHiFuncTB_mrange360_1000Ecm7_14pp;
TableData TableSusHiFuncTT_mrange30_330Ecm7_14pp;
TableData TableSusHiFuncTT_mrange330_360Ecm7_14pp;
TableData TableSusHiFuncTT_mrange360_1000Ecm7_14pp;
//PPbar collider
TableData TableSusHiFuncBB_mrange30_330Ecm0_5_2ppbar;
TableData TableSusHiFuncBB_mrange330_360Ecm0_5_2ppbar;
TableData TableSusHiFuncBB_mrange360_450Ecm0_5_1ppbar;
TableData TableSusHiFuncBB_mrange360_950Ecm1_1_5ppbar;
TableData TableSusHiFuncBB_mrange360_1000Ecm1_5_2ppbar;
TableData TableSusHiFuncTB_mrange30_330Ecm0_5_2ppbar;
TableData TableSusHiFuncTB_mrange330_360Ecm0_5_2ppbar;
TableData TableSusHiFuncTB_mrange360_450Ecm0_5_1ppbar;
TableData TableSusHiFuncTB_mrange360_950Ecm1_1_5ppbar;
TableData TableSusHiFuncTB_mrange360_1000Ecm1_5_2ppbar;
TableData TableSusHiFuncTT_mrange30_330Ecm0_5_2ppbar;
TableData TableSusHiFuncTT_mrange330_360Ecm0_5_2ppbar;
TableData TableSusHiFuncTT_mrange360_450Ecm0_5_1ppbar;
TableData TableSusHiFuncTT_mrange360_950Ecm1_1_5ppbar;
TableData TableSusHiFuncTT_mrange360_1000Ecm1_5_2ppbar;
//// CP odd Higgs
//PP collider
TableData TableSusHiAFuncBB_mrange30_330Ecm7_14pp;
TableData TableSusHiAFuncBB_mrange330_360Ecm7_14pp;
TableData TableSusHiAFuncBB_mrange360_1000Ecm7_14pp;
TableData TableSusHiAFuncTB_mrange30_330Ecm7_14pp;
TableData TableSusHiAFuncTB_mrange330_360Ecm7_14pp;
TableData TableSusHiAFuncTB_mrange360_1000Ecm7_14pp;
TableData TableSusHiAFuncTT_mrange30_330Ecm7_14pp;
TableData TableSusHiAFuncTT_mrange330_360Ecm7_14pp;
TableData TableSusHiAFuncTT_mrange360_1000Ecm7_14pp;
//PPbar collider
TableData TableSusHiAFuncBB_mrange30_330Ecm0_5_2ppbar;
TableData TableSusHiAFuncBB_mrange330_360Ecm0_5_2ppbar;
TableData TableSusHiAFuncBB_mrange360_450Ecm0_5_1ppbar;
TableData TableSusHiAFuncBB_mrange360_950Ecm1_1_5ppbar;
TableData TableSusHiAFuncBB_mrange360_1000Ecm1_5_2ppbar;
TableData TableSusHiAFuncTB_mrange30_330Ecm0_5_2ppbar;
TableData TableSusHiAFuncTB_mrange330_360Ecm0_5_2ppbar;
TableData TableSusHiAFuncTB_mrange360_450Ecm0_5_1ppbar;
TableData TableSusHiAFuncTB_mrange360_950Ecm1_1_5ppbar;
TableData TableSusHiAFuncTB_mrange360_1000Ecm1_5_2ppbar;
TableData TableSusHiAFuncTT_mrange30_330Ecm0_5_2ppbar;
TableData TableSusHiAFuncTT_mrange330_360Ecm0_5_2ppbar;
TableData TableSusHiAFuncTT_mrange360_450Ecm0_5_1ppbar;
TableData TableSusHiAFuncTT_mrange360_950Ecm1_1_5ppbar;
TableData TableSusHiAFuncTT_mrange360_1000Ecm1_5_2ppbar;
double InternalTableSusHiPP(double Ecm, double mHparticle, double alpha,double tanbeta,int Hparticle,int Type2HDM){
//Error cases
if(Ecm>14000 || Ecm<7000){
std::cerr<< "Error in double InternalTableSusHiPP(double Ecm, double mHparticle, double alpha,double tanbeta,int Hparticle,int Type2HDM): Tables for Ecm = "<<Ecm<<" not available. Ecm must be in [7000:14000] GeV"<<endl;
exit(EXIT_FAILURE);
}
double FuncTT,FuncTB,FuncBB;
vector<double> Point(2);
Point[0]=mHparticle;
Point[1]=Ecm;
if(Hparticle==1){
if(mHparticle>=30 && mHparticle<330){
FuncTT=TableSusHiAFuncTT_mrange30_330Ecm7_14pp(Point);
FuncTB=TableSusHiAFuncTB_mrange30_330Ecm7_14pp(Point);
FuncBB=TableSusHiAFuncBB_mrange30_330Ecm7_14pp(Point);
}
else if(mHparticle>=330 && mHparticle<360){
FuncTT=TableSusHiAFuncTT_mrange330_360Ecm7_14pp(Point);
FuncTB=TableSusHiAFuncTB_mrange330_360Ecm7_14pp(Point);
FuncBB=TableSusHiAFuncBB_mrange330_360Ecm7_14pp(Point);
}
else if(mHparticle>=360 && mHparticle<=1000){
FuncTT=TableSusHiAFuncTT_mrange360_1000Ecm7_14pp(Point);
FuncTB=TableSusHiAFuncTB_mrange360_1000Ecm7_14pp(Point);
FuncBB=TableSusHiAFuncBB_mrange360_1000Ecm7_14pp(Point);
}
else{
std::cerr<< "Error in double InternalTableSusHiPP(double Ecm, double mHparticle, double alpha,double tanbeta,int Hparticle,int Type2HDM): Tables for mHparticle = "<<mHparticle<<" not available. Allowed range is [30:1000] GeV."<<endl;
exit(EXIT_FAILURE);
}
}
else{
if(mHparticle>=30 && mHparticle<330){
FuncTT=TableSusHiFuncTT_mrange30_330Ecm7_14pp(Point);
FuncTB=TableSusHiFuncTB_mrange30_330Ecm7_14pp(Point);
FuncBB=TableSusHiFuncBB_mrange30_330Ecm7_14pp(Point);
}
else if(mHparticle>=330 && mHparticle<360){
FuncTT=TableSusHiFuncTT_mrange330_360Ecm7_14pp(Point);
FuncTB=TableSusHiFuncTB_mrange330_360Ecm7_14pp(Point);
FuncBB=TableSusHiFuncBB_mrange330_360Ecm7_14pp(Point);
}
else if(mHparticle>=360 && mHparticle<=1000){
FuncTT=TableSusHiFuncTT_mrange360_1000Ecm7_14pp(Point);
FuncTB=TableSusHiFuncTB_mrange360_1000Ecm7_14pp(Point);
FuncBB=TableSusHiFuncBB_mrange360_1000Ecm7_14pp(Point);
}
else{
std::cerr<< "Error in double InternalTableSusHiPP(double Ecm, double mHparticle, double alpha,double tanbeta,int Hparticle,int Type2HDM): Tables for mHparticle = "<<mHparticle<<" not available. Allowed range is [30:1000] GeV."<<endl;
exit(EXIT_FAILURE);
}
}
double gT,gB;
double cosbeta=1/sqrt(1+tanbeta*tanbeta);
double sinbeta=tanbeta*cosbeta;
if(Type2HDM==1||Type2HDM==3){
if(Hparticle==0){
gT=cos(alpha)/sinbeta;
gB=gT;
}
else if(Hparticle==1){
gT=1./tanbeta;
gB=-gT;
}
else if(Hparticle==2){
gT=sin(alpha)/sinbeta;
gB=gT;
}
else{
std::cerr<< "Error in double InternalTableSusHiPP(double Ecm, double mHparticle, double alpha,double tanbeta,int Hparticle,int Type2HDM): Bad Hparticle = "<<Hparticle<<". Allowed values are 0,1,2 for h, A or H."<<endl;
exit(EXIT_FAILURE);
}
}
else if(Type2HDM==2||Type2HDM==4){
if(Hparticle==0){
gT=cos(alpha)/sinbeta;
gB=-sin(alpha)/cosbeta;
}
else if(Hparticle==1){
gT=1./tanbeta;
gB=tanbeta;
}
else if(Hparticle==2){
gT=sin(alpha)/sinbeta;
gB=cos(alpha)/cosbeta;
}
else{
std::cerr<< "Error in double InternalTableSusHiPP(double Ecm, double mHparticle, double alpha,double tanbeta,int Hparticle,int Type2HDM): Bad Hparticle = "<<Hparticle<<". Allowed values are 0,1,2 for h, A or H."<<endl;
exit(EXIT_FAILURE);
}
}
else{
std::cerr<< "Error in double InternalTableSusHiPP(double Ecm, double mHparticle, double alpha,double tanbeta,int Hparticle,int Type2HDM): Bad Type2HDM = "<<Type2HDM<<". Allowed values are 1,2,3,4."<<endl;
exit(EXIT_FAILURE);
}
return gT*gT*FuncTT+gT*gB*FuncTB+gB*gB*FuncBB;
}
double InternalTableSusHiPPbar(double Ecm, double mHparticle, double alpha,double tanbeta,int Hparticle,int Type2HDM){
//Error cases
if(Ecm>2000 || Ecm<500){
std::cerr<< "Error in double InternalTableSusHiPPbar(double Ecm, double mHparticle, double alpha,double tanbeta,int Hparticle,int Type2HDM): Tables for Ecm = "<<Ecm<<" not available. Ecm must be in [500:2000] GeV"<<endl;
exit(EXIT_FAILURE);
}
double FuncTT,FuncTB,FuncBB;
vector<double> Point(2);
Point[0]=mHparticle;
Point[1]=Ecm;
if(Hparticle==1){
if(mHparticle>=30 && mHparticle<330){
FuncTT=TableSusHiAFuncTT_mrange30_330Ecm0_5_2ppbar(Point);
FuncTB=TableSusHiAFuncTB_mrange30_330Ecm0_5_2ppbar(Point);
FuncBB=TableSusHiAFuncBB_mrange30_330Ecm0_5_2ppbar(Point);
}
else if(mHparticle>=330 && mHparticle<360){
FuncTT=TableSusHiAFuncTT_mrange330_360Ecm0_5_2ppbar(Point);
FuncTB=TableSusHiAFuncTB_mrange330_360Ecm0_5_2ppbar(Point);
FuncBB=TableSusHiAFuncBB_mrange330_360Ecm0_5_2ppbar(Point);
}
else if(mHparticle>=360 && mHparticle<=1000){
if(Ecm<1000 && Ecm>=500){
if(mHparticle<=450){
FuncTT=TableSusHiAFuncTT_mrange360_450Ecm0_5_1ppbar(Point);
FuncTB=TableSusHiAFuncTB_mrange360_450Ecm0_5_1ppbar(Point);
FuncBB=TableSusHiAFuncBB_mrange360_450Ecm0_5_1ppbar(Point);
}
else
return 0;
}
else if(Ecm<1500 && Ecm>=1000){
if(mHparticle<=950){
FuncTT=TableSusHiAFuncTT_mrange360_950Ecm1_1_5ppbar(Point);
FuncTB=TableSusHiAFuncTB_mrange360_950Ecm1_1_5ppbar(Point);
FuncBB=TableSusHiAFuncBB_mrange360_950Ecm1_1_5ppbar(Point);
}
else
return 0;
}
else if(Ecm<=2000 && Ecm>=1500){
FuncTT=TableSusHiAFuncTT_mrange360_1000Ecm1_5_2ppbar(Point);
FuncTB=TableSusHiAFuncTB_mrange360_1000Ecm1_5_2ppbar(Point);
FuncBB=TableSusHiAFuncBB_mrange360_1000Ecm1_5_2ppbar(Point);
}
}
else{
std::cerr<< "Error in double InternalTableSusHiPPbar(double Ecm, double mHparticle, double alpha,double tanbeta,int Hparticle,int Type2HDM): Tables for mHparticle = "<<mHparticle<<" not available. Allowed range is [30:1000] GeV."<<endl;
exit(EXIT_FAILURE);
}
}
else{
if(mHparticle>=30 && mHparticle<330){
FuncTT=TableSusHiFuncTT_mrange30_330Ecm0_5_2ppbar(Point);
FuncTB=TableSusHiFuncTB_mrange30_330Ecm0_5_2ppbar(Point);
FuncBB=TableSusHiFuncBB_mrange30_330Ecm0_5_2ppbar(Point);
}
else if(mHparticle>=330 && mHparticle<360){
FuncTT=TableSusHiFuncTT_mrange330_360Ecm0_5_2ppbar(Point);
FuncTB=TableSusHiFuncTB_mrange330_360Ecm0_5_2ppbar(Point);
FuncBB=TableSusHiFuncBB_mrange330_360Ecm0_5_2ppbar(Point);
}
else if(mHparticle>=360 && mHparticle<=1000){
if(Ecm<1000 && Ecm>=500){
if(mHparticle<=450){
FuncTT=TableSusHiFuncTT_mrange360_450Ecm0_5_1ppbar(Point);
FuncTB=TableSusHiFuncTB_mrange360_450Ecm0_5_1ppbar(Point);
FuncBB=TableSusHiFuncBB_mrange360_450Ecm0_5_1ppbar(Point);
}
else
return 0;
}
else if(Ecm<1500 && Ecm>=1000){
if(mHparticle<=950){
FuncTT=TableSusHiFuncTT_mrange360_950Ecm1_1_5ppbar(Point);
FuncTB=TableSusHiFuncTB_mrange360_950Ecm1_1_5ppbar(Point);
FuncBB=TableSusHiFuncBB_mrange360_950Ecm1_1_5ppbar(Point);
}
else
return 0;
}
else if(Ecm<=2000 && Ecm>=1500){
FuncTT=TableSusHiFuncTT_mrange360_1000Ecm1_5_2ppbar(Point);
FuncTB=TableSusHiFuncTB_mrange360_1000Ecm1_5_2ppbar(Point);
FuncBB=TableSusHiFuncBB_mrange360_1000Ecm1_5_2ppbar(Point);
}
}
else{
std::cerr<< "Error in double InternalTableSusHiPPbar(double Ecm, double mHparticle, double alpha,double tanbeta,int Hparticle,int Type2HDM): Tables for mHparticle = "<<mHparticle<<" not available. Allowed range is [30:1000] GeV."<<endl;
exit(EXIT_FAILURE);
}
}
double gT,gB;
double cosbeta=1/sqrt(1+tanbeta*tanbeta);
double sinbeta=tanbeta*cosbeta;
if(Type2HDM==1||Type2HDM==3){
if(Hparticle==0){
gT=cos(alpha)/sinbeta;
gB=gT;
}
else if(Hparticle==1){
gT=1./tanbeta;
gB=-gT;
}
else if(Hparticle==2){
gT=sin(alpha)/sinbeta;
gB=gT;
}
else{
std::cerr<< "Error in double InternalTableSusHiPPbar(double Ecm, double mHparticle, double alpha,double tanbeta,int Hparticle,int Type2HDM): Bad Hparticle = "<<Hparticle<<". Allowed values are 0,1,2 for h, A or H."<<endl;
exit(EXIT_FAILURE);
}
}
else if(Type2HDM==2||Type2HDM==4){
if(Hparticle==0){
gT=cos(alpha)/sinbeta;
gB=-sin(alpha)/cosbeta;
}
else if(Hparticle==1){
gT=1./tanbeta;
gB=tanbeta;
}
else if(Hparticle==2){
gT=sin(alpha)/sinbeta;
gB=cos(alpha)/cosbeta;
}
else{
std::cerr<< "Error in double InternalTableSusHiPPbar(double Ecm, double mHparticle, double alpha,double tanbeta,int Hparticle,int Type2HDM): Bad Hparticle = "<<Hparticle<<". Allowed values are 0,1,2 for h, A or H."<<endl;
exit(EXIT_FAILURE);
}
}
else{
std::cerr<< "Error in double InternalTableSusHiPPbar(double Ecm, double mHparticle, double alpha,double tanbeta,int Hparticle,int Type2HDM): Bad Type2HDM = "<<Type2HDM<<". Allowed values are 1,2,3,4."<<endl;
exit(EXIT_FAILURE);
}
return gT*gT*FuncTT+gT*gB*FuncTB+gB*gB*FuncBB;
}
///////////////////////////////////////////////////////
///// CODE USED WHEN DEBUGGING IN ScannerSUser.cpp using function above
/* vector<double> ls(5,0),ls2(5,0),ls3(5,0);
CalcLs(ls,mHlight,mHheavy,mA,mHcharged,alpha,beta,L[7]);
//CalcLs(ls2,mHlight,mHheavy,mA,mHcharged,-alpha,beta,L[7]);
//CalcLs(ls3,mHlight,mHheavy,mA,mHcharged,alpha-Pi/2,beta,L[7]);
double delta=0;
for(int i=0;i<4;++i){
delta+=abs(ls[i]-L[3+i])/abs(ls[i]);
}
delta+=abs(ls[4]-L[2])/abs(ls[4]);
if(delta>1e-5){
std::clog<<"danger! delta="<<delta<<endl;
std::clog<<"alpha= "<< alpha<<endl;
std::clog<<"beta= "<<beta<<endl;
std::clog<<"mHheavy="<<mHheavy<<" M[0]="<<Mass[0]<<endl;
std::clog<<"mHlight="<<mHlight<<" M[1]="<<Mass[1]<<endl;
std::clog<<"mA="<<mA<<" M[2]="<<Mass[2]<<endl;
std::clog<<"mHcharged="<<mHcharged<<" M[3]="<<Mass[3]<<endl;
std::clog<<"lambda1= "<<ls[0]<<" L[3]="<<L[3]<<endl;
std::clog<<"lambda2= "<<ls[1]<<" L[4]="<<L[4]<<endl;
std::clog<<"lambda3= "<<ls[2]<<" L[5]="<<L[5]<<endl;
std::clog<<"lambda4= "<<ls[3]<<" L[6]="<<L[6]<<endl;
std::clog<<"lambda5= "<<ls[4]<<" L[2]="<<L[2]<<endl;
std::clog<<"L[0] = "<<L[0]<<endl;
std::clog<<"L[1] = "<<L[1]<<endl;
std::clog<<"L[7] = "<<L[7]<<endl;
std::clog<<"sin(2beta)="<<sin(2*beta)<<endl;
}*/

File Metadata

Mime Type
text/x-c
Expires
Sat, May 3, 5:50 AM (5 h, 45 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
4982830
Default Alt Text
ScannerSTwoHDM.cpp (41 KB)

Event Timeline