示例#1
0
static void  emitdenoms(void)
{int   j; /* 1..2 * maxvert */
 int   k; /* 1..4 */
 int denrno;

   /*  EmitDenoms -- main  */
   
   for (j = 1; j <= vcs.sizet; j++)
   for (k = 1; k <= vcs.valence[j-1]; k++)
   { edgeinvert *ln = &vcs.vertlist[j-1][k-1];
     if(ln->moment>0)
     { char*mass= prtclbase1[ln->partcl].massidnt;
        if(!(ln->prop&(IN_PRTCL|OUT_PRTCL)) && pseudop(ln->partcl))
            writeF("totFactor_:=totFactor_/%s^2$\n",mass);
        else 
        { int spin=prtclbase1[ln->partcl].spin;
          if(spin==3)writeF("totFactor_:=totFactor_/(3*%s^2)$\n",mass);
          else if(spin==4)writeF("totFactor_:=totFactor_/(6*%s^4)$\n",mass);
        }  
     }                    
   } 
   
   writeF("denominator_:=");
   denrno = 0;
   for (j = 1; j <= vcs.sizet; j++)
   for (k = 1; k <= vcs.valence[j-1]; k++)
   {edgeinvert *ln = &vcs.vertlist[j-1][k-1];

     if (ln->moment > 0 && !(ln->prop & (IN_PRTCL|OUT_PRTCL)) )
     {
        if (!pseudop(ln->partcl))
        {  char width[10]="0";
           if(denrno) writeF("*");
           denrno++;
/*           if(!ttypepropag(j,k))*/ strcpy(width,prtclbase1[ln->partcl].imassidnt);
           writeF("propDen(p%d,%s,%s)",ln->moment,
                            prtclbase1[ln->partcl].massidnt,width);
        }
     }
   } 
   if(!denrno) writeF("1");
   writeF("$\n");

}  /*   EmitDenoms   */
示例#2
0
static int restrict_p(int y0, int anti, char * mess, char * hlp, 
char *  inputstr, whohow  liminsp)
{ 
   int m, j, k;
   int ntot;

   char ** items;   
   char *errpos=NULL;

   int r; 

do{
    for(r=1;r!=KB_ENTER;) 
    { 
       r=input(y0, hlp,  mess,inputstr, errpos? 1+errpos-inputstr:1,SSTRLEN);
       if(r==KB_ESC) return 1;
    }
    trim(inputstr);
    nilprtcl(liminsp);
    ntot=0;

    items=stritems(",",inputstr);
    for(m=0 ; items[m]; m++)
    {  char frgm[100];
       char *n;
      sscanf(items[m],"%[^,]",frgm);       

      if(n=strstr(frgm,"!="))
      { if(!anti) {errTxt="wrong restriction"; break;}
        if(sscanf(n+2,"%d",&k)!=1) {errTxt="wrong number"; break;}
        else {n[0]=0; k++;  k=-k;}
      }
      else if(n=strstr(frgm,">"))
      {
        if(sscanf(n+1,"%d",&k)!=1) {errTxt="wrong number"; break;}
        else {n[0]=0;k++;}
      }
      else k=1;
      trim(frgm);

      locateinbase(frgm,&j);
      if ((j == 0) || (!anti&&pseudop(j)))
      {  errTxt="wrong limit statement";
         break;
      }
      ntot++;
      if(ntot>=whohowMAX) { errTxt="Too many items"; break;}
      addlim(liminsp,j,k,anti);
    }
    errpos=items[m];
    free(items);
  }while(errpos);
   return 0;
}
示例#3
0
/* momdep from prepdiag.h must be calculated before */
void  calcdenominators(vcsect vcs )
{ int  v, l, k;
  char buff[MAXINOUT+1];



   denrno = 0;
   for (v = 1; v <= vcs.sizet; v++)
   for (l = 1; l <= vcs.valence[v-1]; l++)
   {  edgeinvert *ln = &vcs.vertlist[v-1][l-1];
      if(!(ln->moment<0||((IN_PRTCL|OUT_PRTCL)&ln->prop)||pseudop(ln->partcl)))
      {
         for( k=1;k<=momdep[ln->moment-1][0];k++) buff[k-1]=momdep[ln->moment-1][k];
         buff[k-1]=0;

         k=-1; while(buff[++k]) if(buff[k]<0) buff[k]=-buff[k];
         if( (2*strlen(buff) > nin+nout) ||
             (2*strlen(buff)==nin+nout && !strchr(buff,1))
           )
         { int ll=0;
           char buff2[MAXINOUT+1];
           for(k=1;k<=nin+nout;k++){ if(!strchr(buff,k)) buff2[ll++]=k;}
           buff2[ll]=0;
           strcpy(buff,buff2);
         }
         k=0;
         while(buff[k])
         {  if(!k) k++;
            if(buff[k]<buff[k-1])
            { int c=buff[k];
              buff[k]=buff[k-1];
              buff[k-1]=c;
              k--;
            } else k++;
         }

         strcpy(denom[denrno].momStr,buff);
         if(v <= vcs.sizel) denom[denrno].power = 1; else denom[denrno].power = -1;

         denom[denrno].mass=modelVarPos(prtclbase[ln->partcl-1].massidnt);
         if(ttypepropag(v,l)&&!tWidths) denom[denrno].width = 0; else 
         denom[denrno].width=modelVarPos(prtclbase[ln->partcl-1].imassidnt);

         for (k = 0; k < denrno; k++)
         if ( !strcmp(denom[denrno].momStr,denom[k].momStr) &&
               denom[denrno].mass  ==  denom[k].mass &&
               denom[denrno].width ==  denom[k].width )
         {   denom[k].power=2;    goto label_1;}
         denrno++;
label_1:;
      }
   }
}
示例#4
0
int photonp(int p)
{ 
   return ((vectorp(p) && zeromass(p)) || pseudop(p));
} 
示例#5
0
static int enter_h(int * y,char* name,int num,int scat)
{ int      i,m,j=0;
  int      redres;
  shortstr hadrch;  

  char ** items;
  char * errpos=NULL;

  locateinbase(name,&j);
  if(j)
  { 
    if(pseudop(j)) return -1;
    strcpy(hadrons[num].name,name);
    strcpy(hadrons[num].contents,name); 
    hadrons[num].parton[0] = j; 
    hadrons[num].pow = 1;
    if(!scat && num==0 && strcmp(prtclbase1[j].massidnt,"0")==0) 
    { errTxt="Decay of massless particle.";
      return -1;
    }   
    if(name[strlen(name)-1]=='%')
    { 
      if( !scat || nout||strcmp(prtclbase1[j].massidnt,"0") || 
          (prtclbase1[j].spin!=1 && prtclbase1[j].spin!=2) || 
          strchr("LR",prtclbase1[j].hlp)
        ) 
       { errTxt="This particle can not be polarized";   
         return -1;
       } else  hadrons[num].polarized[0]=1; 
    } else hadrons[num].polarized[0]=0;
    return 0;
  }

  for(i=0;i<num;i++) 
  if(!strcmp(hadrons[i].name,name))
  {  strcpy(hadrons[num].name,name);
     strcpy(hadrons[num].contents,hadrons[i].contents);
     hadrons[num].pow=hadrons[i].pow;
     for(j=0;j<hadrons[num].pow;j++)
     { hadrons[num].parton[j]=hadrons[i].parton[j];  
       if(nout) hadrons[num].polarized[j]=0;
       else hadrons[num].polarized[j]=hadrons[i].polarized[j];
     }  
     return 0;
  }

  hadrch[0]=0; 

  for(i=num;i<MAXINOUT;i++) if(!strcmp(hadrons[i].name,name))
  {  
     strcpy(hadrch,hadrons[i].contents);
     break;
  } 

  if(*y>=maxRow()-1) { goto_xy(1,*y); clr_eol();} else (*y)++;  

  do
  {
     m=errpos? errpos-hadrch+1: 0;
  
     do 
     {  char direction[100];
        sprintf(direction,"composit '%s'  consists of: ",name); 
        redres=input(*y, "s_ent_2", direction,  hadrch, m , SSTRLEN);
        if(redres==KB_ESC) return 1;               
     }  while (redres!=KB_ENTER && redres!=KB_ESC);

     if (redres == KB_ESC || strcmp(hadrch,"") == 0)  return 1;
  
      
     items=stritems(" ,",hadrch);
     for(m=0,hadrons[num].pow=0; items[m]; m++) 
     { char  name[100];
       if(hadrons[num].pow>=100) {errTxt="too many partons";break;}   
       sscanf(items[m],"%[^ ,]",name);
       locateinbase(name,&j);  
       if (j==0 || pseudop(j)) 
       { errTxt= "This particle is absent in the model"; break;}

       if(!scat && num==0 && strcmp(prtclbase1[j].massidnt,"0")==0)
       { errTxt="Decay of massless particle.";
         break;
       }
       if(name[strlen(name)-1]=='%')
       { 
         if( !scat || nout||strcmp(prtclbase1[j].massidnt,"0") || 
              (prtclbase1[j].spin!=1 && prtclbase1[j].spin!=2) ||
              strchr("LR",prtclbase1[j].hlp)
           ) 
         { errTxt="This particle can not be polarized";   
              break;
         } else  hadrons[num].polarized[hadrons[num].pow]=1; 
       } else hadrons[num].polarized[hadrons[num].pow]=0; 
       hadrons[num].parton[hadrons[num].pow++]=j;
     }

     errpos=items[m]; 
     if(!errpos)
     {  for(i=0;i<hadrons[num].pow;i++)
        for(j=i+1;j<hadrons[num].pow;j++)
        if(hadrons[num].parton[i]==hadrons[num].parton[j])
        {  errpos=items[j];
           errTxt="duplicate parton";
        }
     }
     strcpy(hadrons[num].name,name);
     strcpy(hadrons[num].contents,hadrch);
     free(items);
  }
  while(errpos);   
  return 0;
}