| 1 | This page describes the technical modifications necessary to compute Loop-Induced processes times tree-level diagrams with MadEvent and the Loop-Induced module of MG5aMC. |
| 2 | Notice that there is no official support for such computation in MG5aMC as of now, so that the procedure below must be performed with care and should be cross-checks in some limits before as we cannot guarantee the same level of reliability as with other MG5aMC functionalities. |
| 3 | It was however already successfully used and tested for g g > h > t t~ g. |
| 4 | |
| 5 | You can try to adapt this recipe to the latest version of MG5aMC or use directly v2.3.3 for which you should have a one-to-one correspondance with my intstructions. |
| 6 | |
| 7 | ----- |
| 8 | |
| 9 | a) First download the latest version of MG5_aMC, either using the tarball link: |
| 10 | |
| 11 | https://launchpad.net/mg5amcnlo/2.0/2.3.0/+download/MG5_aMC_v2.3.3.tar.gz |
| 12 | |
| 13 | b) Untar the 'special_loop_sm' UFO loop model file attached to this email and place it in the 'model' directory of your MG distribution. Notice that this model is a simple copy of the default 'loop_sm' model but contains modifications in the file 'CT_vertices' which now contains special 'UVtree' counterterms, which are precisely those which will emulate the QCD background you are interfering against. |
| 14 | Have a look at them; they are placed under the comment: |
| 15 | |
| 16 | {{{ |
| 17 | ######################################################################### |
| 18 | # Fake UVCT vertices for loop-induced and tree interference computation # |
| 19 | ######################################################################### |
| 20 | }}} |
| 21 | |
| 22 | Depending on the tree-level diagrams you will want to interfere against you might need to place additional copies of the regular tree-level vertices here, with the type UVTree and involving couplings defined in 'CT_couplings.py' with the coupling_order type 'BKGQCD'. You would for example need to add copies of the electroweak vertices for example if they played a role in your tree-level background. |
| 23 | In your case however, the tree-level diags are g g > t t~, so this model should be fine. |
| 24 | |
| 25 | c) Bring the following changes to the MG5_aMC python source code: |
| 26 | |
| 27 | >c.1) Anywhere in the class 'LoopUVCTDiagram' of the file '<MG_root_path>/madgraph/loop/loop_base_objects.py', add the following two functions: |
| 28 | {{{ |
| 29 | def get_contracted_loop_diagram(self, model, struct_rep=None): |
| 30 | return copy.copy(self) |
| 31 | def get_contracted_loop_diagram_without_tag(self, struct_rep=None): |
| 32 | return copy.copy(self) |
| 33 | }}} |
| 34 | |
| 35 | >c.2) In the file '<MG_root_path>/madgraph/loop/loop_diagram_generation.py' change the folllowing: |
| 36 | >> c.2.i) Around line 740, change: |
| 37 | {{{ |
| 38 | if self['process']['has_born']: |
| 39 | self.set_Born_CT() |
| 40 | }}} |
| 41 | into |
| 42 | {{{ |
| 43 | if True: |
| 44 | self.set_Born_CT() |
| 45 | }}} |
| 46 | >> c.2.ii) Around line 1190, change |
| 47 | {{{ |
| 48 | UVCTsuccessful, UVCTdiagrams = \ |
| 49 | super(LoopAmplitude, self).generate_diagrams(True) |
| 50 | }}} |
| 51 | into |
| 52 | {{{ |
| 53 | # Back up of the original process characteristics |
| 54 | bu = copy.copy(self['process']['required_s_channels']) |
| 55 | bu_orders = copy.copy(self['process']['orders']) |
| 56 | self['process']['required_s_channels'] = [] |
| 57 | for order in self['process']['model'].get_coupling_orders(): |
| 58 | self['process']['orders'][order] = 0 |
| 59 | self['process']['orders']['UVCT_SPECIAL'] = 999 |
| 60 | # Specify here the coupling orders desired for the background. By default, all. |
| 61 | self['process']['orders']['BKGQCD'] = 999 |
| 62 | UVCTsuccessful, UVCTdiagrams = \ |
| 63 | super(LoopAmplitude, self).generate_diagrams(True) |
| 64 | # Restore backed up properties |
| 65 | self['process']['required_s_channels'] = copy.copy(bu) |
| 66 | for order, value in bu_orders.items(): |
| 67 | self['process']['orders'][order] = value |
| 68 | }}} |
| 69 | (Note that you can add above further modifications of self['process']['orders'] and self['process']['required_s_channels'] to have a finer selection of your tree-level interfering diagrams, but for your purposes that shouldn't be needed. |
| 70 | Notice that thanks to the line |
| 71 | self['process']['required_s_channels'] = [] |
| 72 | the '> h >' constraint on the original process definition will not apply to the interfering tree-level diagrams.) |
| 73 | |
| 74 | >> c.2.iii) Around line 1212, change |
| 75 | {{{ |
| 76 | if UVCTdiag.get_order('UVCT_SPECIAL')==1: |
| 77 | }}} |
| 78 | into |
| 79 | {{{ |
| 80 | if True: |
| 81 | }}} |
| 82 | >c.3) Around line 1900 of the file '<MG_root_path>/madgraph/loop/loop_helas_objects.py' change: |
| 83 | {{{ |
| 84 | ref_orders = [lao[0] for lao in loop_orders+ct_amp_orders] |
| 85 | }}} |
| 86 | into |
| 87 | {{{ |
| 88 | ref_orders = [lao[0] for lao in loop_orders+ct_amp_orders+uvct_amp_orders] |
| 89 | }}} |
| 90 | |
| 91 | d) Now that all the necessary modifications have been performed, you should be able to run the code for simulation of the loop-induced vs tree interference as follows: |
| 92 | > d.1) First start the interface by running the script './bin/mg5' from within the directory <MG_root_path> |
| 93 | > d.2) Whenever you plan on running event generation (i.e. not necessary when doing MadLoop standalone), make sure that the grouping of subprocess is disabled, with |
| 94 | {{{ |
| 95 | MG5_aMC>set group_subprocesses False |
| 96 | }}} |
| 97 | > d.3) then load the model with |
| 98 | {{{ |
| 99 | MG5_aMC>import model special_loop_sm |
| 100 | }}} |
| 101 | This loads the special model for this sort of computation (with the fake 'background' UVCT vertices). |
| 102 | (Here I show an example for the process g g > h > t t~ g, so that it is clear that it is more general that what you wanted to do in the first place, namely g g > h > t t~) |
| 103 | > d.4) Generate the process in one of the two following ways (feel free to change the process definition at will): |
| 104 | If you want to run MadLoop in standalone to evaluate this interference for local phase-space points for cross-checks, run: |
| 105 | {{{ |
| 106 | MG5_aMC>generate g g > h > t t~ g [virt=QCD BKGQCD] |
| 107 | }}} |
| 108 | (You will automatically be able to see the individual contribution of the signal squared, interference term and background squared) |
| 109 | Instead, for the generation of the process which will be output with MadEvent to generate events, use: |
| 110 | {{{ |
| 111 | MG5_aMC>generate g g > h > t t~ g [noborn=QCD BKGQCD] BKGQCD^2==3 |
| 112 | }}} |
| 113 | for the generation of the process which will be output with MadEvent to generate events for this interference only. |
| 114 | |
| 115 | Notice that in the second syntax, you can substitute the initial state gluons with 'p' and the final-state ones with 'j' to include the quark channels as well. This works. |
| 116 | |
| 117 | >d.5) You can now output the process to a directory of a chosen name 'MyOutputDirName' |
| 118 | {{{ |
| 119 | MG5_aMC>output MyOutputDirName |
| 120 | }}} |
| 121 | >d.6) And finally launch it with |
| 122 | {{{ |
| 123 | MG5_aMC>launch |
| 124 | }}} |
| 125 | or alternatively, you can specify the directory name if you are returning to the interface and want to launch an existing output: |
| 126 | {{{ |
| 127 | MG5_aMC>launch MyOutputDirName |
| 128 | }}} |
| 129 | >d.7) MadGraph5_aMC@NLO will then ask you questions related to the details of either the MadLoop standalone run you are doing or the event generation run. |