From 5861d93d1e7c431cc42ed5533a4e3326be2366fc Mon Sep 17 00:00:00 2001 From: Alexander Puck Neuwirth Date: Tue, 28 May 2024 07:36:30 +0200 Subject: [PATCH] Add search for T-chain order --- debug/ee->qq_.ipynb | 38 +++++++++++++++++++------------------- feynamp/form/color.py | 15 ++++++++------- feynamp/leg.py | 36 +++++++++++++++++++++--------------- 3 files changed, 48 insertions(+), 41 deletions(-) diff --git a/debug/ee->qq_.ipynb b/debug/ee->qq_.ipynb index 3a8854a..d9fee27 100644 --- a/debug/ee->qq_.ipynb +++ b/debug/ee->qq_.ipynb @@ -49,7 +49,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "" ] @@ -154,7 +154,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3bb8f7f1ae7c4e759ab57bde0b69bfda", + "model_id": "f3fc78ec7f5b4681869d68fe317a808e", "version_major": 2, "version_minor": 0 }, @@ -168,7 +168,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "63cd431ba8f341cf9c3f163ac109fc82", + "model_id": "36556e121ebd44ca84c6e34628068865", "version_major": 2, "version_minor": 0 }, @@ -182,7 +182,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "541a45f525604f46977e2c9b8c448e39", + "model_id": "f646d983f13442a8bd40a16981c1d329", "version_major": 2, "version_minor": 0 }, @@ -203,7 +203,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "09e43055804e459494334427299be6d0", + "model_id": "996043c3bf8f4d6c80d7cece8417e7dc", "version_major": 2, "version_minor": 0 }, @@ -217,7 +217,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8312fd7b56b54248b7eaf9da8652343a", + "model_id": "872f51e8cc7640d9bc2527a445f8b06c", "version_major": 2, "version_minor": 0 }, @@ -231,7 +231,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "efd8d5b0db044ee2b6fee59d189eb465", + "model_id": "e01f722bc96b4712a13ee6978770961f", "version_major": 2, "version_minor": 0 }, @@ -252,7 +252,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4ec7c3f2466545819a189f1f2d57cd11", + "model_id": "5597fb5765924cb3b3edc94c31dac169", "version_major": 2, "version_minor": 0 }, @@ -266,7 +266,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b3aa9da781b845dfbb1e4e918780186f", + "model_id": "be758d6e07514b4bbc2090e5db03ecb7", "version_major": 2, "version_minor": 0 }, @@ -280,7 +280,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "912058efcff3411d90a81cdea9b3eb8e", + "model_id": "ea2ec65ce1eb4a12a2adf0cf00df3754", "version_major": 2, "version_minor": 0 }, @@ -371,7 +371,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9adab7410ab24f748ffbe18eac74dfa6", + "model_id": "1ee4c41711aa443d902ce96435f39afc", "version_major": 2, "version_minor": 0 }, @@ -385,7 +385,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b6bdb6b9e6df46c69a3f03ff3454e716", + "model_id": "0f4efe006cce4907b182c8f42eaaf96a", "version_major": 2, "version_minor": 0 }, @@ -399,7 +399,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1542e48f669f445e8594a185c19b5015", + "model_id": "ced4ad8440e84bd8b847ee66a21e60bc", "version_major": 2, "version_minor": 0 }, @@ -420,7 +420,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d8da4ba81888421fad70020e44e02bd3", + "model_id": "f9ef872a1410461eaecf3fdc301708bb", "version_major": 2, "version_minor": 0 }, @@ -434,7 +434,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "94fd21327c964fa58817f4992ad097c5", + "model_id": "f01a54509ccf4f39bc9ebe87a6ea5f69", "version_major": 2, "version_minor": 0 }, @@ -448,7 +448,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4a40bb88d50042b5a203b5ab3e7588a7", + "model_id": "c67feffe697e4a0ebbd4e4da398432b6", "version_major": 2, "version_minor": 0 }, @@ -469,7 +469,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "68357e8e76dc41da96b990aac70bb70e", + "model_id": "a0a218c2d76c4cfa8a5c39b6c6624802", "version_major": 2, "version_minor": 0 }, @@ -483,7 +483,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3f4ba75150824a888f73cf9b4cb03afe", + "model_id": "22256c40e69744df9ccaf8fed4b1dc54", "version_major": 2, "version_minor": 0 }, @@ -497,7 +497,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "379a3b1660104717b652e6f58d209699", + "model_id": "2d91d7a0e5564fd69e8ec87b162b0b54", "version_major": 2, "version_minor": 0 }, diff --git a/feynamp/form/color.py b/feynamp/form/color.py index ed81f16..65f3d47 100644 --- a/feynamp/form/color.py +++ b/feynamp/form/color.py @@ -128,15 +128,15 @@ def rep(s: str): repeat = rep -def get_color(fds=None, legs=None, model=None, colorcorrelation=False): +def get_color(fds=None, legs=None, model=None, colorcorrelation=False, s2=None): assert not colorcorrelation or ( fds is not None and legs is not None and model is not None ) # return get_color_v1() - return get_color_v3(fds, legs, model, colorcorrelation=colorcorrelation) + return get_color_v3(fds, legs, model, colorcorrelation=colorcorrelation, s2=s2) -def get_full_color_correlation_matrix(fds, legs, model): +def get_full_color_correlation_matrix(fds, legs, model, s2): left = "" right = "" @@ -149,7 +149,7 @@ def get_full_color_correlation_matrix(fds, legs, model): swap = [] ids = [] for i in range(len(legs)): - swap += [is_swapped_color_vector(fds[0], legs[i], model)] + swap += [is_swapped_color_vector(legs[i], s2)] vec += [get_color_vector(fds[0], legs[i], model)] ids += [color_vector_to_id(vec[i])] mom += [get_leg_momentum(legs[i])] @@ -203,10 +203,10 @@ def get_color_sum_v1(mom1=None, mom2=None): return ret + color_sum -def get_color_v3(fds, legs, model, colorcorrelation=False): +def get_color_v3(fds, legs, model, colorcorrelation=False, s2=None): ret = "" if colorcorrelation: - ret += get_full_color_correlation_matrix(fds, legs, model) + ret += get_full_color_correlation_matrix(fds, legs, model, s2=s2) else: ret += color_sum return ret + colorh_ids + color + colorh_ids + rep(color_simplify) @@ -232,7 +232,8 @@ def apply_color_ids(string_expr): def apply_color_parallel(string_exprs: List[str], **kwargs): return run_parallel( init + colorh_init, - get_color(**kwargs), + # we only forward one + get_color(s2=string_exprs[0], **kwargs), [string_to_form(a) for a in string_exprs], ) diff --git a/feynamp/leg.py b/feynamp/leg.py index f364cd8..6c02422 100644 --- a/feynamp/leg.py +++ b/feynamp/leg.py @@ -1,3 +1,6 @@ +import re + +from feynamp.log import warning from feynamp.momentum import insert_momentum from feynamp.util import find_particle_in_model @@ -39,21 +42,24 @@ def color_vector_to_index(color_vector): return None -def is_swapped_color_vector(fd, leg, model): - p = find_leg_in_model(fd, leg, model) - if leg.is_incoming(): - if p.color == 3: - return False - if p.color == -3: - return True - elif leg.is_outgoing(): - if p.color == 3: - return True - if p.color == -3: - return False - # TODO how sort for gluons? - raise ValueError("Color vector not implemented") - return None +def is_swapped_color_vector(leg, s2): + """ + For colorcorrelations the chains of T's must be properly ordered so we check if they must be swapped + + TODO: check this for gluons, maybe sign is wrong... + """ + if re.search(r"T\(Color" + leg.id + r",.*?,.*?\)", s2): + return True + elif re.search(r"T\(.*?,Color" + leg.id + r",.*?\)", s2): + return False + elif re.search(r"f\(Glu" + leg.id + r",.*?,.*?\)", s2): + return True + elif re.search(r"f\(.*?,Glu" + leg.id + r",.*?\)", s2): + return False + elif re.search(r"f\(.*?,.*?,Glu" + leg.id + r"\)", s2): + warning("leg color third in f, check colorcorrelations") + return True + raise ValueError(f"Color vector for {leg} not found in squared amplitude") def get_color_vector(fd, leg, model):