Diagram removal does not remove crossed diagrams
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
MadGraph5_aMC@NLO |
Fix Released
|
Undecided
|
Unassigned |
Bug Description
Dear MadGraph authors,
I am trying to generate the following process:
import model HHVBF_UFO
generate p p > h h j j QCD=0 --diagram_filter
I use the diagram filter to keep only diagrams where a Z/W decays into quarks in the final state (the code used is below). That is, I want to select the non-VBF diagrams to study them separately.
When doing this, I always get VBF diagrams anyway (for some quark configurations), although those diagrams disappear, when specifying the exact initial and final state. For example, I see some of the VBF diagrams in the u c~ > h h u c~ process with this:
generate u p > h h j j QCD=0 --diagram_filter
But not if I type directly:
generate u c~ > h h u c~ QCD=0 --diagram_filter
(in the latter case, all diagrams are removed by the filter)
I have identified that such diagrams are always produced by crossing symmetry in the MadGraph output. That is, I see messages such as the following one for the offending diagrams:
INFO: Crossed process found for u c~ > h h u c~, reuse diagrams.
Looking in the code, I have manually changed madgraph/
daniloefl@
1785c1785
< not process.
---
> not process.
After this, the diagrams that I wish were removed no longer appear, reinforcing my suspicion that this is a bug.
For completeness, I add my code in PLUGIN/
Best regards,
Danilo
def remove_diag(diag):
"""keep all diagrams with a V->jj decay, where j is a final-state quark"""
found_vjj = 0
found_tchan = 0
for vertex in diag['vertices']:
if vertex.get('id') == 0: # special final vertex
if len(vertex['legs']) != 3: # ignore 4-point vertices
leg = vertex['legs'][2]
if (abs(leg['id']) == 24 or abs(leg['id']) == 23):
if leg.get('number') > 2:
leg = vertex['legs'][0]
if not(abs(leg['id']) < 6 and leg['state']):
leg = vertex['legs'][1]
if not(abs(leg['id']) < 6 and leg['state']):
else:
leg = vertex['legs'][-1]
if leg.get('number') < 3:
leg = vertex['legs'][-1]
if not(abs(leg['id']) < 6 and leg['state']):
i = 1
if abs(vertex[
i = 0
leg = vertex['legs'][i]
if not(abs(leg['id']) < 6 and leg['state']):
order_ok = (diag['
accept = (found_vjj >= 1 and order_ok)
return not accept
description: | updated |
Changed in mg5amcnlo: | |
status: | Fix Committed → Fix Released |
Hi Danilo,
Can you attach your model?
This model is not our online database of model.
I have also tried with the SM model, but there, your script removes 100% of the diagram.
Cheers,
Olivier