File indexing completed on 2024-11-25 02:29:57
0001 import FWCore.ParameterSet.Config as cms
0002
0003
0004 def RemoveFlag(sevLevelComputer,flag="HFLongShort"):
0005 ''' Removes the specified flag from the Severity Level Computer,
0006 and returns the revised Computer.'''
0007
0008 removeSeverity=-1
0009
0010
0011
0012
0013 for i in range(len(sevLevelComputer.SeverityLevels)):
0014 Flags=sevLevelComputer.SeverityLevels[i].RecHitFlags.value()
0015 if flag not in Flags:
0016 continue
0017
0018 Flags.remove(flag)
0019 ChanStat=sevLevelComputer.SeverityLevels[i].ChannelStatus.value()
0020
0021 if len(Flags)==0 and ChanStat==['']:
0022 removeSeverity=i
0023 else:
0024
0025 sevLevelComputer.SeverityLevels[i].RecHitFlags=Flags
0026 break
0027
0028
0029 if (removeSeverity>-1):
0030 sevLevelComputer.SeverityLevels.remove(sevLevelComputer.SeverityLevels[removeSeverity])
0031
0032 return sevLevelComputer
0033
0034
0035 def PrintLevels(SLComp):
0036 print("Severity Level Computer Levels and associated flags/Channel Status values:")
0037 for i in SLComp.SeverityLevels:
0038 print("\t Level = %i"%i.Level.value())
0039 print("\t\t RecHit Flags = %s"%i.RecHitFlags.value())
0040 print("\t\t Channel Status = %s"%i.ChannelStatus.value())
0041 print()
0042 return
0043
0044
0045 def AddFlag(sevLevelComputer,flag="UserDefinedBit0",severity=10,verbose=True):
0046 ''' Adds specified flag to severity level computer using specified severity level.
0047 If flag already exists at another severity level, it is removed from that level.
0048 '''
0049
0050 AddedSeverity=False
0051 removeSeverity=-1
0052
0053 allowedflags=[]
0054 for i in sevLevelComputer.SeverityLevels:
0055 for j in i.RecHitFlags.value():
0056 if j=="":
0057 continue
0058 allowedflags.append(j)
0059
0060
0061 if flag not in allowedflags and verbose:
0062 print("\n\n")
0063 for j in range(0,3):
0064 print("###################################################")
0065 print("\nWARNING!!!!!! You are adding a flag \n\t'%s' \nthat is not defined in the Severity Level Computer!"%flag)
0066 print("This can be EXCEPTIONALLY dangerous if you do not \nknow what you are doing!\n")
0067 print("Proceed with EXTREME caution!\n")
0068 for j in range(0,3):
0069 print("###################################################")
0070 print("\n\n")
0071
0072
0073 for i in range(len(sevLevelComputer.SeverityLevels)):
0074 Level=sevLevelComputer.SeverityLevels[i].Level.value()
0075 Flags=sevLevelComputer.SeverityLevels[i].RecHitFlags.value()
0076 if Level==severity:
0077 if (Flags==['']):
0078 Flags=[flag]
0079 else:
0080 if flag not in Flags:
0081 Flags.append(flag)
0082 sevLevelComputer.SeverityLevels[i].RecHitFlags=Flags
0083 AddedSeverity=True
0084 else:
0085 if flag not in Flags:
0086 continue
0087 else:
0088 Flags.remove(flag)
0089 ChanStat=sevLevelComputer.SeverityLevels[i].ChannelStatus.value()
0090
0091 if len(Flags)==0 and ChanStat==['']:
0092 removeSeverity=i
0093 else:
0094 sevLevelComputer.SeverityLevels[i].RecHitFlags=Flags
0095
0096
0097 if (removeSeverity>-1):
0098 sevLevelComputer.SeverityLevels.remove(sevLevelComputer.SeverityLevels[removeSeverity])
0099
0100
0101
0102 if (AddedSeverity==False):
0103 sevLevelComputer.SeverityLevels.append(cms.PSet(Level=cms.int32(severity),
0104 RecHitFlags=cms.vstring(flag),
0105 ChannelStatus=cms.vstring("")))
0106 return sevLevelComputer
0107
0108
0109
0110
0111
0112 if __name__=="__main__":
0113 from . import hcalRecAlgoESProd_cfi as ES
0114 ES.hcalRecAlgos=RemoveFlag(ES.hcalRecAlgos)
0115 ES.hcalRecAlgos=AddFlag(ES.hcalRecAlgos,flag="HOBit",severity=5)
0116 PrintLevels(ES.hcalRecAlgos)
0117