Changes between Version 2 and Version 3 of FAQ-General-15


Ignore:
Timestamp:
Nov 9, 2018, 5:46:56 PM (6 years ago)
Author:
Olivier Mattelaer
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • FAQ-General-15

    v2 v3  
    4040}}}
    4141
     42{{{
     43import madgraph.various.misc as misc
     44
     45def remove_diag(diag):
     46    """force to have two s-channel W decaying into a specific way.
     47       Designed for interference studies where decay chain are not allowed
     48       This is designed for keeping the following diagram generate p p > j j w- w-, w- > e- ve~
     49       from the following syntax:  p p > j j e- ve~ e- ve~
     50"""
     51
     52    found_w = 0
     53    for vertex in diag['vertices']:
     54        #misc.sprint(vertex.nice_string())
     55        if vertex.get('id') == 0: #special final vertex
     56             continue
     57        if len(vertex['legs'])!=3:
     58            continue
     59
     60        for i, leg in enumerate(list(vertex['legs'])):
     61            #misc.sprint(i, leg)
     62            if abs(leg['id']) != 24:
     63                continue
     64            else:
     65                break
     66        else:
     67            continue
     68        # we have a vertex with a W
     69        if i == 2: #This means a vertex A B > W or W > A B
     70            if leg['number'] > 2: # means that we have W > A B
     71                #misc.sprint(vertex.nice_string())
     72                # check that A B are what we want
     73                if not all(oleg['state'] for oleg in vertex['legs'][:2]) : # this means not final state
     74                    continue
     75                #misc.sprint([oleg['id'] for oleg in vertex['legs'][:2] ])
     76                if set([oleg['id'] for oleg in vertex['legs'][:2] ]) == set([11,-12]):
     77                    found_w +=1
     78        else: # this means A W > B
     79            if vertex['legs'][-1].get('number') < 3:
     80                # T-channel -> continue
     81                continue
     82            else:
     83                #check that they are both final state
     84                if not vertex['legs'][-1]['state']:
     85                    continue
     86                if not vertex['legs'][1 if i==0 else 0]['state']:
     87                    continue
     88
     89                other_id = [vertex['legs'][-1].get('id'), vertex['legs'][1 if i==0 else 0]['id']]
     90                if set(other_id) == set([11,-12]):
     91                    found_w += 1
     92
     93    misc.sprint(found_w)
     94    if found_w == 2:
     95        return True
     96    else:
     97        return False
     98
     99}}}
    42100=== running with user_filter
    43101