124
124
sqso_name = ' '.join(['%s=%d'%(split_orders[i],val) for i, \
125
125
val in enumerate(squared_orders[sqso_index][0])])
126
126
sqso_identifier = "(%s), i.e. of split order ID=%d,"\
127
%(sqso_name, sqso_index)
127
%(sqso_name, sqso_index+1)
128
128
res.append(comment%sqso_identifier)
129
129
res.append("IF(FILTER_SO.AND.SQSO_TARGET."+\
130
130
"EQ.%d) GOTO %d"%(sqso_index+1,continue_label))
1039
1039
call = call + \
1040
1040
"%(LoopCoupling{0})s,%(MPLoopCoupling{0})s,".format(i+1)
1041
1041
call = call + "%(LoopRank)d,"
1042
call = call + "%(LoopSymmetryFactor)d,"
1042
call = call + "%(LoopSymmetryFactor)d,%(LoopMultiplier)d,"
1043
1043
call = call + "%(ampNumber)d,AMPL(1,%(ampNumber)d),S(%(ampNumber)d))"
1045
1045
def create_loop_amp(amplitude):
1329
1329
assert isinstance(matrix_element, loop_helas_objects.LoopHelasMatrixElement), \
1330
1330
"%s not valid argument for get_coef_construction_calls" % \
1331
1331
repr(matrix_element)
1332
loop_induced = (not matrix_element.get('processes')[0].get('has_born'))
1334
1334
sqso_max_lamp = [sqso[1][2] for sqso in squared_orders]
1341
1341
res.append(self.get_wavefunction_call(lwf))
1342
1342
for lamp in ldiag.get_loop_amplitudes():
1343
1343
# If the loop grouping is not desired, then make sure it is
1344
# turned off here. It is of course not to be included for
1345
# loop-induced processes
1346
if (not group_loops) or loop_induced:
1346
1347
lamp.set('loop_group_id',i)
1349
'CREATE_LOOP_COEFS(WL(1,0,1,%(number)d)',
1350
'%(loop_rank)d','%(lcut_size)d',
1351
'%(loop_number)d','%(LoopSymmetryFactor)d',
1352
'%(amp_number)d,H)']
1350
'CREATE_LOOP_COEFS(WL(1,0,1,%(number)d)',
1351
'%(loop_rank)d','%(lcut_size)d',
1352
'%(loop_number)d','%(LoopSymmetryFactor)d',
1353
'%(LoopMultiplier)d']
1354
if not loop_induced:
1355
create_coef.append('%(amp_number)d,H)')
1357
create_coef.append('%(amp_number)d)')
1353
1359
res.append('CALL %(proc_prefix)s'+','.join(create_coef)%{\
1354
1360
'number':lamp.get_final_loop_wavefunction().get('number'),
1355
1361
'loop_rank':lamp.get_analytic_info('wavefunction_rank'),
1359
1365
# be added into the same LOOPCOEF array component.
1360
1366
'loop_number':(lamp.get('loop_group_id')+1),
1361
1367
'amp_number':lamp.get('amplitudes')[0].get('number'),
1362
'LoopSymmetryFactor':lamp.get('loopsymmetryfactor')})
1368
'LoopSymmetryFactor':lamp.get('loopsymmetryfactor'),
1369
'LoopMultiplier':lamp.get('multiplier')})
1363
1370
res.extend(self.get_sqso_target_skip_code(
1364
1371
lamp.get('amplitudes')[0].get('number'),
1365
1372
sqso_max_lamp, 4000, split_orders, squared_orders,
1393
1400
# Reformat the loop group list in a convenient form
1394
1401
loop_group_refs=[(lamps[1][0],lamps[1][1:]) for lamps in \
1395
1402
matrix_element.get('loop_groups')]
1396
max_loop_group_ref = max([lg[0].get('loop_group_id') for lg in \
1398
1403
for (lamp_ref, lamps) in loop_group_refs:
1399
1404
res.append("# CutTools call for loop numbers %s"%\
1400
1405
','.join(['%d'%lamp_ref.get('number'),]+\
1408
1413
for ldiag in matrix_element.get_loop_diagrams():
1409
1414
res.append("# CutTools call for loop # %d"%ldiag.get('number'))
1410
1415
for lamp in ldiag.get_loop_amplitudes():
1416
# Make sure the loop number is used instead of the loop
1418
loop_group_id_tmp = lamp.get('loop_group_id')
1419
lamp.set('loop_group_id',lamp.get('number')-1)
1411
1420
res.append(self.get_amplitude_call(lamp))
1421
lamp.set('loop_group_id',loop_group_id_tmp)