예제 #1
0
파일: cs22.c 프로젝트: innisfree/superpy
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;
}
예제 #2
0
파일: cs22.c 프로젝트: innisfree/superpy
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;    
}
예제 #3
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;
}   
예제 #4
0
파일: wPolar.c 프로젝트: Omer80/wimps
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;
}  
예제 #5
0
파일: neutrino.c 프로젝트: Omer80/wimps
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;
}