| | 148 | ------------ |
| | 149 | = Optional |
| | 150 | ------------ |
| | 151 | |
| | 152 | You can decide to use a normal model instead of the special one suggested here. Then, one can use an ad-hoc new command in MG5aMC to create a copy of all base interaction and orders so as to generate their 'BKG_' equivalent. |
| | 153 | This can be done by adding the following in the class 'MadGraphCmd' in '<MG_root_path>/madgraph/loop/loop_diagram_generation.py': |
| | 154 | |
| | 155 | {{{ |
| | 156 | def do_prepare_model_for_loopInducedXTrees(self, line): |
| | 157 | """Commands for adding the necessary TREE UV interactions to the current model.""" |
| | 158 | |
| | 159 | # Short-hand to the current model that will be modified |
| | 160 | model = self._curr_model |
| | 161 | |
| | 162 | # First add the necessary BKG coupling_orders to the available coupling_orders |
| | 163 | # in the model |
| | 164 | if model['order_hierarchy']: |
| | 165 | for coupling_order in model['order_hierarchy'].keys(): |
| | 166 | model['order_hierarchy']['BKG_%s'%coupling_order]=model['order_hierarchy'][coupling_order] |
| | 167 | model['perturbation_couplings'].append('BKG_%s'%coupling_order) |
| | 168 | |
| | 169 | new_order_hierarchy = dict(model['order_hierarchy']) |
| | 170 | new_perturbation_couplings = list(model['perturbation_couplings']) |
| | 171 | |
| | 172 | # Dubplicate base interactions to make UV ones |
| | 173 | new_interactions=[] |
| | 174 | id_offset = 1000000 |
| | 175 | for inter in model['interactions'].get_type('base'): |
| | 176 | new_interactions.append(copy.deepcopy(inter)) |
| | 177 | # Deepcopy intorrectly treats colorstring object. Need to do it by hand. |
| | 178 | new_interactions[-1].set('color',[cs.create_copy() for cs in inter.get('color')]) |
| | 179 | id_offset += 1 |
| | 180 | new_interactions[-1].set('id',id_offset) |
| | 181 | new_interactions[-1].set('type','UVtree') |
| | 182 | new_interactions[-1].set('loop_particles',[[]]) |
| | 183 | new_orders = {} |
| | 184 | for order in new_interactions[-1]['orders']: |
| | 185 | new_orders['BKG_%s'%order]=new_interactions[-1]['orders'][order] |
| | 186 | new_interactions[-1].set('orders',new_orders) |
| | 187 | |
| | 188 | |
| | 189 | model.set('interactions',base_objects.InteractionList(model.get('interactions')+new_interactions)) |
| | 190 | # Reset the model dictionaries to sync changes |
| | 191 | model.reset_dictionaries() |
| | 192 | # Refresh dictionaries manually (would be done automatically anyway) |
| | 193 | model.actualize_dictionaries() |
| | 194 | |
| | 195 | model.set('order_hierarchy', new_order_hierarchy) |
| | 196 | model.set('perturbation_couplings', new_perturbation_couplings) |
| | 197 | |
| | 198 | logger.info('Model %s successfully patched for (finite) Loops x Trees interference computation.'%model.get('name')) |
| | 199 | return |
| | 200 | }}} |
| | 201 | |
| | 202 | And then add the following in the class 'Switcher' of '<MG_root_path>/madgraph/interface/master_interface.py': |
| | 203 | |
| | 204 | {{{ |
| | 205 | def do_prepare_model_for_loopInducedXTrees(self, *args, **opts): |
| | 206 | return self.cmd.do_prepare_model_for_loopInducedXTrees(self, *args, **opts) |
| | 207 | }}} |
| | 208 | |
| | 209 | You can then simply run the command 'prepare_model_for_loopInducedXTrees' to preprocess your model before running loop-induced x tree computation as instructed above. |