ATLAS Offline Software
Loading...
Searching...
No Matches
ChainDictTools Namespace Reference

Functions

 splitInterSignatureChainDict (chainDict)
 splitChainDict (chainDict)
 splitChainDictInLegs (chainDict)
 splitChainInLegs (chainName)

Variables

 log = logging.getLogger( __name__ )

Function Documentation

◆ splitChainDict()

ChainDictTools.splitChainDict ( chainDict)

Definition at line 104 of file ChainDictTools.py.

104def splitChainDict(chainDict):
105 listOfChainDicts = []
106 for chainPart in chainDict['chainParts']:
107 newChainDict = deepcopy(chainDict)
108 newChainDict['chainParts'] = [chainPart]
109 listOfChainDicts += [newChainDict]
110 return listOfChainDicts
111

◆ splitChainDictInLegs()

ChainDictTools.splitChainDictInLegs ( chainDict)

Definition at line 112 of file ChainDictTools.py.

112def splitChainDictInLegs(chainDict):
113 from TrigCompositeUtils.TrigCompositeUtils import legName
114 if len(chainDict['chainParts']) ==1:
115 return [chainDict]
116
117 chainName= chainDict['chainName']
118 listOfChainDicts = []
119 for count, chainDictPart in enumerate(chainDict['chainParts']):
120 onePartChainDict = deepcopy( chainDict )
121 onePartChainDict['chainParts'] = [ chainDictPart ]
122 onePartChainDict['chainName'] = legName(chainName, count)
123 listOfChainDicts += [onePartChainDict]
124 return listOfChainDicts
125
126

◆ splitChainInLegs()

ChainDictTools.splitChainInLegs ( chainName)

Definition at line 127 of file ChainDictTools.py.

127def splitChainInLegs(chainName):
128 from TriggerMenuMT.HLT.Config.Utility.HLTMenuConfig import HLTMenuConfig
129 from TrigCompositeUtils.TrigCompositeUtils import legName
130 chainDict = HLTMenuConfig.getChainDictFromChainName(chainName)
131 if len(chainDict['chainParts']) ==1:
132 return [deepcopy(chainDict)]
133
134 listOfChainDicts = []
135 for count, chainDictPart in enumerate(chainDict['chainParts']):
136 onePartChainDict = deepcopy( chainDict )
137 onePartChainDict['chainParts'] = [ chainDictPart ]
138 onePartChainDict['chainName'] = legName(chainName, count)
139 listOfChainDicts += [onePartChainDict]
140 return listOfChainDicts

◆ splitInterSignatureChainDict()

ChainDictTools.splitInterSignatureChainDict ( chainDict)

Definition at line 9 of file ChainDictTools.py.

9def splitInterSignatureChainDict(chainDict):
10 listOfSplitChainDicts = []
11
12 move_jets = 'Bjet' in chainDict['signatures']
13
14 #Bjet and jet always go together, and the overall dict needs to have signature 'Bjet'
15
16 for chainPart in chainDict['chainParts']:
17 thisSignature = chainPart['signature']
18 chainPartAdded = False
19
20 for splitChainDict in listOfSplitChainDicts:
21 splitSignature = splitChainDict['chainParts'][0]['signature']
22 if thisSignature == splitSignature or \
23 (move_jets and thisSignature == 'Jet' and splitSignature == 'Bjet') or \
24 (move_jets and thisSignature == 'Bjet' and splitSignature == 'Jet'):
25 splitChainDict['chainParts'] += [chainPart]
26 chainPartAdded = True
27 break
28 if not chainPartAdded:
29 newSplitChainDict = deepcopy(chainDict)
30 newSplitChainDict['chainParts'] = [chainPart]
31 newSplitChainDict['signature'] = chainPart['signature']
32 listOfSplitChainDicts += [newSplitChainDict]
33
34 if move_jets:
35 for newDict in listOfSplitChainDicts:
36 if newDict['signature'] == 'Jet':
37 newDict['signature'] = 'Bjet'
38
39 #special code to handle chains with "AND" in the name
40 #jet,ht and bjet jet chains belong to the same signature
41 #so an extra key is needed to make sure the part are treated separately
42 for splitChainDict in listOfSplitChainDicts:
43 if 'AND' in [part['extra'] for part in splitChainDict['chainParts']]:
44 log.info("Implement extra splitting, triggered by AND key (%s.)", chainDict['chainName'])
45
46 listOfSplitChainDicts=[]
47 addNewSplit= False
48 for chainPart in chainDict['chainParts']:
49 thisSignature = chainPart['signature']
50 chainPartAdded = False
51
52 #chainPart coming after the AND, change temporaly the Signature name,
53 #so it does not get added to existing dictionary
54 if addNewSplit:
55 thisSignature = 'extraSplit'
56 addNewSplit = False
57
58 #chainPart containing at AND,
59 # make sure next chainPart is added as a new elemented to the listOfSplitChainDicts
60 if 'AND' in chainPart['extra']:
61 addNewSplit = True
62 #log.info("AND key found, next chainPart will be added as a new element of listOfSplitChainDicts")
63
64 for splitChainDict in listOfSplitChainDicts:
65 #if AND present in an elemenent of listOfSplitChainDicts, don't add anything to it
66 if 'AND' in [part['extra'] for part in splitChainDict['chainParts']]:
67 continue
68 if thisSignature == splitChainDict['chainParts'][0]['signature']:
69 #log.info("Adding %s to existing element %s.", chainPart['chainPartName'], splitChainDict)
70 splitChainDict['chainParts'] += [chainPart]
71 chainPartAdded = True
72 break
73 if not chainPartAdded:
74 newSplitChainDict = deepcopy(chainDict)
75 newSplitChainDict['chainParts'] = [chainPart]
76 newSplitChainDict['signature'] = chainPart['signature']
77 listOfSplitChainDicts += [newSplitChainDict]
78 #log.info("Adding %s as a new element of listOfSplitChainDicts", chainPart['chainPartName'])
79
80 #log.info("ListOfSplitChainDicts", chainPart['chainPartName'])
81
82 #order the splitted dicts
83 orderedListOfSplitChainDicts = []
84 if "mergingOrder" not in chainDict:
85 log.debug("No merging order given for chain %s.", chainDict['chainName'])
86 elif chainDict["mergingOrder"] == []:
87 log.debug("No merging order given for chain %s.", chainDict['chainName'])
88 else:
89 for chainPartName in chainDict["mergingOrder"]:
90 for splitChainDict in listOfSplitChainDicts:
91 if splitChainDict['chainParts'][0]['chainPartName'] == chainPartName:
92 orderedListOfSplitChainDicts += [splitChainDict]
93
94 if not len(orderedListOfSplitChainDicts) == len(listOfSplitChainDicts):
95 for chainPartName in chainDict["mergingOrder"]:
96 log.error("Ordering of split chain dicts failed. Please check that orderedListOfSplitChainDicts and listOfSplitChainDicts contain the same elements!!")
97 log.info(chainDict)
98
99 return orderedListOfSplitChainDicts
100
101 return listOfSplitChainDicts
102
103

Variable Documentation

◆ log

ChainDictTools.log = logging.getLogger( __name__ )

Definition at line 6 of file ChainDictTools.py.