Skip to content

Commit d5ee2d1

Browse files
committed
Merge branch 'main' into heidelberg26
2 parents 5fb2cbe + ffb1610 commit d5ee2d1

17 files changed

Lines changed: 292 additions & 114 deletions

File tree

madgraph/core/helas_objects.py

Lines changed: 24 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -3758,7 +3758,7 @@ def default_setup(self):
37583758
self['has_mirror_process'] = False
37593759
self['allowed_flavors'] = [] # list of all allowed flavors for the process
37603760
self['allowed_flavors_with_iden'] = [] # list of all allowed flavors for the process but grouped by identical matrix-element
3761-
self['allowed_flavors_unique'] = []
3761+
self['allowed_flavors_with_iden_sign'] = [] # list of all allowed flavors for the process but grouped by identical matrix-element
37623762

37633763
def filter(self, name, value):
37643764
"""Filter for valid diagram property values."""
@@ -5136,12 +5136,12 @@ def get_external_nhel(self):
51365136
return allowed_helicity
51375137

51385138

5139-
def get_external_flavors(self, all_perm=False, preserve_sign=False):
5139+
def get_external_flavors(self, all_perm=False, return_sign=False):
51405140
"""If merged particles are used, determine the list of possible flavor that are not zero """
51415141

51425142
if self['allowed_flavors']:
5143-
if preserve_sign:
5144-
return self['allowed_flavors_sign']
5143+
if return_sign:
5144+
return self['allowed_flavors'], self['allowed_flavors_sign']
51455145
else:
51465146
return self['allowed_flavors']
51475147
pdgs=[]
@@ -5150,12 +5150,8 @@ def get_external_flavors(self, all_perm=False, preserve_sign=False):
51505150
external_number=1
51515151
for wf in external_wfs:
51525152
if wf.get('number_external')==external_number:
5153-
pdgs.append(
5154-
wf.get('particle').get_pdg_code()
5155-
if external_number > 2
5156-
else wf.get('particle').get_anti_pdg_code()
5157-
)
51585153
external_number=external_number+1
5154+
pdgs.append(wf.get('particle').get_pdg_code())
51595155

51605156
to_map = {}
51615157
model = self.get('processes')[0].get('model')
@@ -5164,7 +5160,6 @@ def get_external_flavors(self, all_perm=False, preserve_sign=False):
51645160

51655161
flavor_list = []
51665162
pdg_list = []
5167-
51685163
restricted_flavor = [None]*len(external_wfs)
51695164
for i,wf in enumerate(external_wfs):
51705165
if wf.get('flavor'):
@@ -5222,43 +5217,38 @@ def get_external_flavors(self, all_perm=False, preserve_sign=False):
52225217

52235218
self['allowed_flavors'] = flavor_list
52245219
self['allowed_flavors_sign'] = pdg_list
5225-
return pdg_list if preserve_sign else flavor_list
5220+
if return_sign:
5221+
return self['allowed_flavors'], self['allowed_flavors_sign']
5222+
else:
5223+
return self['allowed_flavors']
52265224

5227-
def get_external_flavors_with_iden(self, return_pdgs=False):
5225+
def get_external_flavors_with_iden(self, return_sign=False):
52285226
if self['allowed_flavors_with_iden']:
5229-
return self['allowed_flavors_with_iden']
5227+
if return_sign:
5228+
return self['allowed_flavors_with_iden'], self['allowed_flavors_with_iden_sign']
5229+
else:
5230+
return self['allowed_flavors_with_iden']
52305231

52315232
model = self.get('processes')[0].get('model')
5232-
all_flv = self.get_external_flavors()
5233+
all_flv, all_flv_sign = self.get_external_flavors(return_sign=True)
52335234
map_all_flv = {}
5234-
for i, flv1 in enumerate(all_flv):
5235+
map_all_flv_sign = {}
5236+
for i, (flv1, flv1_sign) in enumerate(zip(all_flv, all_flv_sign)):
52355237
coup = self.get_coupling_for_flv(flv1, model)
52365238
if coup in map_all_flv:
52375239
map_all_flv[coup].append(flv1)
5240+
map_all_flv_sign[coup].append(flv1_sign)
52385241
else:
52395242
map_all_flv[coup] = [flv1]
5243+
map_all_flv_sign[coup] = [flv1_sign]
52405244

5245+
self['allowed_flavors_with_iden_sign'] = map_all_flv_sign.values()
52415246
self['allowed_flavors_with_iden'] = map_all_flv.values()
5242-
return self['allowed_flavors_with_iden']
5243-
5244-
def get_external_flavors_unique(self):
5245-
if self['allowed_flavors_unique']:
5246-
return self['allowed_flavors_unique']
5247-
5248-
model = self.get('processes')[0].get('model')
5249-
all_flv = self.get_external_flavors(preserve_sign=True)
5250-
map_all_flv = {}
5251-
for i, flv1 in enumerate(all_flv):
5252-
coup = self.get_coupling_for_flv(flv1, model)
5253-
key = (coup, flv1[0], flv1[1])
5254-
if key in map_all_flv:
5255-
map_all_flv[key].append(flv1)
5256-
else:
5257-
map_all_flv[key] = [flv1]
5247+
if return_sign:
5248+
return self['allowed_flavors_with_iden'], self['allowed_flavors_with_iden_sign']
5249+
else:
5250+
return self['allowed_flavors_with_iden']
52585251

5259-
self['allowed_flavors_unique'] = list(map_all_flv.values())
5260-
return self['allowed_flavors_unique']
5261-
52625252
def check_flavor(self, real_pdgs, model, debug=False):
52635253
"""check if any feynman diagram is compatible with the pdg codes replaced by the real_pdgs"""
52645254
HelasDiagram.done_flavor = []

