JHUGen MELA  v2.4.1
Matrix element calculations as used in JHUGen. MELA is an important tool that was used for the Higgs boson discovery and for precise measurements of its structure and interactions. Please see the website https://spin.pha.jhu.edu/ and papers cited there for more details, and kindly cite those papers when using this code.
Public Member Functions | Public Attributes | Static Public Attributes | List of all members
pythonmelautils.MultiDimensionalCppArray Class Reference
Inheritance diagram for pythonmelautils.MultiDimensionalCppArray:
Inheritance graph
[legend]
Collaboration diagram for pythonmelautils.MultiDimensionalCppArray:
Collaboration graph
[legend]

Public Member Functions

def __init__ (self, uniqueid, cppvariable, includes, othercppargs, *dimensions)
 
def writecpp (self, f=None)
 
def compilecpp (self, f)
 
def __getitem__ (self, item)
 
def __setitem__ (self, item, value)
 

Public Attributes

 uniqueid
 
 cppvariable
 
 dimensions
 
 ndim
 
 subarrays
 
 othercppargs
 
 functionfilecontents
 
 includes
 
 functionfile
 
 getitem
 
 setitem
 

Static Public Attributes

string functionfiletemplate
 
list uniqueids = []
 
dictionary functionfiles = {}
 
dictionary getitems = {}
 
dictionary setitems = {}
 

Detailed Description

Definition at line 57 of file pythonmelautils.py.

Constructor & Destructor Documentation

◆ __init__()

def pythonmelautils.MultiDimensionalCppArray.__init__ (   self,
  uniqueid,
  cppvariable,
  includes,
  othercppargs,
dimensions 
)

Definition at line 70 of file pythonmelautils.py.

70  def __init__(self, uniqueid, cppvariable, includes, othercppargs, *dimensions):
71 
72  self.uniqueid = uniqueid
73  for i in self.uniqueids:
74  if i == uniqueid:
75  raise ValueError("Two MultiDimensionalCppArrays can't have the same id\n{}".format(i, self.uniqueid))
76  self.uniqueids.append(uniqueid)
77 
78  self.cppvariable = cppvariable
79  self.dimensions = dimensions
80  self.ndim = len(self.dimensions)
81  if self.ndim == 0:
82  raise TypeError("Can't have a 0 dimensional array!")
83 
84  if self.ndim > 1:
85  self.subarrays = []
86  for i in range(dimensions[0]):
87  othercppargs["int index{}".format(len(dimensions))] = i
88  self.subarrays.append(
89  MultiDimensionalCppArray(
90  "{}_{}".format(self.uniqueid, i),
91  "{}[index{}]".format(cppvariable, len(dimensions)),
92  includes,
93  othercppargs,
94  *dimensions[1:]
95  )
96  )
97  else:
98  self.othercppargs = OrderedDict(othercppargs)
99  self.functionfilecontents = self.functionfiletemplate.format(
100  name="NAME",
101  cppvariable=self.cppvariable,
102  cppargs=",".join([key for key in self.othercppargs]+["int item"]),
103  includes="\n".join("#include <{}>".format(_) for _ in includes),
104  )
105  self.includes = includes
106  self.functionfile = self.getitem = self.setitem = None
107 

Member Function Documentation

◆ __getitem__()

def pythonmelautils.MultiDimensionalCppArray.__getitem__ (   self,
  item 
)

Definition at line 140 of file pythonmelautils.py.

140  def __getitem__(self, item):
141  if self.ndim > 1:
142  return self.subarrays[item]
143  else:
144  if self.getitem is None: self.compilecpp(self.writecpp())
145  if item >= self.dimensions[0]:
146  raise IndexError("Index {} out of range (0-{})".format(item, self.dimensions[0]))
147  return self.getitem(*(list(self.othercppargs.values())+[item]))
148 

◆ __setitem__()

def pythonmelautils.MultiDimensionalCppArray.__setitem__ (   self,
  item,
  value 
)

Definition at line 149 of file pythonmelautils.py.

149  def __setitem__(self, item, value):
150  if self.ndim > 1:
151  raise TypeError("Need to specify all indices to write to the array.")
152  else:
153  if self.setitem is None: self.compilecpp()
154  if item >= self.dimensions[0]:
155  raise IndexError("Index {} out of range (0-{})".format(item, self.dimensions[0]))
156  self.setitem(*(list(self.othercppargs.values())+[item, value]))
157 

