~madteam/mg5amcnlo/series2.0

« back to all changes in this revision

Viewing changes to madgraph/iolibs/helas_call_writers.py

  • Committer: olivier Mattelaer
  • Date: 2015-03-05 00:14:16 UTC
  • mfrom: (258.1.9 2.3)
  • mto: (258.8.1 2.3)
  • mto: This revision was merged to the branch mainline in revision 259.
  • Revision ID: olivier.mattelaer@uclouvain.be-20150305001416-y9mzeykfzwnl9t0j
partial merge

Show diffs side-by-side

added added

removed removed

Lines of Context:
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))"
1044
1044
        
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
 
 
 
1332
        loop_induced = (not matrix_element.get('processes')[0].get('has_born'))
1333
1333
        res = []
1334
1334
        sqso_max_lamp = [sqso[1][2] for sqso in squared_orders]     
1335
1335
 
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.
1345
 
                if not group_loops:
 
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)
1347
1348
                    i=i+1
1348
1349
                create_coef=[
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)')
 
1356
                else:
 
1357
                    create_coef.append('%(amp_number)d)')
 
1358
            
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 \
1397
 
                                                               loop_group_refs])
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
 
1417
                    # group number
 
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)                    
1412
1422
 
1413
1423
        return res
1414
1424