|  | 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. |