File indexing completed on 2023-03-17 10:46:10
0001 from __future__ import print_function
0002 import sys
0003
0004 from Configuration.AlCa.autoCond import aliases
0005 import Configuration.StandardSequences.FrontierConditions_GlobalTag_cff
0006
0007 class GlobalTagBuilderException(Exception):
0008 def __init__(self, value):
0009 self.value = value
0010 def __str__(self):
0011 return repr(self.value)
0012
0013 class GlobalTag:
0014 def __init__(self, inputGT = "", inputConnect = "", inputPfnPrefix = "", inputPfnPostfix = "", inputGTParams = []):
0015 if inputGTParams == []:
0016 self.gtParams = []
0017 localConnect = inputConnect
0018 if localConnect == "":
0019
0020 localConnect = Configuration.StandardSequences.FrontierConditions_GlobalTag_cff.GlobalTag.connect.value()
0021
0022 localGT = inputGT
0023
0024 if localGT in aliases:
0025 localGT = aliases[localGT]
0026 if localGT.find("|") != -1 and localConnect.find("|") == -1:
0027
0028 connect = localConnect
0029 for i in range(1,len(localGT.split("|"))):
0030 localConnect += "|"+connect
0031 self.gtParams.append([localGT, localConnect, inputPfnPrefix, inputPfnPostfix])
0032 else:
0033 self.gtParams = inputGTParams
0034
0035 def __or__(self, other):
0036 if self.checkPrefix(other.gtParams) != -1:
0037 raise GlobalTagBuilderException("Error: trying to add the same GT component type \""+other.gtParams[0][0].split("_")[0]+"\" twice. This is not supported.")
0038 if len(other.gtParams) > 1:
0039 raise GlobalTagBuilderException("Error: the second GT has already a list. This is not supported.")
0040 tempGTParams = list(self.gtParams)
0041 tempGTParams.append(other.gtParams[0])
0042 return GlobalTag(inputGTParams = tempGTParams)
0043 def __add__(self, other):
0044 index = self.checkPrefix(other.gtParams)
0045 if index != -1:
0046 tempGTParams = list(self.gtParams)
0047 tempGTParams[index] = other.gtParams[0]
0048 return GlobalTag(inputGTParams = tempGTParams)
0049 else:
0050 exceptionString = "Error: replacement of GT "+other.gtParams[0][0]+" not allowed. No matching prefix found in existing GT components. Available components are:\n"
0051 for comp in self.gtParams:
0052 exceptionString += comp[0] + "\n"
0053 raise GlobalTagBuilderException(exceptionString)
0054 def checkPrefix(self, inputGTParams):
0055 """ Compares two input GTs to see if they have the same prefix. Returns the index in the internal list of GTs of the match
0056 or -1 in case of no match. """
0057 if inputGTParams[0][0].find("_") == -1:
0058 print("Invalid GT name. It does not contain an _, it cannot be used for replacements.")
0059 sys.exit(1)
0060 prefix = inputGTParams[0][0].split("_")[0]
0061 for i in range(0, len(self.gtParams)):
0062 if self.gtParams[i][0].split("_")[0] == prefix:
0063 return i
0064 return -1
0065 def buildString(self, index):
0066 outputString = ""
0067
0068
0069 for elem in self.gtParams:
0070 outputString += elem[index]
0071 if elem != self.gtParams[len(self.gtParams)-1]:
0072 outputString += "|"
0073 return outputString
0074
0075 def gt(self):
0076 return self.buildString(0)
0077 def connect(self):
0078 return self.buildString(1)
0079 def pfnPrefix(self):
0080 return self.buildString(2)
0081 def pfnPostfix(self):
0082 return self.buildString(3)