VM::GlobalNameValueTableWrapper::GlobalNameValueTableWrapper( NameValueTable* tab) : NameValueTableWrapper(tab) { VarNR arr(HphpArray::GetStaticEmptyArray()); #define X(s,v) \ tab->migrateSet(StringData::GetStaticString(#s), \ gvm_##s.asTypedValue()); \ gvm_##s.v; X(argc, setNull()); X(argv, setNull()); X(_SERVER, assignVal(arr)); X(_GET, assignVal(arr)); X(_POST, assignVal(arr)); X(_COOKIE, assignVal(arr)); X(_FILES, assignVal(arr)); X(_ENV, assignVal(arr)); X(_REQUEST, assignVal(arr)); X(_SESSION, assignVal(arr)); X(HTTP_RAW_POST_DATA, setNull()); X(http_response_header, setNull()); #undef X ThreadInfo::s_threadInfo->m_globals = g_variables = this; }
int readVarSpecial(char *fname, int nVar, char ** names) { int * rdOn; double val; char name[80]; int n,i; rdOn=malloc(sizeof(int)*nVar); for(i=0;i<nVar;i++)rdOn[i]=0; FILE * f=fopen(fname,"r"); if(f==NULL) return -1; for(n=1;;n++) { if(fscanf(f,"%s",name)!=1) { n=0; break;} if(name[0]=='#') { fscanf(f,"%*[^\n]"); continue;} if(fscanf(f,"%lf",&val)!=1) break; fscanf(f,"%*[^\n]"); { int err; for(i=0;i<nVar;i++) if(strcmp(names[i],name)==0) {rdOn[i]=1;break;} if(i==nVar) break; err=assignVal(name,val); if(err==1) break; } } fclose(f); for(i=0;i<nVar;i++) if(rdOn[i]==0) printf("Parameter '%s' keeps default value %E\n", names[i],findValW(names[i])); free(rdOn); return n; }
double vSigma(double T,double Beps ,int Fast) { double X=Mcdm/T; assignVal("Q",2*Mcdm); MassCut=Mcdm*(2-log(Beps)/X); return 3.8937966E8*aRate(X, 0 ,Fast,&vSigmaTCh,NULL); }
double darkOmega(double * Xf, int Fast, double Beps) { double Yt,Yi,Xt=25; double Z1=1.1; double Z2=10; int i; double Xf1; if(Xf)*Xf=Xt; assignVal("Q",2*M); if(Beps>=1) Beps=0.999; if(Z1<=1) Z1=1.1; fast_=Fast; Yt= darkOmega1(&Xt, Z1, (Z1-1)/5,Fast, Beps); if(Yt<0||FError) return -1; Xf1=Xt; for(i=0; ;i++) { double X2=vSigmaGrid.xtop*pow(XSTEP,i+1); double y; if(Yt>=Z2*Yeq(Xt)) break; if(Xt>X2*0.999999) continue; while(vSigmaGrid.pow<=i+1) { double X; if(vSigmaGrid.pow==vSigmaGrid.size) { vSigmaGrid.size+=10; vSigmaGrid.data=(double*)realloc(vSigmaGrid.data,sizeof(double)*vSigmaGrid.size); } X=vSigmaGrid.xtop*pow(XSTEP,vSigmaGrid.pow); MassCut=M*(2-log(Beps)/X); vSigmaGrid.data[vSigmaGrid.pow++]=aRate(X,0,Fast,NULL); if(FError) return -1; } y=log(Yt); odeint(&y,1 , Xt , X2 , 1.E-3, (X2-Xt)/2, &XderivLn); Yt=exp(y); Xt=X2; } if(Xf) *Xf=0.5*(Xf1+Xt); Yi=1/( (M/Xt)*sqrt(M_PI/45)*MPlank*aRate(Xt,1,Fast,NULL) ); if(!finite(Yi)||FError) return -1; return 2.742E8*M/(1/Yt + 1/Yi); /* 2.828-old 2.755-new,2.742 -newnew */ }
double darkOmega(double * Xf, int Fast, double Beps) { double Yt,Yi,Xt=25; double Z1=1.1; double Z2=10; int i; double Xf1; if(Xf)*Xf=Xt; assignVal("Q",2*Mcdm); if(Beps>=1) Beps=0.999; Beps_=Beps; Fast_=Fast; if(Z1<=1) Z1=1.1; Yt= darkOmega1(&Xt, Z1, (Z1-1)/5,Fast, Beps); if(Yt<0||FError) {return -1;} Xf1=Xt; for(i=0; ;i++) { double X2=vSigmaGrid.xtop*pow(XSTEP,i+1); double y; if(Yt>=Z2*Yeq(Xt)) break; if(Xt>X2*0.999999) continue; y=Yt; if(odeint(&y,1 , Xt , X2 , 1.E-3, (X2-Xt)/2, &XderivLn)){return -1;} Yt=y; Xt=X2; } if(Xf) *Xf=0.5*(Xf1+Xt); Yi=1/( (Mcdm/Xt)*sqrt(M_PI/45)*MPlank*aRate(Xt,1,Fast,NULL,NULL)); if(!finite(Yi)||FError) return -1; if(deltaY==0.) { dmAsymm=0; return 2.742E8*Mcdm/(1/Yt + 1/Yi); /* 2.828-old 2.755-new,2.742 -newnew */ } else { double a,f,z0,Y0; a=fabs(deltaY); f= (sqrt(Yt*Yt+a*a)-a)/ (sqrt(Yt*Yt+a*a)+a)*exp(-2*a/Yi); z0=sqrt(f)*2*a/(1-f); Y0=sqrt(z0*z0+a*a); dmAsymm=log((Y0+deltaY)/(Y0-deltaY)); return 2.742E8*Mcdm*Y0; } }
int sortOddParticles(char * lsp) { int i,err; if(!modelNum) { int i,k,L; struct utsname buff; L=strlen(WORK); modelDir=malloc(L+15); sprintf(modelDir,"%s/models",WORK); modelNum=1; calchepDir=malloc(strlen(WORK)+15);strcpy(calchepDir,WORK); for(i=L-1,k=2;i;i--) {char ch=calchepDir[i]; calchepDir[i]=0; if(ch=='/') k--; if(k==0) break;} strcat(calchepDir,"/CalcHEP_src"); uname(&buff); compDir=malloc(strlen(WORK)+strlen(buff.nodename)+25); strcpy(compDir,WORK); sprintf(compDir+strlen(compDir),"/_%s_%d_",buff.nodename,getpid()); libDir=malloc(L+15); sprintf(libDir,"%s/so_generated",WORK); } if(omegaCh) {free(omegaCh); omegaCh=NULL;} if(vSigmaTCh) {free(vSigmaTCh); vSigmaTCh=NULL;} if(vSigmaCh) {free(vSigmaCh); vSigmaCh=NULL; } err=testSubprocesses(); if(err) { strcpy(lsp,varNames[err]); return err; } /* if(Mcdm<0.1) { sprintf(lsp,"Mcdm(%s)<0.1",inP[LSP]); return -1; } */ if(sWidth>0) for(i=0;i< Nodd;i++) assignVal(OddPrtcls[i].width,sWidth*Mcdm); if(lsp) strcpy(lsp,inP[LSP]); return 0; }
int sortOddParticles(char * lsp) { int i,err; err=testSubprocesses(); if(err) { strcpy(lsp,mainChan->interface->varName[err]); return err; } if(M<0.1) { sprintf(lsp,"M(%s)<0.1",inP[LSP]); return -1; } if(sWidth>0) for(i=0;i< Nodd;i++) assignVal(OddPrtcls[i].width,sWidth*M); if(lsp) strcpy(lsp,inP[LSP]); return 0; }
double darkOmegaFO(double * Xf_, int Fast, double Beps) { double Yf,Yi; double Z1=2.5; double dZ1=0.05; double x; double Xf=25; if(Xf_) *Xf_=Xf; assignVal("Q",2*M); if(Beps>=1) Beps=0.999; Yf= darkOmega1(&Xf, Z1, dZ1,Fast, Beps); if(Yf<0||FError) return -1; x=Xf; Yi=1/( (M/x)*sqrt(M_PI/45)*MPlank*aRate(x, 1,Fast, NULL) ); if(!finite(Yi)||FError) return -1; if(Xf_) *Xf_=Xf; return 2.742E8*M/(1/Yf + 1/Yi); /* 2.828-old 2.755-new 2.742 next-new */ }
int readVar(char *fname) { double val; char name[80]; int n; FILE * f=fopen(fname,"r"); if(f==NULL) return -1; for(n=1;;n++) { if(fscanf(f,"%s",name)!=1) { n=0; break;} if(name[0]=='#') { fscanf(f,"%*[^\n]"); continue;} if(fscanf(f,"%lf",&val)!=1) break; fscanf(f,"%*[^\n]"); { int err=assignVal(name,val); if(err==1) break; } } fclose(f); return n; }
int HBblocks(char * fname) { FILE * f=fopen(fname,"w"); double tb,sb,cb,Q; if(!f) return 1; Q=findValW("Q"); fprintf(f,"Block Mass\n 25 %E # Higgs Mass\n\n",findValW("Mh")); slhaDecayPrint("h",f); slhaDecayPrint("t",f); slhaDecayPrint("~H+",f); // MbSM=findValW("Mb"); fprintf(f,"Block HiggsBoundsInputHiggsCouplingsBosons\n"); fprintf(f,"# Effective coupling normalised to SM one and squared\n"); fprintf(f,"# For (*) normalized on Sin(2*W)\n"); fprintf(f," %12.4E 3 25 24 24 # higgs-W-W \n", 1. ); fprintf(f," %12.4E 3 25 23 23 # higgs-Z-Z \n", 1. ); fprintf(f," %12.4E 3 25 25 23 # higgs-higgs-Z \n", 0. ); { assignVal("Q",pMass("h")); calcMainFunc(); fprintf(f," %12.4E 3 25 21 21 # higgs-gluon-gluon\n", 1. ); fprintf(f," %12.4E 3 25 22 22 # higgs-gamma-gamma\n", SQR(findValW("LAAh")/findValW("LAAhSM")) ); } fprintf(f,"Block HiggsBoundsInputHiggsCouplingsFermions\n"); fprintf(f,"# Effective coupling normalised to SM one and squared\n"); fprintf(f," %12.4E %12.4E 3 25 5 5 # higgs-b-b \n" ,1.,0.); fprintf(f," %12.4E %12.4E 3 25 6 6 # higgs-top-top \n",1.,0.); fprintf(f," %12.4E %12.4E 3 25 15 15 # higgs-tau-tau \n",1.,0.); assignValW("Q",Q); calcMainFunc(); fclose(f); return 0; }
int readVarSpecial(char *fname, int nVar, char ** names) { int * rdOn; double val; char name[80]; int n,i,k; FILE*f; rdOn=malloc(sizeof(int)*nVar); for(i=0;i<nVar;i++)rdOn[i]=0; f=fopen(fname,"r"); if(f==NULL) return -1; for(n=1;;n++) { if(fscanf(f,"%s",name)!=1) { n=0; break;} if(name[0]=='#') { fscanf(f,"%*[^\n]"); continue;} if(fscanf(f,"%lf",&val)!=1) break; fscanf(f,"%*[^\n]"); { int err; for(i=0;i<nVar;i++) if(strcmp(names[i],name)==0) {rdOn[i]=1;break;} if(i==nVar) break; err=assignVal(name,val); if(err==1) break; } } fclose(f); for(i=0,k=0;i<nVar;i++) if(rdOn[i]==0) { if(!k){printf("The following parapeters keep default values:\n"); k=1;} { printf("%8.8s=%.4E", names[i],findValW(names[i])); if(k==4) {printf("\n");k=1;}else k++; } } if(k!=1) printf("\n"); free(rdOn); return n; }
int HBblocks(char * fname) { FILE * f=fopen(fname,"a"); double tb,sb,cb,alpha,sa,ca,ta,samb,camb,dMb,MbHl,MbSM,MbH,MbH3,Q; if(!f) return 1; Q=findValW("Q"); if(slhaDecayExists(pNum("h")) <0) slhaDecayPrint("h", f); if(slhaDecayExists(pNum("H")) <0) slhaDecayPrint("H", f); if(slhaDecayExists(pNum("H3"))<0) slhaDecayPrint("H3",f); if(slhaDecayExists(pNum("t")) <0) slhaDecayPrint("t", f); if(slhaDecayExists(pNum("H+"))<0) slhaDecayPrint("H+",f); tb=findValW("tB"); sb=tb/sqrt(1+tb*tb); cb=1/sqrt(1+tb*tb); alpha=findValW("alpha"); sa=sin(alpha); ca=cos(alpha); ta=sa/ca; samb=sa*cb-ca*sb; camb=ca*cb+sa*sb; dMb=findValW("dMb"); MbSM=findValW("Mb"); MbH= MbSM/(1+dMb)*(1+dMb*ta/tb); MbH3=MbSM/(1+dMb)*(1-dMb/tb/tb); MbHl=MbSM/(1+dMb)*(1-dMb/ta/tb); fprintf(f,"Block HiggsBoundsInputHiggsCouplingsBosons\n"); fprintf(f,"# Effective coupling normalised to SM one and squared\n"); fprintf(f,"# For (*) normalized on Sin(2*W)\n"); fprintf(f," %12.4E 3 25 24 24 # higgs-W-W \n", SQR(samb) ); fprintf(f," %12.4E 3 25 23 23 # higgs-Z-Z \n", SQR(samb) ); fprintf(f," %12.4E 3 25 25 23 # higgs-higgs-Z \n", 0. ); { assignVal("Q",pMass("h")); calcMainFunc(); fprintf(f," %12.4E 3 25 21 21 # higgs-gluon-gluon\n", SQR(findValW("LGGh")/findValW("LGGSM")) ); fprintf(f," %12.4E 3 25 22 22 # higgs-gamma-gamma\n", SQR(findValW("LAAh")/findValW("LAASM")) ); } fprintf(f," %12.4E 3 35 24 24 # higgs-W-W \n", SQR(camb) ); fprintf(f," %12.4E 3 35 23 23 # higgs-Z-Z \n", SQR(camb) ); fprintf(f," %12.4E 3 35 25 23 # higgs-higgs-Z \n", 0. ); fprintf(f," %12.4E 3 35 35 23 # higgs-higgs-Z \n", 0. ); { assignVal("Q",pMass("H")); calcMainFunc(); fprintf(f," %12.4E 3 35 21 21 # higgs-gluon-gluon\n",SQR(findValW("LGGH")/findValW("LGGSM")) ); fprintf(f," %12.4E 3 35 22 22 # higgs-gamma-gamma\n",SQR(findValW("LAAH")/findValW("LAASM")) ); } fprintf(f," %12.4E 3 36 24 24 # higgs-W-W \n", 0. ); fprintf(f," %12.4E 3 36 23 23 # higgs-Z-Z \n", 0. ); { assignVal("Q",pMass("H3")); calcMainFunc(); fprintf(f," %12.4E 3 36 21 21 # higgs-gluon-gluon\n",SQR(findValW("LGGH3")/2/findValW("LGGSM")) ); fprintf(f," %12.4E 3 36 22 22 # higgs-gamma-gamma\n",SQR(findValW("LAAH3")/2/findValW("LAASM")) ); } fprintf(f," %12.4E 3 36 25 23 #*higgs-higgs-Z \n", SQR(camb) ); fprintf(f," %12.4E 3 36 35 23 #*higgs-higgs-Z \n", SQR(samb) ); fprintf(f," %12.4E 3 36 36 23 #* higgs-higgs-Z \n", 0. ); fprintf(f,"Block HiggsBoundsInputHiggsCouplingsFermions\n"); fprintf(f,"# Effective coupling normalised to SM one and squared\n"); fprintf(f," %12.4E %12.4E 3 25 5 5 # higgs-b-b \n" ,SQR((sa/cb)*(MbHl/MbSM)),0.); fprintf(f," %12.4E %12.4E 3 25 6 6 # higgs-top-top \n",SQR(ca/sb) ,0.); fprintf(f," %12.4E %12.4E 3 25 15 15 # higgs-tau-tau \n",SQR(sa/cb) ,0.); fprintf(f," %12.4E %12.4E 3 35 5 5 # higgs-b-b \n" ,SQR((ca/cb)*(MbH/MbSM)) ,0.); fprintf(f," %12.4E %12.4E 3 35 6 6 # higgs-top-top \n",SQR(sa/sb) ,0.); fprintf(f," %12.4E %12.4E 3 35 15 15 # higgs-tau-tau \n",SQR(ca/cb) ,0.); fprintf(f," %12.4E %12.4E 3 36 5 5 # higgs-b-b \n" ,0.,SQR(tb*(MbH3/MbSM))); fprintf(f," %12.4E %12.4E 3 36 6 6 # higgs-top-top \n",0.,SQR(1/tb) ); fprintf(f," %12.4E %12.4E 3 36 15 15 # higgs-tau-tau \n",0.,SQR(tb) ); assignValW("Q",Q); calcMainFunc(); fclose(f); return 0; }
int assignValW(char*name, double val) { if(assignVal(name,val)) { printf(" %s not found\n", name); return 1;} else return 0; }
void assignValW(char*name, double val) { if(assignVal(name,val)==1) printf(" %s not found\n", name); }
int assignval_(char * f_name, double * val, int len) { char buff[20]; fName2c(f_name,buff,len); return assignVal(buff, *val); }
static int testSubprocesses(void) { static int first=1; int err,k1,k2,i,j; double *Q; if(first) { first=0; for(i=0,NC=0;i<Nodd;i++,NC++) if(strcmp(OddPrtcls[i].name,OddPrtcls[i].aname))NC++; inP=(char**)malloc(NC*sizeof(char*)); inAP=(int*)malloc(NC*sizeof(int)); inG=(int*)malloc(NC*sizeof(int)); inDelta=(double*)malloc(NC*sizeof(double)); inG_=(double*)malloc(NC*sizeof(double)); inMassAddress=(double**)malloc(NC*sizeof(double*)); inMass=(double*)malloc(NC*sizeof(double)); inNum= (int*)malloc(NC*sizeof(int)); sort=(int*)malloc(NC*sizeof(int)); code22=(numout**)malloc(NC*NC*sizeof(numout*)); inC=(int*)malloc(NC*NC*sizeof(int)); for(i=0,j=0;i<Nodd;i++) { inP[j]=OddPrtcls[i].name; inNum[j]=OddPrtcls[i].NPDG; inG[j]=(OddPrtcls[i].spin2+1)*OddPrtcls[i].cdim; if(strcmp(OddPrtcls[i].name,OddPrtcls[i].aname)) { inAP[j]=j+1; j++; inP[j]=OddPrtcls[i].aname; inG[j]=inG[j-1]; inAP[j]=j-1; inNum[j]=-OddPrtcls[i].NPDG; } else inAP[j]=j; j++; } for(i=0;i<NC;i++) sort[i]=i; for(k1=0;k1<NC;k1++) for(k2=0;k2<NC;k2++) inC[k1*NC+k2]=-1; for(k1=0;k1<NC;k1++) for(k2=0;k2<NC;k2++) if(inC[k1*NC+k2]==-1) { int kk1=inAP[k1]; int kk2=inAP[k2]; inC[k1*NC+k2]=1; if(inC[k2*NC+k1]==-1) {inC[k2*NC+k1]=0; inC[k1*NC+k2]++;} if(inC[kk1*NC+kk2]==-1) {inC[kk1*NC+kk2]=0; inC[k1*NC+k2]++;} if(inC[kk2*NC+kk1]==-1) {inC[kk2*NC+kk1]=0; inC[k1*NC+k2]++;} } for(k1=0;k1<NC;k1++) for(k2=0;k2<NC;k2++) code22[k1*NC+k2]=NULL; mainChan=NULL; if(strcmp(OddPrtcls[0].name,OddPrtcls[0].aname)==0) { new_code(0,0); mainChan=code22[0*NC+0];} else { new_code(0,1); mainChan=code22[0*NC+1];} if(!mainChan){printf("Can not compile generate and load code for " "annihilation channel %s %s->2*x\n Program stops.\n", OddPrtcls[0].name,OddPrtcls[0].aname); exit(44);} for(i=0,j=0;i<Nodd;i++) { inMassAddress[j]=paramAddress(OddPrtcls[i].mass); if(!inMassAddress[j]) { printf(" Can not find mass %s among parameetrs\n",OddPrtcls[i].mass); exit(5); } if(strcmp(OddPrtcls[i].name,OddPrtcls[i].aname)) { j++; inMassAddress[j]=inMassAddress[j-1]; } j++; } } Q=NULL; for(i=1;i<=mainChan->interface->nvar;i++) { if(mainChan->link[i]) mainChan->interface->va[i]=*(mainChan->link[i]); if(strcmp(mainChan->interface->varName[i],"Q")==0) Q=mainChan->interface->va+i; } if(Q) *Q=100; err=mainChan->interface->calcFunc(); if(err>0) return err; M=fabs(*(inMassAddress[0])); for(i=0;i<NC;i++) { inMass[i]=fabs(*(inMassAddress[i])); if(M>inMass[i]) M=inMass[i]; } if(Q) { *Q=2*M; assignVal("Q",2*M); err=mainChan->interface->calcFunc(); if(err>0) return err; } for(i=0; i<NC-1;) { int i1=i+1; if(inMass[sort[i]] > inMass[sort[i1]]) { int c=sort[i]; sort[i]=sort[i1]; sort[i1]=c; if(i) i--; else i++; } else i++; } LSP=sort[0]; M=inMass[LSP]; for(i=0;i<NC;i++) { inDelta[i]= (inMass[i]-M)/M; inG_[i]=inG[i]*pow(1+inDelta[i],1.5); } for(k1=0;k1<NC;k1++) for(k2=0;k2<NC;k2++) if(code22[k1*NC+k2]) code22[k1*NC+k2]->init=0; return 0; }
static int testSubprocesses(void) { static int first=1; int err,k1,k2,i,j; double *Q; double *GG; if(first) { first=0; if(createTableOddPrtcls()) { printf("The model contains uncoupled odd patricles\n"); exit(10);} for(i=0,NC=0;i<Nodd;i++,NC++) if(strcmp(OddPrtcls[i].name,OddPrtcls[i].aname))NC++; inP=(char**)malloc(NC*sizeof(char*)); inAP=(int*)malloc(NC*sizeof(int)); inG=(int*)malloc(NC*sizeof(int)); inDelta=(double*)malloc(NC*sizeof(double)); inG_=(double*)malloc(NC*sizeof(double)); inMassAddress=(double**)malloc(NC*sizeof(double*)); inMass=(double*)malloc(NC*sizeof(double)); inNum= (int*)malloc(NC*sizeof(int)); sort=(int*)malloc(NC*sizeof(int)); code22=(numout**)malloc(NC*NC*sizeof(numout*)); inC=(int*)malloc(NC*NC*sizeof(int)); for(i=0,j=0;i<Nodd;i++) { inP[j]=OddPrtcls[i].name; inNum[j]=OddPrtcls[i].NPDG; inG[j]=(OddPrtcls[i].spin2+1)*OddPrtcls[i].cdim; if(strcmp(OddPrtcls[i].name,OddPrtcls[i].aname)) { inAP[j]=j+1; j++; inP[j]=OddPrtcls[i].aname; inG[j]=inG[j-1]; inAP[j]=j-1; inNum[j]=-OddPrtcls[i].NPDG; } else inAP[j]=j; j++; } for(i=0;i<NC;i++) sort[i]=i; for(k1=0;k1<NC;k1++) for(k2=0;k2<NC;k2++) inC[k1*NC+k2]=-1; for(k1=0;k1<NC;k1++) for(k2=0;k2<NC;k2++) if(inC[k1*NC+k2]==-1) { int kk1=inAP[k1]; int kk2=inAP[k2]; inC[k1*NC+k2]=1; if(inC[k2*NC+k1]==-1) {inC[k2*NC+k1]=0; inC[k1*NC+k2]++;} if(inC[kk1*NC+kk2]==-1) {inC[kk1*NC+kk2]=0; inC[k1*NC+k2]++;} if(inC[kk2*NC+kk1]==-1) {inC[kk2*NC+kk1]=0; inC[k1*NC+k2]++;} } for(k1=0;k1<NC;k1++) for(k2=0;k2<NC;k2++) code22[k1*NC+k2]=NULL; for(i=0,j=0;i<Nodd;i++) { inMassAddress[j]=varAddress(OddPrtcls[i].mass); if(!inMassAddress[j]) { if(strcmp(OddPrtcls[i].mass ,"0")==0) { printf("Error: odd particle '%s' has zero mass.\n",OddPrtcls[i].name); exit(5); } printf(" Model is not self-consistent:\n " " Mass identifier '%s' for particle '%s' is absent among parameetrs\n",OddPrtcls[i].mass, OddPrtcls[i].name); exit(5); } if(strcmp(OddPrtcls[i].name,OddPrtcls[i].aname)) { j++; inMassAddress[j]=inMassAddress[j-1]; } j++; } } for(Q=NULL,GG=NULL,i=0;i<nModelVars;i++) { if(strcmp(varNames[i],"Q")==0) Q=varValues+i; else if(strcmp(varNames[i],"GG")==0) GG=varValues+i; } if(Q) *Q=100; err=calcMainFunc(); if(err>0) return err; Mcdm=fabs(*(inMassAddress[0])); for(i=0;i<NC;i++) { inMass[i]=fabs(*(inMassAddress[i])); if(Mcdm>inMass[i]) Mcdm=inMass[i]; } if(Q) { *Q=2*Mcdm; assignVal("Q",2*Mcdm); err=calcMainFunc(); if(err>0) return err; } if(GG) *GG=parton_alpha(2*Mcdm/3.); for(i=0; i<NC-1;) { int i1=i+1; if(inMass[sort[i]] > inMass[sort[i1]]) { int c=sort[i]; sort[i]=sort[i1]; sort[i1]=c; if(i) i--; else i++; } else i++; } LSP=sort[0]; Mcdm=inMass[LSP]; for(i=0;i<NC;i++) { inDelta[i]= (inMass[i]-Mcdm)/Mcdm; inG_[i]=inG[i]*pow(1+inDelta[i],1.5); } for(k1=0;k1<NC;k1++) for(k2=0;k2<NC;k2++) if(code22[k1*NC+k2]) code22[k1*NC+k2]->init=0; cleanDecayTable(); return 0; }