static numout * colliderProduction(char * name1,char *name2) { char libname[100], process[100], lName1[20], lName2[20]; numout *cc; int i,first; pname2lib(name1,lName1); pname2lib(name2,lName2); if(strcmp(lName1,lName2)>0)sprintf(libname,"PP_%s%s",lName1,lName2); else sprintf(libname,"PP_%s%s",lName2,lName1); sprintf(process,"proton,proton->%s,%s{",name1,name2); for(i=0,first=1;i<nModelParticles;i++) { switch(abs(ModelPrtcls[i].NPDG)) { case 1: case 2: case 3: case 4: case 5: case 81: case 83: if(!first) strcat(process,","); else first=0; sprintf(process+strlen(process),"%s,%s", ModelPrtcls[i].name,ModelPrtcls[i].aname); break; case 21: if(!first) strcat(process,",");else first=0; sprintf(process+strlen(process),"%s", ModelPrtcls[i].name); } } cc=getMEcode(0,ForceUG,process,NULL,"",libname); return cc; }
double plazmaWidth(char *process,double T) { char libName[40]; plazmaWidth_T=T; process2Lib(process,libName); process2Mass(process,plazmaWidth_m); plazmaWidth_cc=getMEcode(0,ForceUG,process,NULL,NULL,libName); return simpson(plazmaWidth_integrand,0., 5*T,1.E-3)/(4*M_PI*M_PI*plazmaWidth_m[1]*plazmaWidth_m[1]*bessk2(plazmaWidth_m[1]/T)) /3.8937966E8; }
static int new_code(int k1,int k2) { char lib[40]; char process[40]; char lib1[12],lib2[12]; numout*cc; pname2lib(inP[k1],lib1); pname2lib(inP[k2],lib2); sprintf(lib,"omg_%s%s",lib1,lib2); sprintf(process,"%s,%s->2*x",inP[k1],inP[k2]); cc=getMEcode(0,ForceUG,process,NULL,txtListOddParticles(),lib); if(cc) { (*cc->interface->twidth)=1; code22[k1*NC+k2]=cc; } else inC[k1*NC+k2]=0; return 0; }
int vPolar( int out1,int out2,int out3, double*left,double*right,double*lng) { double pvect[20],pcm1,pcm2,ms,md,chY,shY; int i,err_code; int iW,ie,in; double m[5]; int code[5]; double massMin=-1; int oId; char n1[10],n2[10],n3[10]; numout * cc; char *Wp=NULL,*el=NULL,*Ne=NULL,*o1=NULL,*O1=NULL; double r[3]; double GG=sqrt(4*M_PI*parton_alpha(2*Mcdm)); for(i=0;i<nModelParticles;i++) { if(ModelPrtcls[i].NPDG== out1) { Wp=ModelPrtcls[i].name; sprintf(n1,"p%d",i+1);} if(ModelPrtcls[i].NPDG==-out1) { Wp=ModelPrtcls[i].aname;sprintf(n1,"m%d",i+1);} if(ModelPrtcls[i].NPDG== out2) { el=ModelPrtcls[i].name; sprintf(n2,"p%d",i+1);} if(ModelPrtcls[i].NPDG==-out2) { el=ModelPrtcls[i].aname;sprintf(n2,"m%d",i+1);} if(ModelPrtcls[i].NPDG== out3) { Ne=ModelPrtcls[i].name;sprintf(n3,"p%d",i+1);} if(ModelPrtcls[i].NPDG==-out3) { Ne=ModelPrtcls[i].aname; sprintf(n3,"m%d",i+1);} if(ModelPrtcls[i].name[0]=='~') { double mass=fabs(findValW(ModelPrtcls[i].mass)); if(mass<massMin || massMin<0) { o1=ModelPrtcls[i].name; O1=ModelPrtcls[i].aname; massMin=mass; oId=i+1; } } } if(!o1 || !O1 || !Wp || !el || !Ne) return 1; { char lib[40], process[30], cond[20]; sprintf(lib,"p%d_Polar_%s%s%s",oId,n1,n2,n3); sprintf(process,"%s,%s->%s,%s,%s",o1,O1,Wp,el,Ne); sprintf(cond,"%s!=2",Wp); cc=getMEcode(0,1,process,cond,NULL,lib); if(!cc) { printf("can not generate\n");return 2;} } for(i=1;i<=cc->interface->nvar;i++) if(cc->link[i]) cc->interface->va[i]=*(cc->link[i]); if( cc->interface->calcFunc()>0 ) { return -1;} for(i=0;i<5;i++) cc->interface->pinf(1,i+1,m+i,code+i); for(i=0;i<20;i++) pvect[i]=0; pvect[0]=m[0]; pvect[4]=m[1]; iW=ie=in=-1; for(i=2;i<5;i++) { if(code[i]==out1) iW=i; if(code[i]==out2) ie=i; if(code[i]==out3) in=i; } if(iW<0 || ie <0 || in<0) return 1; if(m[0]+m[1]<=2*m[iW]) { printf("Mcdm too low\n"); return 3;} pcm1=sqrt((m[0]+m[1])*(m[0]+m[1]) - 4*m[iW]*m[iW])/2; ms=m[ie]+m[in]; md=m[ie]-m[in]; pcm2=sqrt((m[iW]*m[iW] - ms*ms)*(m[iW]*m[iW]-md*md))/(2*m[iW]); for(i=0;i<3;i++) { double csfi=i-1; pvect[4*iW]= sqrt(m[iW]*m[iW]+pcm1*pcm1); pvect[4*iW+3] = -pcm1; pvect[4*ie]=sqrt(m[ie]*m[ie]+pcm2*pcm2); pvect[4*ie+3]=pcm2*csfi; pvect[4*ie+2]=pcm2*sqrt(1-csfi*csfi); pvect[4*in]=sqrt(m[in]*m[in]+pcm2*pcm2); pvect[4*in+3]=-pcm2*csfi; pvect[4*in+2]=-pcm2*sqrt(1-csfi*csfi); chY=sqrt(1+pcm1*pcm1/m[iW]/m[iW]); shY=sqrt(pcm1*pcm1/m[iW]/m[iW]); { double p0=pvect[4*ie], p3=pvect[4*ie+3]; pvect[4*ie]= chY*p0 + shY*p3; pvect[4*ie+3]=shY*p0 + chY*p3; p0=pvect[4*in]; p3=pvect[4*in+3]; pvect[4*in]= chY*p0 + shY*p3; pvect[4*in+3]=shY*p0 + chY*p3; } r[i]=(cc->interface->sqme)(1,GG,pvect,&err_code); } { double s; r[2]/=4; r[0]/=4; r[1]=(r[1]-r[0]-r[2])/2; s=r[0]+r[1]+r[2]; s=r[0]+r[1]+r[2]; if(left) *left=r[2]/s; if(right) *right=r[0]/s; if(lng) *lng=r[1]/s; } return 0; }
static double calcSpectrum0(char *name1,char*name2, int forSun, double *Spectranu, double *SpectraNu) { int i,k; double vcsSum=0; int ntot,err; double * v_cs; char name1L[10],name2L[10], lib[20],process[400]; numout * libPtr; for(i=0;i<NZ;i++) Spectranu[i]=SpectraNu[i]=0; pname2lib(name1,name1L); pname2lib(name2,name2L); sprintf(lib,"omg_%s%s",name1L,name2L); sprintf(process,"%s,%s->AllEven,1*x{%s",name1,name2,EvenParticles()); // Warning!! in should be done in the same manner as annihilation libraries for Omega libPtr=getMEcode(0,ForceUG,process,NULL,NULL,lib); if(!libPtr) return 0; passParameters(libPtr); procInfo1(libPtr,&ntot,NULL,NULL); v_cs=malloc(sizeof(double)*ntot); (*libPtr->interface->twidth)=0; for(k=0;k<ntot;k++) { double m[4]; char *N[4]; procInfo2(libPtr,k+1,N,m); if((m[2]+m[3])/(m[0]+m[1])<1) { #ifdef V0 v_cs[k]=V0*cs22(libPtr,k+1,V0*m[0]/2,-1.,1.,&err); #else v_cs[k]= vcs22(libPtr,k+1,&err); #endif if(v_cs[k]<0) v_cs[k]=0; vcsSum+=v_cs[k]; } else v_cs[k]=-1; } for(k=0;k<ntot ;k++) if(v_cs[k]>=0) { char * N[4]; double m[4]; int l, charge3[2],spin2[2],cdim[2],pdg[2]; int PlusAok=0; procInfo2(libPtr,k+1,N,m); for(l=0;l<2;l++) pdg[l]=qNumbers(N[2+l],spin2+l,charge3+l,NULL); if(v_cs[k]>1.E-3*vcsSum) { double tab2[NZ]; #ifdef PRINT { char txt[100]; sprintf(txt,"%s,%s -> %s %s", N[0],N[1],N[2],N[3]); printf(" %-20.20s %.2E\n",txt,v_cs[k]*2.9979E-26); } #endif for(l=0;l<2;l++) switch(abs(pdg[l])) { case 12: case 14: case 16: if(pdg[l]>0) { basicNuSpectra(forSun,pdg[l],1,tab2); for(i=0;i<NZ;i++) Spectranu[i]+=tab2[i]*v_cs[k]/vcsSum; } else { basicNuSpectra(forSun,pdg[l],-1,tab2); for(i=0;i<NZ;i++) SpectraNu[i]+=tab2[i]*v_cs[k]/vcsSum; } break; default: basicNuSpectra(forSun,pdg[l],1,tab2); for(i=0;i<NZ;i++) Spectranu[i]+=0.5*tab2[i]*v_cs[k]/vcsSum; basicNuSpectra(forSun,pdg[l],-1,tab2); for(i=0;i<NZ;i++) SpectraNu[i]+=0.5*tab2[i]*v_cs[k]/vcsSum; } } } free(v_cs); return vcsSum*2.9979E-26; }