@@ -245,7 +245,7 @@ void ProcessDiagram(EGraph *eg, void *ti)
245245//
246246// Now get the nodes
247247//
248- if ( ( info->flags & NONODES ) == 0 ) {
248+ if ( ( info->flags & WITHOUTNODES ) == 0 ) {
249249 for ( i = 0 ; i < eg->nNodes ; i++ ) {
250250//
251251// node_(number,coupling,particle_1(momentum_1),...,particle_n(momentum_n))
@@ -395,7 +395,7 @@ void ProcessDiagram(EGraph *eg, void *ti)
395395 startfill[1 ] = fill-startfill;
396396 }
397397 }
398- if ( ( info->flags & WITHONEPI ) == WITHONEPI ) {
398+ if ( ( info->flags & WITHONEPISETS ) == WITHONEPISETS ) {
399399 for ( i = 0 ; i < eg->econn ->nopic ; i++ ) {
400400 startfill = fill;
401401 *fill++ = ONEPI;
@@ -452,8 +452,6 @@ void ProcessDiagram(EGraph *eg, void *ti)
452452 *newterm = fill - newterm;
453453 AT.WorkPointer = fill;
454454
455- // MesPrint("<> %a",newterm[0],newterm);
456-
457455 Generator (BHEAD newterm,info->level );
458456 AT.WorkPointer = oldworkpointer;
459457}
@@ -664,7 +662,7 @@ Bool ProcessTopology(EGraph *eg, void *ti)
664662// startfill[1] = fill-startfill;
665663// }
666664 }
667- if ( ( info->flags & WITHONEPI ) == WITHONEPI ) {
665+ if ( ( info->flags & WITHONEPISETS ) == WITHONEPISETS ) {
668666 for ( i = 0 ; i < eg->econn ->nopic ; i++ ) {
669667 startfill = fill;
670668 *fill++ = ONEPI;
@@ -718,15 +716,35 @@ Bool ProcessTopology(EGraph *eg, void *ti)
718716 *newterm = fill - newterm;
719717 AT.WorkPointer = fill;
720718
721- // MesPrint("<> %a",*newterm,newterm);
722-
723719 Generator (BHEAD newterm,info->level );
724720 AT.WorkPointer = oldworkpointer;
725721 info->numtopo ++;
726722 return False;
727723}
728724
729725// #] ProcessTopology :
726+ // #[ SetDualOpts :
727+ void SetDualOpts (int *opt, const WORD num, const int key, const int dual,
728+ const int val, const int dval, const int both) {
729+
730+ if ( ( num & key ) == key ) {
731+ if ( ( num & dual ) == dual ) {
732+ *opt = both;
733+ }
734+ else {
735+ *opt = val;
736+ }
737+ }
738+ else {
739+ if ( ( num & dual ) == dual ) {
740+ *opt = dval;
741+ }
742+ else {
743+ *opt = both;
744+ }
745+ }
746+ }
747+ // #] SetDualOpts :
730748// #[ GenDiagrams :
731749
732750int GenDiagrams (PHEAD WORD *term, WORD level)
@@ -780,27 +798,24 @@ int GenDiagrams(PHEAD WORD *term, WORD level)
780798
781799 opt->setOutAG (ProcessDiagram, &info);
782800 opt->setOutMG (ProcessTopology, &info);
783- // opt->setEndMG(fendMG, &info);
784801
785- opt->values [GRCC_OPT_1PI] = ( optionnumber & ONEPARTICLEIRREDUCIBLE ) == ONEPARTICLEIRREDUCIBLE;
786- opt->values [GRCC_OPT_NoTadpole] = ( optionnumber & NOTADPOLES ) == NOTADPOLES;
787- //
788- // Next are snails:
789- //
790- opt->values [GRCC_OPT_No1PtBlock] = ( optionnumber & NOTADPOLES ) == NOTADPOLES;
791- //
792- if ( ( optionnumber & WITHINSERTIONS ) == WITHINSERTIONS ) {
793- opt->values [GRCC_OPT_No2PtL1PI] = True;
794- opt->values [GRCC_OPT_NoAdj2PtV] = True;
795- opt->values [GRCC_OPT_No2PtL1PI] = True;
796- }
797- else {
798- opt->values [GRCC_OPT_NoAdj2PtV] = True;
799- }
800802 opt->values [GRCC_OPT_SymmInitial] = ( optionnumber & WITHSYMMETRIZE ) == WITHSYMMETRIZE;
801- opt-> values [GRCC_OPT_SymmFinal] = ( optionnumber & WITHSYMMETRIZE ) == WITHSYMMETRIZE;
802-
803+ // TODO decide what to do here
804+ // opt->values[GRCC_OPT_SymmFinal] = ( optionnumber & WITHSYMMETRIZE ) == WITHSYMMETRIZE;
803805// opt->values[GRCC_OPT_Block] = ( optionnumber & WITHBLOCKS ) == WITHBLOCKS;
806+ // Now the "qgraf-compatible filtering options":
807+ int qgopt[GRCC_QGRAF_OPT_Size];
808+ SetDualOpts (&qgopt[GRCC_QGRAF_OPT_ONEPI], optionnumber, ONEPARTI, ONEPARTR, 1 , -1 , 0 );
809+ SetDualOpts (&qgopt[GRCC_QGRAF_OPT_ONSHELL], optionnumber, ONSHELL, OFFSHELL, 1 , -1 , 0 );
810+ SetDualOpts (&qgopt[GRCC_QGRAF_OPT_NOSIGMA], optionnumber, NOSIGMA, SIGMA, 1 , -1 , 0 );
811+ SetDualOpts (&qgopt[GRCC_QGRAF_OPT_NOSNAIL], optionnumber, NOSNAIL, SNAIL, 1 , -1 , 0 );
812+ SetDualOpts (&qgopt[GRCC_QGRAF_OPT_NOTADPOLE], optionnumber, NOTADPOLE, TADPOLE , 1 , -1 , 0 );
813+ SetDualOpts (&qgopt[GRCC_QGRAF_OPT_SIMPLE], optionnumber, SIMPLE, NOTSIMPLE, 1 , -1 , 0 );
814+ SetDualOpts (&qgopt[GRCC_QGRAF_OPT_BIPART], optionnumber, BIPART, NONBIPART, 1 , -1 , 0 );
815+ SetDualOpts (&qgopt[GRCC_QGRAF_OPT_CYCLI], optionnumber, CYCLI, CYCLR, 1 , -1 , 0 );
816+ qgopt[GRCC_QGRAF_OPT_FLOOP] = ( optionnumber & FLOOP ) == FLOOP;
817+ // Now set the options internally:
818+ opt->setQGrafOpt (qgopt);
804819
805820 opt->setOutputF (False," " );
806821 opt->setOutputP (False," " );
@@ -809,19 +824,18 @@ int GenDiagrams(PHEAD WORD *term, WORD level)
809824// opt->values[GRCC_OPT_Step] = GRCC_AGraph;
810825
811826// Load the various arrays.
812-
813- ninitl = Sets[inset].last - Sets[inset].first ;
814- for ( i = 0 ; i < ninitl; i++ ) {
815- x = SetElements[Sets[inset].first +i];
816- initlPart[i] = ConvertParticle (model,x);
827+ ninitl = Sets[inset].last - Sets[inset].first ;
828+ for ( i = 0 ; i < ninitl; i++ ) {
829+ x = SetElements[Sets[inset].first +i];
830+ initlPart[i] = ConvertParticle (model,x);
817831 info.legcouple [i] = m->vertices [numParticle (m,x)]->couplings ;
818- }
819- nfinal = Sets[outset].last - Sets[outset].first ;
820- for ( i = 0 ; i < nfinal; i++ ) {
821- x = SetElements[Sets[outset].first +i];
822- finalPart[i] = ConvertParticle (model,x);
832+ }
833+ nfinal = Sets[outset].last - Sets[outset].first ;
834+ for ( i = 0 ; i < nfinal; i++ ) {
835+ x = SetElements[Sets[outset].first +i];
836+ finalPart[i] = ConvertParticle (model,x);
823837 info.legcouple [i+ninitl] = m->vertices [numParticle (m,x)]->couplings ;
824- }
838+ }
825839 info.numextern = ninitl + nfinal;
826840 for ( i = 2 ; i <= MAXLEGS; i++ ) {
827841 if ( m->legcouple [i] == 1 ) {
@@ -1000,21 +1014,21 @@ int GenTopologies(PHEAD WORD *term, WORD level)
10001014
10011015 info.flags |= TOPOLOGIESONLY; // this is the topologies_ function after all.
10021016 if ( t1 < tstop && t1[0 ] == -SNUMBER ) {
1003- if ( ( t1[1 ] & NONODES ) == NONODES ) info.flags |= NONODES ;
1017+ if ( ( t1[1 ] & WITHOUTNODES ) == WITHOUTNODES ) info.flags |= WITHOUTNODES ;
10041018 if ( ( t1[1 ] & WITHEDGES ) == WITHEDGES ) info.flags |= WITHEDGES;
10051019 if ( ( t1[1 ] & WITHBLOCKS ) == WITHBLOCKS ) info.flags |= WITHBLOCKS;
1006- if ( ( t1[1 ] & WITHONEPI ) == WITHONEPI ) info.flags |= WITHONEPI ;
1007- opt->values [GRCC_OPT_1PI] = ( t1[1 ] & ONEPARTICLEIRREDUCIBLE ) == ONEPARTICLEIRREDUCIBLE ;
1008- // opt->values[GRCC_OPT_NoTadpole] = ( t1[1] & NOTADPOLES ) == NOTADPOLES ;
1009- opt->values [GRCC_OPT_NoTadpole] = ( t1[1 ] & NOSNAILS ) == NOSNAILS ;
1010- opt->values [GRCC_OPT_No1PtBlock] = ( t1[1 ] & NOTADPOLES ) == NOTADPOLES ;
1011- opt->values [GRCC_OPT_NoExtSelf] = ( t1[1 ] & NOEXTSELF ) == NOEXTSELF;
1012-
1013- if ( ( t1[1 ] & WITHINSERTIONS ) == WITHINSERTIONS ) {
1014- opt->values [GRCC_OPT_No2PtL1PI] = True;
1015- opt->values [GRCC_OPT_NoAdj2PtV] = True;
1016- opt->values [GRCC_OPT_No2PtL1PI] = True;
1017- }
1020+ if ( ( t1[1 ] & WITHONEPISETS ) == WITHONEPISETS ) info.flags |= WITHONEPISETS ;
1021+ opt->values [GRCC_OPT_1PI] = ( t1[1 ] & ONEPARTI ) == ONEPARTI ;
1022+ // opt->values[GRCC_OPT_NoTadpole] = ( t1[1] & NOTADPOLE ) == NOTADPOLE ;
1023+ opt->values [GRCC_OPT_NoTadpole] = ( t1[1 ] & NOSNAIL ) == NOSNAIL ;
1024+ opt->values [GRCC_OPT_No1PtBlock] = ( t1[1 ] & NOTADPOLE ) == NOTADPOLE ;
1025+ // opt->values[GRCC_OPT_NoExtSelf] = ( t1[1] & NOEXTSELF ) == NOEXTSELF;
1026+
1027+ // if ( ( t1[1] & WITHINSERTIONS ) == WITHINSERTIONS ) {
1028+ // opt->values[GRCC_OPT_No2PtL1PI] = True;
1029+ // opt->values[GRCC_OPT_NoAdj2PtV] = True;
1030+ // opt->values[GRCC_OPT_No2PtL1PI] = True;
1031+ // }
10181032 opt->values [GRCC_OPT_SymmInitial] = ( t1[1 ] & WITHSYMMETRIZE ) == WITHSYMMETRIZE;
10191033 }
10201034
0 commit comments