Example #1
0
static void  makeSkelet(void)
{int   i, j, p, i1; 
 
   for (i = 0; i < vcs_stat.sizet; i++) 
   { 
      vertmrk[i] = 0; 
      for (j = 0; j < vcs_stat.valence[i]; j++) sklt[i][j] = 0; 
   } 

   for (i = 0; i < vcs_stat.sizet; i++)   /*  mark subgraph vertex with '1'  */ 
      for (j = 0; j < vcs_stat.valence[i]; j++)
      { 
/*       if(PLR_PRTCL&vcs_stat.vertlist[i][j].prop) continue;*/
         i1 = vcs_stat.vertlist[i][j].nextvert.vno - 1 ; 
         p = vcs_stat.vertlist[i][j].partcl; 
         if (gaugep(p) && i < i1 && !(PLR_PRTCL&vcs.vertlist[i][j].prop) ) 
         {   /*  check the  Ghost particles existence in vertex  */ 
            if ((prtclInVert(p + 1,i+1) && 
                 prtclInVert(prtclbase[p + 1-1].anti,i1+1)) || 
                (prtclInVert(p + 2,i+1) && 
                 prtclInVert(prtclbase[p + 2-1].anti,i1+1))) 
            { 
               sklt[i][j] = 1; 
               sklt[i1][vcs_stat.vertlist[i][j].nextvert.edno-1] = 1; 
               vertmrk[i] = 1; 
               vertmrk[i1] = 1; 
            } 
         } 
      } 
   /*  end of mark   */ 
   for (i = 0; i < vcs_stat.sizet; i++) {if (vertmrk[i] == 1) addVertex(i+1,maxmark);}
}  
Example #2
0
set  findmassindex(void)
{ int  v, l; 
  set index=set_constr(_E);
  for(v=0; v<vcs.sizet; v++) for(l=0; l<vcs.valence[v]; l++) 
  { edgeinvert * L=&vcs.vertlist[v][l];
    if(L->lorentz && L->link.vno<v && !photonp(L->partcl) 
    && !gaugep(L->partcl) && prtclbase1[L->partcl].spin==2 ) 
    {     
      set_add1(&index,L->lorentz); 
      massindpos[L->lorentz-1].vrt1= v+1;
      massindpos[L->lorentz-1].ln1 = l+1; 
      massindpos[L->lorentz-1].vrt2= L->link.vno+1; 
      massindpos[L->lorentz-1].ln2 = L->link.edno+1; 
    } 
  }
  return index;
} 
Example #3
0
static void  insertPermition(hlpcsptr alll)
{ 
 int          i, j, i1, j1; 
 int          first_mark[2 * maxvert][MAXVALENCE];   
 int mark, np;
 
    for (i = 0; i < vcs_stat.sizet; i++) 
    for (j = 0; j < vcs_stat.valence[i]; j++)
    if(vcs_stat.vertlist[i][j].nextvert.vno != nullvert) 
    { 
       i1 = vcs_stat.vertlist[i][j].nextvert.vno-1;
       if (i < i1) 
       { 
          j1 = vcs_stat.vertlist[i][j].nextvert.edno-1;
          np= vcs_stat.vertlist[i][j].partcl;
          mark=0;
          if (gaugep(np) && !zeromass(np) && prtclInVert(np+sbosonmark,i+1) 
          && prtclInVert(prtclbase[np+sbosonmark-1].anti,i1+1) )mark +=S_PERMIT;

          if ( (prtclbase[np-1].spin == 2) /*&& (prtclbase[np-1].cdim !=1)*/ &&
          ( (i >= vcs_stat.sizel) || (i1 < vcs_stat.sizel) ))
          {  if(prtclInVert(prtclbase[np+xbosonmark-1].anti,i1+1)
             && prtclInVert(np+xbosonmark,i+1)) mark += X_PERMIT; 

             if(prtclInVert(prtclbase[np+ybosonmark-1].anti,i1+1 )
             && prtclInVert(np+ybosonmark,i+1)) mark += Y_PERMIT; 
          }
          first_mark[i ][j ]=mark; 
          first_mark[i1][j1]=mark;   
       }    
    } else  first_mark[i ][j ]=0;
          
   while (alll != NULL) 
   { 
      for (i = 0; i < vcs_stat.sizet; i++) 
      for (j = 0; j < vcs_stat.valence[i]; j++) 
      if (alll->hlpcs[i][j] == 0 )  alll->hlpcs[i][j] = first_mark[i][j];   
      alll = alll->next; 
   } 
} 
Example #4
0
static int  ghostaddition(void)
{  int  i, nPrim;
   nPrim=nparticles;
   if( (prtclbase[nPrim-1].spin == 2) /*&& (prtclbase[nPrim-1].cdim !=1)*/ )
   { 
      nPrim ++;   
      prtclbase[nPrim -1] = prtclbase[nparticles-1];      
      prtclbase[nparticles -1].hlp = 'T';
      prtclbase[nparticles -1].spin=4;
      nparticles ++; 

      nPrim ++;   
      prtclbase[nPrim -1] = prtclbase[nparticles-1];      
      prtclbase[nparticles -1].hlp = 't';
      prtclbase[nparticles -1].spin=4;
      nparticles ++; 
   }
   
   if (gaugep(nPrim))
   {
      nparticles ++;
      prtclbase[nparticles -1] = prtclbase[nPrim-1];
      prtclbase[nparticles -1].hlp = 'c';
      nparticles ++;
      prtclbase[nparticles -1] = prtclbase[nPrim-1];
      prtclbase[nparticles -1].hlp = 'C';
      
      if (strcmp(prtclbase[nPrim-1].massidnt,"0") != 0)
      {
         nparticles ++;
         prtclbase[nparticles -1] = prtclbase[nPrim-1];
         prtclbase[nparticles -1].hlp = 'f';
      }
      for (i=nPrim+1; i<=nparticles;i++)  prtclbase[i -1].spin=0;
   }
   return nPrim;
}
Example #5
0
static int  readparticles(int  check, int ugForce )
{  char      *ss,*endstr;
   char      fullname[60], massname[60], imassname[60], p1[60], p2[60],numtxt[20];
   char      latex[STRSIZ], latex_[STRSIZ], s[60],c[60], chlp[40];
   int       itmp,i,j, errcode,np1,np2,nparticleLimit =128;

   linelist  ln=prtcls_tab.strings;

   tabName=prtcls_tab.headln;

   if(prtclbase) { cleardecaylist(); clearLatexNames(); free(prtclbase);}
 
   prtclbase=(prtcl_base*) malloc(nparticleLimit*sizeof(prtcl_base));
   prtclbase1=prtclbase-1;	
   nparticles = 0;

   for(i=nparticles;i<nparticleLimit;i++)
           {prtclbase[i].top=NULL;prtclbase[i].latex=NULL;}
   
   nLine=1;
   while (ln != NULL)
   {  ss=ln->line;
      if (nparticles >= nparticleLimit-16)
      {  nparticleLimit+=128;
         prtclbase=re_alloc(prtclbase,nparticleLimit*sizeof(prtcl_base));
         if(!prtclbase) 
         { errorMessage(" P ","too many particles");
	   return 0;
	 }
	 prtclbase1=prtclbase-1;
         for(i=nparticles;i<nparticleLimit;i++)
               {prtclbase[i].top=NULL;prtclbase[i].latex=NULL;} 
      }

      sscanf(ss,"%[^|]%*c%[^|]%*c%[^|]%*c%[^|]%*c%[^|]%*c%[^|]%*c%[^|]%*c%[^|]%*c%[^|]%*c%[^|]%*c%[^|]",
	    fullname,p1,p2,numtxt,s,massname,imassname,c,chlp,latex,latex_);
      trim(p1); trim(p2); trim(latex); trim(latex_); 
      {
         static char fldName[2][5]={" P "," aP"};
         char * pName[2];
         pName[0]=p1;
         pName[1]=p2;

         for ( i=0;i<=1;i++)
         {
            if (check && (! isPrtclName(pName[i])))
            {  errorMessage(fldName[i],"incorrect particle name '%s'",pName[i]);
               return 0;
            }

            if (check )
            {
               locateinbase(pName[i],&j);
               if (j != 0)
               {
                  errorMessage(fldName[i],"duplicate particle name '%s'",pName[i]);
                  return 0;
               }
            }
         }
      }
      nparticles++;
      strcpy(prtclbase[nparticles-1].name,p1);

            
      itmp=strtol(trim(s),&endstr,10);
      if(check)
      {
         if (s+strlen(s) != endstr)
         {  errorMessage("2*spin","number expected");
            return 0 ;
         }
         if((itmp!=0)&&(itmp!=1)&&(itmp!=2)&&(itmp!=3)&&(itmp!=4))
         {  errorMessage("2*spin","value out of range");
            return 0;
         }
      }
      prtclbase[nparticles-1].spin=itmp;
      if( 1!=sscanf(numtxt,"%ld",&prtclbase[nparticles-1].N))
      {    errorMessage("number","can't read MC numeration parameter");
            return 0;
      }
      trim(massname);
      if(strcmp(massname,"0")==0)
      { if(prtclbase[nparticles-1].spin==3 || prtclbase[nparticles-1].spin==4)
         errorMessage("mass","spin 3/2 and spin 2 particles should be massive");
      }
      else 
      {  int pos;
         errcode=findvar(massname,NULL,&pos);
         if (check && (errcode != 0))
         {
            errorMessage("mass","unknown variable %s",massname);
            return 0;
         }else 
         {  if(pos>nCommonVars) nCommonVars=pos;

         } 
      }
      strcpy(prtclbase[nparticles-1].massidnt,massname);

      trim(imassname);
      
      if( check && strcmp(imassname,"0")&& !strcmp(massname,"0")) 
      {  errorMessage("width","non zero width for zero mass particle '%s'", 
            prtclbase[nparticles-1].name);
         return 0;
      }
                                       
      if(strcmp(imassname,"0") != 0)
      { 
         errcode=findvar(imassname,NULL,NULL);
         
         if(errcode)  
         {  if(imassname[0]=='!') 
            {  imassname[0]=' ';  
               trim(imassname);
               if(check && (!isVarName(imassname)) )
               {  errorMessage("width","incorrect name '%s'",imassname);
                  return 0;
               }
               if(check && (!isOriginName(imassname)) )                            
               { errorMessage("width","this identifier  '%s' already was used",imassname);
                 return 0;
               }
               { varlist mvars=modelvars+1+nmodelvar; 
                  nmodelvar++;
                  strcpy(mvars->varname,imassname);
                  mvars->func = NULL;
                  mvars->varvalue = 0.;
                  mvars->need=0;
                  mvars->hidden=0;
                  mvars->pwidth=nparticles;
               }                                                     
            }else 
            { 
               errorMessage("width","unknown variable %s",imassname);
               return 0;
            }
         }
      }
      strcpy(prtclbase[nparticles-1].imassidnt,imassname);

      itmp=strtol(trim(c),&endstr,10);
      if(check)
      {
         if (c+strlen(c) != endstr)
         {  errorMessage("color","number expected");
            return 0;
         }
         if (((itmp!=1)&&(itmp!=3)&&(itmp!=8))||((itmp==3)&&(strcmp(p1,p2)==0))  )
         {  errorMessage("color","value out of range");
            return 0;
         }
      }
      prtclbase[nparticles-1].cdim=itmp;
      trim(chlp);
      if (strcmp(chlp,"") == 0) strcpy(chlp," ");
      prtclbase[nparticles-1].hlp = toupper(chlp[0]);
      if(check)
      {  int ner;
         ner=1;
         switch(prtclbase[nparticles-1].hlp)
         {
            case ' ':if(prtclbase[nparticles-1].spin==2 &&
                        !strcmp(prtclbase[nparticles-1].massidnt,"0")
                       )
              {  errorMessage("aux","Massless vector boson must\n"
                                     " be a gauge particle");                  
                 return 0;
              }
              break;
            case 'L':
            case 'R':
              if ((prtclbase[nparticles-1].spin !=1)
               ||((prtclbase[nparticles-1].massidnt[0])!='0')
               ||(strcmp(p1,p2)==0))  ner=0;
              break;

            case '*':
              if(prtclbase[nparticles-1].massidnt[0]=='0')   ner=0;
              else if(prtclbase[nparticles-1].imassidnt[0]!='0')
              { errorMessage("aux","for aux='*' zero width is  expected"); return 0;}
              break;
            case 'G':
              if(prtclbase[nparticles-1].spin!=2)   ner=0;
              break;
            default: ner=0;
         }
         if(!ner){ errorMessage("aux","unexpeted character"); return 0;}
         if(prtclbase[nparticles-1].N==0 && prtclbase[nparticles-1].hlp!='*')
         { errorMessage("number","Zero PDG code."); return 0;}  
      }
      prtclbase[nparticles-1].latex=malloc(1+strlen(latex));
      strcpy(prtclbase[nparticles-1].latex,latex);
      
      np1 = ghostaddition();
      if (strcmp(p1,p2) == 0) prtclbase[np1-1].anti = np1;
      else
      {
        ++(nparticles);
        prtclbase[nparticles-1] = prtclbase[np1-1];
        prtclbase[nparticles-1].N *=(-1);
        strcpy(prtclbase[nparticles-1].name,p2);
        prtclbase[nparticles-1].latex=malloc(1+strlen(latex_));
        strcpy(prtclbase[nparticles-1].latex,latex_);
        if (prtclbase[np1-1].cdim == 3) prtclbase[nparticles-1].cdim = -3;
        np2=ghostaddition();
        prtclbase[np1-1].anti = np2;
        prtclbase[np2-1].anti = np1; 
      }
      ln=ln->next;
      nLine++;
   }

   for (i = 1; i <= nparticles; i++)
   {  prtcl_base *with1 = &prtclbase[i-1];
      with1->top = NULL;
      
      if (strchr("fcCtT",with1->hlp) != NULL)
      {  
         sprintf(with1->name+strlen(with1->name),".%c",with1->hlp); 
         switch (with1->hlp)
         {
            case 'c':                        
               with1->anti = prtclbase[i-1 - 1].anti +2;
               break;
            case 'C':
               with1->anti = prtclbase[i-1 - 2].anti +1;
               break;
            case 'f':
               with1->anti = prtclbase[i-1 - 3].anti +3;
               break;
            case 't':
               with1->anti = prtclbase[i-1 + 1].anti -1;
               break;               
            case 'T':
               with1->anti = prtclbase[i-1 + 2].anti -2;
               break;               
         }
      }
   }
   
   if(ugForce)for(i=1; i <= nparticles; i++) 
               if(gaugep(i) && (!zeromass(i))) prtclbase[i-1].hlp=' ';

  for(i=1;i<=nmodelvar;i++)
  if(modelvars[i].pwidth) modelvars[i].pwidth=ghostmother(modelvars[i].pwidth);
   
   return 1;
}