# Generating the different contributions in a process with interference

Dear experts,

I would like to ask you if there is a way to generate the separate contributions that sum up in a process with interference.

In particular, I am interested in gg->HH production, that at LO is described by the sum of two diagrams B and T:

A ~ B + T

so that the cross section is actually the sum of three components:

|A|^2 = |B|^2 + |T|^2 + |B*T + T*B| = b + t + i

I am currently using a model where the couplings involved in this process (ttH and HHH) can be tuned [1] and, with some algebra, the individual components (b,t,i) can be obtained by summing and subtracting distributions for different coupling combinations.

However, this reduces the statistical power of the generated events and requires larger datasets, especially when distributions are subtracted.

My question is therefore if there is a way to identify the b, t, and i components and produce them individually in Madgraph?

I assume that somehow Madgraph has to sample them when performing the integration and I suspect that there might be a way to force it to only consider one of them (in the same way that I can force it to only generate "b" if I set to 0 the couplings that multiply "t" and "i" in model [1]), but I have no insight in the structure of the code to be able to do so.

Thanks in advance for your help!

Best,

Luca

[1] https:/

## Question information

- Language:
- English Edit question

- Status:
- Answered

- Assignee:
- No assignee Edit question

- Last query:
- 2018-05-28

- Last reply:
- 2018-06-01

Hi,

> I assume that somehow Madgraph has to sample them when performing the integration and I suspect that there might be a way to force it to only consider one of them (in the same way that I can force it to only generate "b" if I set to 0 the couplings that multiply "t" and "i" in model [1]), but I have no insight in the structure of the code to be able to do so.

Your assumption is actually wrong. We compute B and T independently but we do not compute |B*T + T*B|.

We "just" compute |A|^2 = |B+T|^2 and we are integrating directly over |A|^2.

This being we have method to return only |B*T + T*B| in some specific case.

This can be done via the following syntax

generate p p > j j W+ W- QED^2==4

The ^2 indicates that the coupling restriction needs to be done at the square level.

the == indicates that you want exactly that number of coupling

So if your coupling is associate to a coupling order (let's say TRIANGLE)

then you can generate only the interference via

generate p p > h h TRIANGLE^2==1 [QCD]

Now please note that the syntax above might not produce sensitive results when you perform the phase-space integration. So be attentive to ALL log file (one for each channel) in order to spot potential issue.

The reason for such warning is that

1) the phase-space integration of loop-induced process is already quite tricky.

2) The phase-space integration of interference term is not only tricky. It is something that I have no clue how to do it. The code generates a method for performing such integration but this is everything but optimal (since I have no clue how to do that efficiently). So we deeply rely on the automatic adaptation of the code to converge correctly. This seems to work correctly for (simple) tree-level case but was never tested for loop-induced one.

Finally note that for interference term the default dynamical scale (-1) is not really sensitive (since it is based on the contribution of the amplitude square) so you need to use a more simple one (like HT, sqrts, ...)

The default run_card might have already change that for you. But you should check it.

Cheers,

Olivier

> On 28 May 2018, at 19:27, Luca <email address hidden> wrote:

>

> New question #669724 on MadGraph5_aMC@NLO:

> https:/

>

> Dear experts,

>

> I would like to ask you if there is a way to generate the separate contributions that sum up in a process with interference.

> In particular, I am interested in gg->HH production, that at LO is described by the sum of two diagrams B and T:

> A ~ B + T

> so that the cross section is actually the sum of three components:

> |A|^2 = |B|^2 + |T|^2 + |B*T + T*B| = b + t + i

>

> I am currently using a model where the couplings involved in this process (ttH and HHH) can be tuned [1] and, with some algebra, the individual components (b,t,i) can be obtained by summing and subtracting distributions for different coupling combinations.

> However, this reduces the statistical power of the generated events and requires larger datasets, especially when distributions are subtracted.

>

> My question is therefore if there is a way to identify the b, t, and i components and produce them individually in Madgraph?

> I assume that somehow Madgraph has to sample them when performing the integration and I suspect that there might be a way to force it to only consider one of them (in the same way that I can force it to only generate "b" if I set to 0 the couplings that multiply "t" and "i" in model [1]), but I have no insight in the structure of the code to be able to do so.

>

> Thanks in advance for your help!

> Best,

> Luca

>

> [1] https:/

>

>

> --

> You received this question notification because you are an answer

