char * fermPropagTxt(int v,int l,int forReduce) { char * proptxt=(char*)malloc(30); int P=vcs.vertlist[v][l].partcl; int aux=prtclbase1[P].hlp; char * mass=prtclbase1[P].massidnt; char sgn[4]=""; int pa=vcs.vertlist[v][l].moment; char Ln[4]=""; char G5[8]="G5"; char dtwo[4]=""; if(forReduce){strcpy(Ln,"ln,");strcpy(G5,"G(ln,A)");strcpy(dtwo,"/2");} if(pa<0){ pa=-pa; strcpy(sgn,"-");} if(aux=='*') strcpy(proptxt,mass); else if(strcmp(mass,"0")) sprintf(proptxt,"%sG(%sp%d)+%s",sgn,Ln,pa,mass); else if(!strchr("LR",aux) && !(PLR_PRTCL&vcs.vertlist[v][l].prop) ) sprintf(proptxt,"%sG(%sp%d)",sgn,Ln,pa); else if((fermionp(P)&&aux=='L')||(a_fermionp(P)&&aux=='R')) sprintf(proptxt,"%sG(%sp%d)*(1-%s)%s",sgn,Ln,pa,G5,dtwo); else if((fermionp(P)&&aux=='R')||(a_fermionp(P)&&aux=='L')) sprintf(proptxt,"%sG(%sp%d)*(1+%s)%s",sgn,Ln,pa,G5,dtwo); else if(sgn[0]==0) sprintf(proptxt,"%sG(%sp%d)*(1+2*Helicity%d*%s)",sgn,Ln,pa,pa,G5); else sprintf(proptxt,"%sG(%sp%d)*(1-2*Helicity%d*%s)",sgn,Ln,pa,pa,G5); return proptxt; }
static void findfermcycles(void) { int v, v1, l, l1, count; for(v=0; v<vcs.sizet; v++) fermmap[v] = 0; for(v=0,nloop=0; v<vcs.sizet; v++) if(fermmap[v] == 0) { fermloopstp * FL=&(fermloops[nloop]); int vr,lr; for(l=vcs.valence[v]-1; l>=0; l--) if(a_fermionp(vcs.vertlist[v][l].partcl)) break; if(l< 0) continue; count = 0; FL->g5 = 0; for(v1=v; !fermmap[v1]; nextFerm(&v1,&l),count++) { int nInt=0; FL->vv[count]=v1+1; FL->ll[count]=l+1; if(strchr("LR",prtclbase1[vcs.vertlist[v1][l].partcl].hlp) || PLR_PRTCL&vcs.vertlist[v1][l].prop) FL->g5=1; fermmap[v1]=nloop+1; FL->spin[count]=prtclbase1[vcs.vertlist[v1][l].partcl].spin; FL->ind[count][0]=vcs.vertlist[v1][l].lorentz; lr=vcs.vertlist[v1][l].link.edno; vr=vcs.vertlist[v1][l].link.vno; FL->ind[count][1]=vcs.vertlist[vr][lr].lorentz; for(l1=vcs.valence[v1]-1;l1>=0 ;l1--) { vectorLn(v1,&l1); if(l1>=0 && fermmap[vcs.vertlist[v1][l1].link.vno]==nloop+1) FL->intln[count][nInt++]=l1+1; } FL->nint[count]=nInt; } FL->len = count; nloop++; } }