madgraph/iolibs/export_cpp.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -915,7 +915,7 @@ def get_process_class_definitions(self, write=True):
915915
self.matrix_elements[0].get("diagrams")
916916
)
917917
replace_dict['nflav'] = len(
918-
self.matrix_elements[0].get_external_flavors_unique()
918+
self.matrix_elements[0].get_external_flavors_with_iden()
919919
)
920920

921921
else:
@@ -1193,9 +1193,9 @@ def get_sigmaKin_lines(self, color_amplitudes, write=True):
11931193
return replace_dict
11941194

11951195
def get_flavor_table(self, matrix_element):
1196-
flavors = matrix_element.get_external_flavors_unique()
1197-
flavor_multipliers = "{" + ",".join(str(len(f)) for f in flavors) + "}"
1198-
1196+
print(list(matrix_element.get_external_flavors()))
1197+
flavors = list(matrix_element.get_external_flavors_with_iden())
1198+
print(flavors)
11991199
flavor_dict = {
12001200
1: 0, 2: 1, 3: 2, 4: 3, # quarks
12011201
11: 0, 13: 1, 15: 2, # charged leptons
@@ -1211,7 +1211,6 @@ def get_flavor_table(self, matrix_element):
12111211
ext_count = len(flavors[0][0])
12121212
return f"""
12131213
static const int flavor_table[{flavor_count}][{ext_count}] = {full_flavor_table};
1214-
static const int flavor_multipliers[{flavor_count}] = {flavor_multipliers};
12151214
"""
12161215

12171216
def get_all_sigmaKin_lines(self, color_amplitudes, class_name):

madgraph/iolibs/export_mg7.py

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,18 @@ def get_subprocess_info(matrix_element, proc_dir, lib_me_path):
2828
)
2929
diagrams = amplitude.get("diagrams")
3030
helas_diagrams = matrix_element.get("diagrams")
31-
all_flavors = matrix_element.get_external_flavors_unique()
32-
31+
all_flavors, all_flavors_sign = matrix_element.get_external_flavors_with_iden(return_sign=True)
32+
all_flavors_same_initial = []
33+
all_flavors_indices = []
34+
for i, flavors in enumerate(all_flavors_sign):
35+
flv_dict = defaultdict(list)
36+
for flv in flavors:
37+
flv_dict[(flv[0], flv[1])].append(flv)
38+
indices = []
39+
for flv in flv_dict.values():
40+
indices.append(len(all_flavors_same_initial))
41+
all_flavors_same_initial.append((i, flv))
42+
all_flavors_indices.append(indices)
3343

3444
color_basis = matrix_element.get("color_basis")
3545
if color_basis:
@@ -59,9 +69,10 @@ def get_subprocess_info(matrix_element, proc_dir, lib_me_path):
5969

6070
helas_diagram = helas_diagrams[diagram_index]
6171
active_flavors = [
62-
i
63-
for i, flavors in enumerate(all_flavors)
64-
if helas_diagram.check_flavor(flavors[0], model)
72+
flav_id
73+
for indices, flavors in zip(all_flavors_indices, all_flavors)
74+
if helas_diagram.check_flavor([flv for flv in flavors[0]], model)
75+
for flav_id in indices
6576
]
6677

6778
diagram = diagrams[diagram_index]
@@ -120,9 +131,9 @@ def get_subprocess_info(matrix_element, proc_dir, lib_me_path):
120131
color_flows = [[
121132
[[color_flow_dict[leg.get("number")][i] for i in [0, 1]] for leg in legs]
122133
for color_flow_dict in color_flow_dicts
123-
]] * len(all_flavors) #TODO: this is wrong for multiple flavors!!!
134+
]] * len(all_flavors_same_initial) #TODO: this is wrong for multiple flavors!!!
124135
else:
125-
color_flows = [[[[0, 0]] * n_external]] * len(all_flavors) #TODO: this is wrong for multiple flavors!!!
136+
color_flows = [[[[0, 0]] * n_external]] * len(all_flavors_same_initial) #TODO: this is wrong for multiple flavors!!!
126137

127138
# We need the both particle and antiparticle wf_ids, since the identity
128139
# depends on the direction of the wf.
@@ -146,7 +157,10 @@ def get_subprocess_info(matrix_element, proc_dir, lib_me_path):
146157
sign = -1 if part_id < 0 else 1
147158
pdg_color_types[sign * pdg] = sign * model.get_particle(part_id).get_color()
148159

149-
flavors = [{"index": i, "options": options} for i, options in enumerate(all_flavors)]
160+
flavors = [
161+
{"index": index, "options": options}
162+
for index, options in all_flavors_same_initial
163+
]
150164
return {
151165
"incoming": incoming,
152166
"outgoing": outgoing,

madgraph/iolibs/template_files/cpp_process_sigmaKin_function.inc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ const int denominator = %(den_factors)s;
88
%(flavor_table)s
99

1010
const int* flavor = &flavor_table[flavor_id][0];
11-
int multiplier = flavor_multipliers[flavor_id];
1211

1312
ntry[flavor_id]++;
1413

@@ -50,4 +49,4 @@ if (sum_hel[flavor_id] == 0 || ntry[flavor_id] < 10){
5049
}
5150
}
5251

53-
return multiplier * matrix_element / (denominator * broken_sym(flavor));
52+
return matrix_element / (denominator * broken_sym(flavor));

0 commit comments

Comments
 (0)