◆ compilecpp()

def pythonmelautils.MultiDimensionalCppArray.compilecpp (   self,
  f 
)

Definition at line 123 of file pythonmelautils.py.

123  def compilecpp(self, f):
124  if self.ndim > 1:
125  for subarray in self.subarrays:
126  subarray.compilecpp(f)
127  return
128 
129  if self.functionfilecontents not in self.getitems:
130  f.compile()
131  self.functionfiles[self.functionfilecontents] = f
132  self.getitems[self.functionfilecontents] = getattr(ROOT, "{}_getitem".format(self.uniqueid))
133  self.setitems[self.functionfilecontents] = getattr(ROOT, "{}_setitem".format(self.uniqueid))
134 
135  self.functionfile = self.functionfiles[self.functionfilecontents]
136  self.getitem = self.getitems[self.functionfilecontents]
137  self.setitem = self.setitems[self.functionfilecontents]
138 
139 

◆ writecpp()

def pythonmelautils.MultiDimensionalCppArray.writecpp (   self,
  f = None 
)

Definition at line 108 of file pythonmelautils.py.

108  def writecpp(self, f=None):
109  if self.ndim > 1:
110  for subarray in self.subarrays:
111  f = subarray.writecpp(f)
112  return f
113 
114  if self.functionfilecontents not in self.functionfiles:
115  if f is None:
116  f = NamedTemporaryMacro()
117  self.functionfiles[self.functionfilecontents] = f
118  f.write(self.functionfilecontents.replace("NAME", self.uniqueid))
119  return f
120  else:
121  return self.functionfiles[self.functionfilecontents]
122 

Member Data Documentation

◆ cppvariable

pythonmelautils.MultiDimensionalCppArray.cppvariable

Definition at line 78 of file pythonmelautils.py.

◆ dimensions

pythonmelautils.MultiDimensionalCppArray.dimensions

Definition at line 79 of file pythonmelautils.py.

◆ functionfile

pythonmelautils.MultiDimensionalCppArray.functionfile

Definition at line 106 of file pythonmelautils.py.

◆ functionfilecontents

pythonmelautils.MultiDimensionalCppArray.functionfilecontents

Definition at line 99 of file pythonmelautils.py.

◆ functionfiles

dictionary pythonmelautils.MultiDimensionalCppArray.functionfiles = {}
static

Definition at line 66 of file pythonmelautils.py.

◆ functionfiletemplate

string pythonmelautils.MultiDimensionalCppArray.functionfiletemplate
static
Initial value:
= """
#include <type_traits>
{includes}
auto {name}_getitem({cppargs}) -> std::remove_reference<decltype({cppvariable}[item])>::type {{return {cppvariable}[item];}}
void {name}_setitem({cppargs}, std::remove_reference<decltype({cppvariable}[item])>::type value) {{{cppvariable}[item] = value;}}
"""

Definition at line 58 of file pythonmelautils.py.

◆ getitem

pythonmelautils.MultiDimensionalCppArray.getitem

Definition at line 106 of file pythonmelautils.py.

◆ getitems

dictionary pythonmelautils.MultiDimensionalCppArray.getitems = {}
static

Definition at line 67 of file pythonmelautils.py.

◆ includes

pythonmelautils.MultiDimensionalCppArray.includes

Definition at line 105 of file pythonmelautils.py.

◆ ndim

pythonmelautils.MultiDimensionalCppArray.ndim

Definition at line 80 of file pythonmelautils.py.

◆ othercppargs

pythonmelautils.MultiDimensionalCppArray.othercppargs

Definition at line 98 of file pythonmelautils.py.

◆ setitem

pythonmelautils.MultiDimensionalCppArray.setitem

Definition at line 106 of file pythonmelautils.py.

◆ setitems

dictionary pythonmelautils.MultiDimensionalCppArray.setitems = {}
static

Definition at line 68 of file pythonmelautils.py.

◆ subarrays

pythonmelautils.MultiDimensionalCppArray.subarrays

Definition at line 85 of file pythonmelautils.py.

◆ uniqueid

pythonmelautils.MultiDimensionalCppArray.uniqueid

Definition at line 72 of file pythonmelautils.py.

◆ uniqueids

list pythonmelautils.MultiDimensionalCppArray.uniqueids = []
static

Definition at line 65 of file pythonmelautils.py.


The documentation for this class was generated from the following file: