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; }
static int new_code(int k1,int k2) { char lib[40]; char process[40]; char lib1[12],lib2[12]; numout*cc; static char* excludeOut=NULL; if(excludeOut==NULL) { int size=100,len=1,i; excludeOut=(char*)malloc(size); excludeOut[0]=0; for(i=0;i<Nodd;i++) { if(size-len<15){size+=100; excludeOut=realloc(excludeOut,size);} sprintf(excludeOut+strlen(excludeOut),",%s",OddPrtcls[i].name); len+=strlen(OddPrtcls[i].name)+1; if(strcmp(OddPrtcls[i].name,OddPrtcls[i].aname)) { sprintf(excludeOut+strlen(excludeOut),",%s",OddPrtcls[i].aname); len+=strlen(OddPrtcls[i].aname)+1; } } } /* char PM; if(inNum[k1]>0) PM='P'; else PM='M'; sprintf(lib1,"%c%d",PM,abs(inNum[k1])); if(inNum[k2]>0) PM='P'; else PM='M'; sprintf(lib2,"%c%d",PM,abs(inNum[k2])); */ 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=newProcess_(1,1,process,NULL,excludeOut+1,lib,0); if(cc) { (*cc->interface->twidth)=1; code22[k1*NC+k2]=cc; } else inC[k1*NC+k2]=0; return 0; }
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; }
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; }