> contact for MadGraph5_aMC@NLO.

Luca (cadaluca90) said : | #2 |

Hi Olivier,

thanks a lot for your answer, it's very helpful!

I checked my model and noticed that the diagram I am interested in is not associated to a coupling order, however (with the guidance of an expert :-) ) I modified the couplings.py file to add a new coupling "NPHYS" to the diagrams I am interested in and added 'NPHYS' in coupling_orders.py

Unfortunately this crashes when I try to generate g g > h h NPHYS^2==1 and create and output (output OUTPUT_FOLDER) with the error message [1].

Instead everything is fine if I use other coupling orders (e.g. NPHYS^2==2).

Please note that this is not an error related to my modifications: if I try to use the following syntax on the original model

import BSM_gg_hh

generate g g > h h QED==2

output OUTPUT_FOLDER

I get the same error.

VVS2P0 does not appear in any file in the UFO model and it's a bit puzzling.

Maybe this becomes off-topic for this thread, so please let me know if you prefer that I open a separate ticket, and please let me know if I can provide any extra information (UFO, commands to reproduce the problems etc.).

Best,

Luca

[1]

ALOHA: aloha creates SSS1 routines

Command "output GG_HH_generatio

AttributeError : 'module' object has no attribute 'VVS2P0'

Please report this bug on https:/

More information is found in 'MG5_debug'.

Please attach this file to your report.

Hi,

I would probably need to have your model to be able to help you.

I have try to reproduce this with the heft model and with loop_sm model and did not face such problem.

So this is model specific (likely that your model does not follow UFO convention but maybe it is something different)

>VVS2P0 does not appear in any file in the UFO model and it's a bit puzzling.

This is a key word for VVS2 lorentz structure where the the propagator needs to be consider as massless.

>[1]

>ALOHA: aloha creates SSS1 routines

>Command "output GG_HH_generatio

>AttributeError : 'module' object has no attribute 'VVS2P0'

>Please report this bug on https:/

>More information is found in 'MG5_debug'.

>Please attach this file to your report.

Well this is basically as much information as... no information. I really need to full model in order to be able to comment on a bug. (or i need the model to reproduce it)

Cheers,

Olivier

Luca (cadaluca90) said : | #4 |

Hi Olivier,

thanks for the reply, and sorry for not giving enough details in the previous message.

The model that I am using can be downloaded from here:

https:/

and I can reproduce the issue with the following commands

import BSM_gg_HH

generate g g > H H QED==2

output OUTPUT_FOLDER

Thanks in advance for your help!

Best,

Luca

Hi,

So the problem is double.

1) The model that you use does not follow the UFO convention and instruct ALOHA to just use hardcoded function instead of using the normal procedure.

VVS2 = Lorentz(name = 'VVS2',

We support such convention but your model does not have the correct function defined.

I do not see any VVS2P0_1.f /VVS2P0_2.f /VVS2P0_3.f functions in the model

In your case I only see VVS2_3.f so it should be easy to create VVS2P0_3.f from that one

(since you only need to set the mass to zero) but if you need another one then you are forced to ask the original author of the model to do it.

2) Looks like we have an issue in ALOHA who call the wrong structure to ensure that indeed that

structure is set to external. This is something that I can investigate.

Cheers,

Olivier

On 1 Jun 2018, at 16:42, Luca <<email address hidden>

generate g g > H H QED==2

Actually the second problem is very simple:

and here is the patch:

=== modified file 'aloha/

--- aloha/create_

+++ aloha/create_

@@ -938,7 +938,7 @@

if self.has_

- lorentz = eval('self.

+ lorentz = eval('self.

else:

but due to the first issue, it obviously do not work:

Actually it does not crash because VVS2P0_3.f does not exists but because

VVS3_1.f does not.

While creating VVS2P0_3.f was easyto do, I have no clue how to do for VVS3_1.f

(obviously fixing that one, will lead to VVS2P0_3.f does not exists)

Cheers,

Olivier

Command "output " interrupted in sub-command:

"output" with error:

ALOHAERROR : No external routine "VVS3_1.f" in directories

/Users/

/Users/

/Users/

Please report this bug on https:/

More information is found in 'MG5_debug'.

Please attach this file to your report.

On 1 Jun 2018, at 16:42, Luca <<email address hidden>

generate g g > H H QED==2

## Can you help with this problem?

Provide an answer of your own, or ask Luca for more information if necessary.