#include #include "TauSpinner/nonSM.h" #include "TauSpinner/EWtables.h" using std::cout; using std::endl; namespace TauSpinner { /***** GLOBAL VARIABLES *****/ double (*nonSM_bornZ)(int, double, double, int, int, int) = default_nonSM_born; double (*nonSM_bornH)(int, double, double, int, int, int) = default_nonSM_bornH; extern int nonSM2; extern int nonSMN; extern double WTnonSM; extern bool IfHiggs; /********************************/ double nonSM_born(int ID, double S, double cost, int H1, int H2, int key) { if(IfHiggs) return nonSM_bornH(ID,S,cost,H1,H2,key); else return nonSM_bornZ(ID,S,cost,H1,H2,key); } double default_nonSM_born(int ID, double S, double cost, int H1, int H2, int key) { if (ID < 0) { ID = -ID; cost = -cost; } if (ID == 3 || ID == 5) { ID = 1; } else if (ID == 4) { ID = 2; } if (ID >= 3 ) { cout << "WARNING: default_nonSM_born: unexpected ID continue debugging: " << ID << endl; } // WARNING: code below compiles/links but was never tested fir numerical // results. Comments in polish are of the work plan if (initEWff(ID,S,cost,key) == 1){ // initEWff check if initialization // init() was executed // and only if ID,S,cost changed // interpolate what bornew needs. // chyba juz wiem co ze zmiennymi // smiecoiwymi sigbornswdelt, // lokalnie inicjalizowanymi jak: // AMZi GAMMZi, SWeff, DeltSQ // DeltV, Gmu, alfinv // ktore przynajmniej po czesci sa pod // innymi nazwami i z (prawie) takimi // samymi wartosciami. // If no intialization for bornew then // exit(-1) and program stop. int Bmode=1; // locally defined const., to change user may pointer-activate his own nonSM_born() int keyGSW=1; // locally defined const, see T_BORNEW_ header, note that keGSW 1/2 is distinguished only by init // for comments and meaning of these two parameters // at present used for some specialized test plots. double H1d = H1; double H2d = H2; int zero = 0; if(key!=0){ //cout<<" key!0 " << H1<<" " << H2 << " " << t_bornew_(&Bmode, &keyGSW, &S, &cost, &H1d , &H2d) < 0) initwk_(&ide,&idf,&svar); else { int mide=-ide; int midf=-idf; initwk_(&mide,&midf,&svar); } } int zero = 0; double one = 1.0; double mone = -1.0; double ret = 0.0; if(nonSM2==0) { ret = t_born_(&zero,&svar,&costhe, &one, &one) /(t_born_(&zero,&svar,&costhe, &one, &one) +t_born_(&zero,&svar,&costhe,&mone,&mone)); } else if(nonSM2==1) { ret = nonSM_born(ide,svar,costhe, 1, 1, nonSM2) /(nonSM_born(ide,svar,costhe, 1, 1, nonSM2) +nonSM_born(ide,svar,costhe,-1,-1, nonSM2)); // test of user prepared born cross section can be prepared here. // convention between t_born and nonSM_born in choice of flavours // sign of costhe helicity signs etc have to be performed using SM version // of nonSM_born. Matching (up to may be overall s-dependent factor) between // t_born and nonSM_born must be achieved, see Section 4 for details // on technical tests. DEBUG( double sm= t_born_(&zero,&svar,&costhe, &one, &one) /(t_born_(&zero,&svar,&costhe, &one, &one) +t_born_(&zero,&svar,&costhe,&mone,&mone)); double nsm= nonSM_born(ide,svar,costhe, 1, 1, nonSM2) /(nonSM_born(ide,svar,costhe, 1, 1, nonSM2) +nonSM_born(ide,svar,costhe,-1,-1, nonSM2)); double smn= nonSM_born(ide,svar,costhe, 1, 1, 0 ) /(nonSM_born(ide,svar,costhe, 1, 1, 0 ) +nonSM_born(ide,svar,costhe,-1,-1, 0 )); cout<<"test of nonSM Born nonsm2="<